от Пейо Попов(9-04-2004)

рейтинг (22)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Съдържание

За този документ

Този документ е превод на втора глава от The GNU Privacy Handbook. Преводът е част от проекта за защита на неприкосновеността на личната информация и има за цел да създаде достъпно и разбираемо за всеки ръководство за използване на GnuPG.


Увод

GnuPG използва няколко основни криптографски похвата, между които са симетрични шифри, шифри с публичен ключ, и еднопосочно хеширане. Вие може да използвате GnuPG и без да разбирате напълно тези концепции, но за да може да използвате пълните му възможности е необходимо да разбирате някои от тях.

Тази глава има за цел да Ви въведе в основните криптографски концепции, използвани в GnuPG. Други книги покриват тези теми в детайл. Ако материята ви интересува, добра книга, за да продължите е "Приложна криптография" на Брус Шайнер.

Симетрични шифри

Симетричния шифър е такъв шифър, който използва един и същ ключ за шифриране и дешифриране. За да установят надеждна комуникация със симетричен шифър, двете комуникиращи страни трябва предварително да са се договорили за ключа. След като са се договорили, изпращача шифрира съобщение, използвайки договорения ключ, изпраща съобщението на получателя,който го дешифрира използвайки същия ключ. Пример за симетричен шифър е германската машина Енигма, при която шифрите за деня са били разпространявани като кодова книга. Така всеки ден изпращация или получаващия оператор, трябвало да провери в неговата книга и да намери шифъра за деня и да го ползва за дешифиране на целия трафик за деня. Едни от най-ползваните съвременни шифри включват 3DES, Blowfish и IDEA.

Добрият шифър зависи единствено от сигурността на ключа, а не от сигурността на алгоритъма на шифъра. Казано по друг начин, атакуващият дори и да знае алгоритъма, не трябва да може да дешифрира съобщението без ключа. Всички използвани шифри в GnuPG притежават това свойство.

Тъй като цялата сигурност на симетричния шифър зависи единствено от ключа е важно той да бъде труден за отгатване. Казано по друг начин, възможните комбинации или множеството на възможните ключове трябва да бъде възможно най-голямо. Докато е бил в Лос Аламос, Ричар Фейман е бил известен със способността си да отваря сейфове. За да усили мистичния си образ, той винаги е носил със себе си набор от инструменти, включително и стар стетоскоп. В действителност, той е ползвал различни трикове, за да намали броя възможни комбинации и след това просто е налучквал, докато познае вярната. Казано с други думи, той просто е свеждал до минимум възможножните ключове.

Великобритания е използвала машини, за да познае ключовете по време на Втората Световна война. Германската машина енигма е могла да използва много възможни ключове, но Великобитания е направила специални изчислителни машини наречени "Бомби", за да налучват ключа. Това означавало, че понякога те разбирали ключа за деня в рамките на няколко часа, а друг път - за няколко дена. Тези машини не са били с общо предназначение, но считат за предшественици на съвременните компютри.

Днес компютрите могат да познават ключове много бързо и затова размера на ключа е много важен в съвременните криптосистеми. Шифърът DES използва 56 битов ключ, което означава, че съществуват 256 възможни ключа. 256 са 72,057,594,037,927,936 възможни комбинации. Това са много ключове, но един нормален съвременен компютър може да ги изпробва всичките в рамките на дни, докато на един компютър, създаден специално с такава цел, ще му отнеме няколко часа. От друга страна съществуват и по-нови шифри като 3DES, Blowfish и IDEA, всички от които използват 128-битови ключове, което означава че има 2128 възможни ключа. Това са много, много повече комбинации и дори ако всички компютри в света се обединят, ще им трябва повече време от възрастта на вселената, за да намерят ключа.

Шифри с публичен ключ

Основния проблем със симетричните шифри не е тяхната надежност, а обмена на ключове. След като веднъж изпращача и получателя за обменили ключове, те могат да осъществят сигурна комуникация, но проблема е сигурността на канала, по който се обменят ключове. На практика би било много по-лесно за атакуващия да се опита да прихване обмена на ключове, отколкото да оптива всички възможни комбинации на ключа. Друг проблем е броя необходими ключове. Ако съществуват n човека, които трябва да комуникират са нужни n(n-1)/2 на брой ключа, за да може всяка двойка да комуникира сигурно. Това може да изглежда приемливо за малки групи от хора, но бързо става неприложимо с нарастването на броя хора.

