Здравствуйте!
Что-то увяла наша дискуссия о технологиях в криптографии, эдак многие и вправду могут подумать, что для обсуждения вопросов криптографии вполне достаточно оперировать алгоритмами и протоколами. Попробую еще раз показать, что это - далеко не так.
Начну с того, что на сегодняшний день существуют 2 подхода к криптованию данных:
a. symmetric or secret-key (private-key) cryptography
b. asymmetric or public-key cryptography
a. Симметричная криптография - это технология, в которой для криптования и декриптования (encryption and decryption) используется один и тот же ключ (a secret key\private key). В этой технологии используются стандарты и алгоритмы:
Data Encryption Standard (DES)
Triple-DES (3DES)
International Data Encryption Algorithm (IDEA)
Password Usage
Сами по себе стандарты и используемые в них алгоритмы весьма хороши, c точки зрения простоты использования и, особенно DES, в скорости работы при реализации алгоритмов ввиде наборов чипов (hardware, в программной реализации IDEA более "проворен" чем DES). То, что DES 1976-ого "года рождения" с его 56-тью битами ключа буржуи научились "крякать" еще два года назад (1998, а КГБ CCCР - возможно и еще раньше - кто знает?), это недостаток, конечно, но главные недостатки всех 4-х вышеперечисленных алгоритмов и стандартов - технологического плана:
1.Единственный ключ, используемый и Отправителем, и Получателем, надо как-то надежно передать через Интернет (key distribution problem);
2.Если кто-то "спер" этот ключ, используемый, скажем, мной и моим другом, то этот "кто-то" может спокойно выступать в переписке от моего имени и мой друг не заподозрит подмены, он ведь уверен, что ключ знают только он и я, и если мой друг успешно декриптовал сообщение, то вроде бы только я один мог его послать (source authentication problem);
3.Этот "кто-то" может перехватить мое платежное поручение банку и поставить свои реквизиты на получение денежных средств (message integrity problem)
Приведенных 3-х недостатков вполне достаточно, так думается, чтобы понять - да, в протоколах могут использоваться соответствующие стандарты и алгоритмы, и можно обсуждать их достоинства и недостатки как таковых, но совершенно непрактично в криптографии обходить стороной вопросы применяемых технологий, а посему:
b. asymmetric or public-key cryptography - это технология, впервые обнародованная by Diffie and Hellman, и в которой для криптования и декриптования используются разные ключи, конкретно - пара ключей, public key and the private key, и каждый из них может как криптовать, так и декриптовать исходный материал, называемый в криптографии plaintext.
Далее, троица из MIT (Rivest, Shamir and Adelman) в 1977-м, через год после рождения DES, изобрела крипто алгоритм (RSA public key algorithm) и технологию его применения (RSA public key cryptography), коротко - RSA, то, что сейчас является стандартом де-факто в Интернете - RSA Internet encryption and authentication technology.
Идея MIT'овской троицы, RSA, заключалась в замене единственного DES ключа на пару ключей - public key and a private key. Каждый, и отправитель, и получатель, имеют свою собственную пару (public-private key pair), и свободно дают, кому не лень, свой public key, оберегая в секрете свой private key. В принципе, по технологии обнародованной by Diffie and Hellman, сообщение может быть криптовано любым, public или private, ключом из пары, и декриптовано соотвествующим противоположным ключом из пары.
RSA несколько ограничили сие вольнодумство/вольтерианство - сообщение следует криптовать с использованием public key получателя и тогда оно может быть декриптовано только с использованием private key получателя. Это - то, что называют RSA encryption.
RSA криптование позволяет решить первую и третью из проблем безопасности, упомянутых выше (key distribution problem + message integrity problem).
Оставшуюся source authentication problem RSA предложили решать следующим образом: сообщение криптуется (is encrypted, locked) с использованием private key отправителя и декриптуется (is decrypted, unlocked) с использованием public key того же отправителя. Это - то, что называют RSA signing.
Получается следующая картина - если заменяем DES encryption на RSA signing (а это есть фактически RSA криптоалгоритм + технология применения ключей отправителя), то любой, кто успешно декриптовал мое сообщение, может быть уверен, что оно притопало именно от меня. Далее, я могу использовать RSA encryption (RSA криптоалгоритм + технология использования ключей получателя) для криптования этого же, уже помеченного (RSA-signed) сообщения с использоваием public key получателя, дабы еще и самому быть 100% уверенным, что только желаемый мною получатель сможет прочесть мое сообщение.
Все это хорошо, но встает еще одна проблема, и опять же - технологического плана. Дело в том, что RSA алгоритм работает много медленне DES, и это еще при том, что я должен сделать 2 медленные криптографические операции при передаче каждого сообщения - RSA encryption и, отдельно, RSA signing. А сообщение то может быть и большим, скажем, длиной чуть меньше 2^64 бит... И используемые компьютеры - не у всех суперкомпы...
Что придумали для решения этой проблемы:
При отправке сообщения, для его криптования использовать временный, свежесгенерированный DES ключ, и использовать его только для передачи этого сообщения. Для другого сообщения - генерируем новый DES ключ, поэтому ключи такого типа называют DES session key. Из самого сообщения делать своего рода "выжимку", "экстракт" сообщения такого свойства - если человек есть аналог сообщения, то "экстракт" (the hash) есть аналог узора на пальцах в смысле уникальности.
Имеющиеся hash-алгоритмы (SHA-1, MD-5) позволяют путем спецвычислений делать маленький, скажем 160 бит, "отпечаток пальцев" с большого сообщения, и если отправитель этого сообщения "заверит" (RSA signing) эти 160 бит и отправит их получателю, то будем иметь то, что называют digital signature, или еще можно встретить название - a keyed hash.
Приведенных сведений вполне достаточно, чтобы описать технологию применения RSA в случае, например, когда я посылаю сообщение своему другану:
Что должен сделать я:
1.сгенерировать DES session key
2.закриптовать мое сообщение, используя этот DES ключ
3.закриптовать этот же ключ, используя RSA encryption, то есть используя public key получателя
4.вычислить hash сообщения
5.подписать (digital signature) полученный hash, используя RSA signing, то есть используя мой private key
6.отправить получателю: DES-криптованное сообщение, раз; RSA-криптованный DES ключ, это два; RSA signed hash, это три.
Что должен сделать друг-получатель:
1.Декриптовать полученный и криптованный DES ключ, используя свой private key
2.Декриптовать полученное сообщение, используя этот DES ключ
3.Сделать hash декриптованного сообщения и запомнить его
4.Декриптовать переданный мной hash, используя МОЙ PUBLIC KEY
5.Сравнить запомненный hash c полученным
6.В случае совпадения полученного hash с вычисленным на месте - все в порядке, мин нет!!!
Подобные процессы выполняются на любом компе, использующем security options of MS Internet Explorer or Netscape Communicator/Navigator, или на компе, использующем PGP (Pretty Good Privacy) технологию (за разницей - в PGP вместо DES используется 128 битовый IDEA и для частного употребления RSA 512-2048 bits вроде бы не требуется патента), только в качестве друга-получателя будут выступать Web-server или E-mail программа, и за одним существенным дополнением - поскольку в процессе участвуют двое и может обьявиться своего рода самозванец, третий, утверждающий, скажем, что он - это я, то все public keys, участвующие в процессах, принято заверять, сертифицировать (RSA signing), третьей стороной, которой вынуждены доверять все участники обмена. Эта третья сторона называется CA - Certificate Authority (VeriSign, AT&T, US Postal Service, Microsoft, Netscape, ...), и суть ее работы сводится к сертификации (персональных деталей (identity) личности или организации + public key этой identity). При этом используется private key, принадлежащий CA, а сам сертификат называют Digital Certificate. Поэтому и число разновидностей Digital Certificates соответсвует числу типов владельцев public keys: Personal (Client), Server (Site), E-mail and finally CA сертификаты.
Легко сделать summary:
Public Keys употребляются для криптования посылаемого сообщения, для верификации Digital Signature и authentication отправителя;
Private Keys - для декриптования криптованного сообщения и для посылки Digital Signature.
Что-то вроде Заключения:
Техническую реализацию вышеупомянутых технологий или элементов можно найти практически во всех протоколах (IPSec, L2TP, PPTP), используемых в VPN технологиях MS Windows 2000 для обеспечения безопасности сетевых коммуникаций. Более того, в Windows 2000 предусмотрена возможность "шлепать" собственные сертификаты для клиентов of сервисов этой операционной системы, достаточно только получить "корневой" сертификат от какого-нибудь уважаемого CA - Certificate Authority, и уж потом выступать как CA для своих клиентов.
Я это все к тому, что по крайней мере странно читать заявления некоторых спецов, что выкорчевать серьезную криптографию из Windows 2000 не представляет большого труда, и, что более странно, эти спецы не предлагают свои услуги. Также - удивляет, скажем, простодушное отношение к технологиям вообще и к технологиям Microsoft в частности со стороны моего оппонента по дискуссии. Мой оппонент хотел бы получить от Микрософт списки вызываемых модулей и списки библиотек. И ключ от квартиры, где деньги лежат... Я так думаю, в Микрософт бешено хохотали, получив такой запрос (Oh, those Russians!!!).
Я надеюсь, что сие робкое роптание не послужит причиной "вырезания" уважаемым Редактором Либертариума моей реплики из дискуссии, я ведь все таки не "поднялся" до выяснений, у кого "в голове каша"...
До свиданий.
Виктор Ангелов.
Где можно найти подробности:
очень путние словари:
http://www.freeswan.org/freeswan_trees/freeswan-1.2/doc/glossary.html
http://www.netarrant.com/comm/support/glossary.htm
все, или, как утверждают авторы, почти все о PGP:
http://www.stack.nl/~galactus/remailers/index-pgp.html
http://www.eskimo.com/~joelm/pihelp.html
RSA:
http://www.alumni.caltech.edu/~yang/jy_crypto.html
Web security:
http://www.microsoft.com/technet/security/web.asp
http://www.securityportal.com/research/www-auth/
Как "крякали" DES:
http://www.eff.org/descracker.html
Certificate Overview:
http://www.collegeboard.org/aes/sss/html/docs/overview.htm
NetScape Admin Guide:
http://developer.netscape.com/docs/manuals/cms/41/adm_gide/kycrt_in.htm