За да решат проблема с обмена на ключове се използват шифрите с публичен ключ. Шифрите с публичен ключ използват двойка ключове за изпращане на съобщението. Единия ключ е публичния ключ и може да бъде раздаван на всеки. Другия ключ е частния ключ и той се пази в тайна от собственика на двойката. Изпращача шифирира съобщението, използвайки публичния ключ на получателя и след като веднъж бъде шифрирано само собственика на частния ключ може да го дешифрира.

Този подход решава проблемите с обмена на ключове, които съществуват при симетричните шифри, като елимира нуждата изпращача и получателя предварително да се договарят за ключа, който ще ползват. Всичко, което е нужно за да бъде осъществена сигурна комуникация е изпращача да се сдобие с копие от публичния ключ на получателя. Така само n двойки ключове са нужни на n човека, за да осъществят сигурна комуникация помежду си.

Шифрите с публичен ключ са базирани на еднопосочни функции, които имат слабост. Еднопосочни функции са такива функции, чийто резултат може лесно да се изчисли, но е много трудно от резултата да се изведат аргументите на функцията. Примерно е лесно да се умножат две прости числа, но е много трудно да се получат простите множители на едно достатъчно голямо число. Слабостта на този вид функции се изразява в това, че ако част от информацията е известна, става лесно да се получат аргументите на функцията. Примерно, ако имате число, което е получено от умножението на две прости числа, ако знаете един от множителите може лесно да изведете другия. При шифрите с публичен ключ базирани на факторизацията на прости числа, публичния ключ е резултат от умножаването на две големи прости числа и алгоритъма за шифриране използва това число, за да шифрира съобщението. Алгоритъма за дешифриране изисква знанието на простите множители и така дешифрирането е лесно, ако знаете простите множители, които се съдържат в частния ключ и е изключително трудно, ако не разполагате с тях.

Както и при симетричните шифри, така и при тези с публичен ключ - сигурността зависи от ключа. Затова размера на ключа се използва като мерило за сигурността на системата, но дължината на симетричния и на асиметричния ключ не може да бъде използвана, за да бъде сравнявана сигурността между двата типа шифри. При атака с груба сила върху симетричен шифър с дължина на ключа от 80 бита, атакуващият трябва да изпробва до 280 възможни комбинации, за да намери използвания ключ. При атака с груба сила върху шифър с публичен ключ с размер 512 бита атакуващия трябва да разложи на прости множители произведението на число съдържащо се в 512 бита (около 115 десетични цифри). Товарът за атакуващия би бил напълно различен в зависимост от шифъра, който атакува. Докато 128 бита са достатъчни за симетрични шифри, като се вземе предвид съвременната изчислителна техника, 1024 бита са препоръчителна големина за ключовете на шифрите с публичен ключ.

Хибридни шифри

Шифрите с публичен ключ не са универсално решение. Много от симетричните шифри са относително по-сигурни, а операциите при шифрите с публичен ключ обикновенно изискват повече изчислителния отколкото тези със симетричен. Въпреки това шифрите с публичен ключ са най-добрия начин за разпространение на ключовете за симетрични шифри и по тази причина те се ползват в хибридните шифри.

Хибридния шифър използва едновременно симетричен шифър и шифър с публичен ключ. Шифъра с публичен ключ се използва, за да се обмени ключа за симетричния шифър. Същинското съобщение се шифрира със симетричен шифър, а ключа с който е шифрирано то се обменя чрез шифъра с публичен ключ. Обикновенно се изполва различен, случайно генериран ключ за симетричния шифър за всяко съобщение и затова този ключ се нарича още и сесиен ключ.

И PGP и GnuPG използват хибридни шифри. Сесийния ключ, шифриран с шифър с публичен ключ и съобщението, шифрирано със симетричен шифър се комбинират автоматично в един пакет. Получателят използва неговия частен ключ, за да дешифрира сесийния ключ и този сесиен ключ се използва, за да се дешифрира съобщението.

Хибридния шифър е сигурен, колкото е сигурен по-слабият от двата използвани шифъра. При PGP и GnuPG вероятно по-слабото звено е шифърът с публичен ключ. Дори и да допуснем, че атакуващия успее да разбере сесийния ключ, то той ще му бъде от полза само за да дешифрира настоящето съобщение и той ще трябва да започне наново, ако иска да дешифрира друго съобщение.

Цифрови подписи

Хеш функцията е функция от тип "много към едно". Тя преобразува нейния аргумент към резултат с фиксирана дължина. Обиковенно аргумента и резултата са от множеството на естествените числа. Проста хеш функция е f(x) = 0 за всички x. Малко по-интересна хеш функция е: f(x) = x mod 37x , която преставлява остатъка от целочислено делене на x на 37.

Цифровият подпис е резултат от прилагането на хеш функция към съдържанието на документ. За да бъде използваема на практика, хеш функцията трябва да отговаря на две изисквания: Първо, трябва да бъде достатъчно трудно да се намерят два документа, чиято хеш сума е еднаква. Второ, трябва да е невъзможно от хеш сумата да се възстанови документа, от който е получена тя.

Някои шифри с публичен ключ могат да бъдат използвани, за да се подписват документи. Подписващия шифрира документа с неговия частен ключ. А всеки, който иска да провери подписа използва публичния ключ на подписалия, за да дешифрира документа. Този начин отговаря и на двете изисквания, но е много бавен, за да се прилага на практика.

Алтернативата му е да се използват хеш функции, които са създадени да отговарят на горните две изисквания. Пример за такива са SHA и MD5 алгоритмите. При използването им, документа се подписва чрез хеширането му и хеш сумата представлява неговия подпис. Всеки, който иска да провери подписа може да изпълни същата операция по хеширане и да сравни получената хеш сумата, с тази дошла с оригиналния документ. Ако те съвпадат се приема за сигурно, че документа е непроменен.

Разбира се, възниква проблема как да се изполва хеш функцията, без да се позволи на атакуващия да промени стойността на хеш сумата. Ако документа и подписа се изпращат нешифрирани, потенциалния атакуващ би могъл да измени документа и да генерира нова хеш сума. Ако само документа е шифриран, атакуващия би могъл да промени стойността на хеш сумата и така при проверката получателя да не може да възпроизведе същата хеш сума и така ще предизвика съмнения в достоверността му. Трета възможност е да се използва хибриден шифър, за да се подпишат и документа и хеш сумата му. Подписващия изполва своя частен ключ за документа и подписа му и по този начин всеки може да използва неговия публичен, за да провери подписа му. Това може да изглежда добро решение, но всъщност е безсмислица. Ако този хибриден алгоритъм наистина е осигурил целостта на документа, то той би обезсмислил цифровия подпис. По-сериозния проблем, обаче, е че гореописания подход не защитава нито подписа, нито самия документ от подправяне. Всеки може да използва публичния ключ, за да дешифрира сесийния ключ и така да до ползва за шифриране на подправените от него документи.

Приложимо на практика решение е да се използва шифър с публичен ключ, за да се шифрира само подписа. По-конкретно - хеш сумата се шифрира, чрез публичния ключ на подписващия и всеки може да провери подписа му, като използва публичния му ключ. Подписаният документ може да бъде изпратен шифриран с симетричен алгоритъм или в открита форма. Ако документът бъде променен, проверката на хеш сумата на подписа няма да бъде успешна и това ще покаже вмешателството на трета страна. Стандартът за цифров подпис (Digital Signature Standard - DSA ) работи точно по гореописания начин и той е основния алгоритъм за подписване, който се ползва в GnuPG.

Молба за корекции

За успеха и полезността на проекта е изключително важно той да е максимално изчистен от грешки и достъпен за разбиране. Затова ви моля да изпращате всякви корекции като коментар тук или на моя емайл адрес.
Пейо Попов



<< Професионален пощенски сървър (Част 1) | Инсталиране на Pine под Debian GNU/Linux 2.0 >>