oldi

Криптографические алгоритмы

Павел Исаев

В зарубежной литературе общепринято определять область защиты информации собирательным термином «криптология» (от греческих корней «скрытно» и «слово»). Как считает патриарх академической криптологии Джеймс Мэсси (Университет ETH, Швейцария), криптология вполне естественным образом делится на два направления: криптографию и криптоанализ. Криптограф изыскивает методы гарантированного засекречивания и/или подтверждения подлинности (аутентичности) сообщения. Криптоаналитик ищет способы вскрыть шифр или так подделать код сигнала, чтобы его принимали за подлинный. Оригинал сообщения, который криптограф пытается засекретить, называется открытым текстом, а плод его труда — шифртекстом, или криптограммой. Криптограф всегда использует секретный ключ для управления процессом шифрования.

Почти универсальным предположением в криптографии является допущение, что криптоаналитик противника имеет полный доступ к криптограмме. Практически столь же единодушно криптографы исходят из предположения, впервые сформулированного голландцем А.Керкхоффсом (1835-1903) и гласящего, что стойкость шифра должна целиком зависеть от секретного ключа. Эквивалентно данное допущение Керкхоффса можно выразить таким образом: весь механизм шифрования, кроме значения секретного ключа, известен криптоаналитику противника. Если криптограф исходит только из этих двух допущений, то он разрабатывает криптосистему, стойкую к атаке лишь по шифртексту. Если далее криптограф предполагает, что криптоаналитик каким-то образом сумеет заполучить пары открытого и шифрованного текстов, зашифрованные с помощью неизвестного ему секретного ключа, то шифрсистема разрабатывается стойкой к атаке с известным открытым текстом. Криптограф может даже предположить, что криптоаналитик врага способен составить собственный открытый текст и прогнать его через шифрсистему, получив взамен криптограмму на действующем секретном ключе (атака с подобранным открытым текстом). Иногда предполагают, что вражеский криптоаналитик может ввести свою входную информацию в шифрсистему и получить взамен выходной набор символов, «расшифрованных» действующим ключом (атака с подобранным шифртекстом). Создатели большинства используемых сегодня шифрсистем разрабатывают их для противостояния как минимум атаке с подобранным открытым текстом (уповая при этом на то, что криптоаналитик противника никогда не исхитрится построить атаку более изощренную, чем атака по шифртексту).

Существует важное различие между расшифровыванием (дешифрованием) и раскрытием шифртекста. Раскрытием криптосистемы называется результат работы криптоаналитика, приводящий к возможности эффективного раскрытия любого зашифрованного с помощью данной криптосистемы открытого текста. Степень неспособности криптосистемы к раскрытию называется стойкостью.

В соответствии с общепринятой сегодня терминологией криптосистемы подразделяются на криптосистемы ограниченного использования и криптосистемы общего использования; симметричные, или с секретным ключом, и асимметричные, или с открытым ключом. Криптографическая система является криптосистемой ограниченного использования, если ее стойкость основывается на сохранении в секрете самого характера алгоритмов шифрования и дешифрования. Простейшим историческим примером такой системы можно считать так называемый шифр Цезаря, который является шифром простой замены каждого символа открытого текста третьим следующим за ним символом алфавита с циклическим переносом, когда это необходимо. Например, слово «cleartext» превращается в «fohduwhaw». Криптографическая система называется криптосистемой общего использования, если ее стойкость основывается не на секретности алгоритмов шифрования и дешифрования, а на секретности некоторого сравнительно короткого значения, которое называется ее ключом. В криптосистеме с открытым ключом отправитель использует общедоступную (известную) информацию (открытый ключ) для того, чтобы послать сообщение получателю. Получатель, в свою очередь, использует секретную информацию для восстановления сообщения. В случае криптографии с секретным ключом отправитель и получатель предварительно договариваются о некоторой лишь им известной информации, которую они будут использовать как для шифрования, так и для расшифровывания. Эта информация (секретный ключ) должна храниться в тайне от потенциальных злоумышленников, перехватывающих сообщения.

Для симметричных шифрсистем имеется последующее разделение на блочные шифры и поточные шифры. Различие между этими криптосистемами можно суммарно выразить следующим образом: блочные шифры применяют одно постоянное преобразование к блокам данных открытого текста, тогда как поточные шифры применяют изменяющиеся во времени преобразования к отдельным наборам битов или символов, составляющих открытый текст.

Также общепринятым до сегодняшнего дня остается достаточно жесткое разделение криптографии на «военную» (или «секретную») и «открытую». В данной статье будет дан обзор разработанных в открытой криптографии схем поточного и блочного шифрования.

Всякий, кто возьмется за изучение открытой криптографической литературы, будет поражен тем, насколько различаются принципы рассмотрения блочных шифров и поточных шифров. Подавляющее большинство работ по криптоанализу блочных шифров сфокусировано на DES-алгоритме, и почти все предложенные блочные шифры в той или иной степени основаны на конструктивных принципах DES (Data Encryption Standard) — перестановках и перемешивании. Что касается поточных шифров, то здесь не существует алгоритма, который играл бы аналогичную роль. Здесь имеется огромное разнообразие альтернативных конструкций поточных шифров, а криптоанализ имеет тенденцию к разработке алгоритмов в самых общих терминах.

Кроме того, любопытно отметить, что рассматривать поточные шифры принято преимущественно у европейских исследователей. Сравнивая доклады двух основных криптографических конференций, нетрудно увидеть, что на симпозиумах Eurocrypt поточным шифрам посвящается несколько сессий, в то время как на американских встречах Crypto в калифорнийском городе Санта-Барбара такая сессия, как правило, одна. Столь явный дисбаланс, с одной стороны, является побочным продуктом повышенного интереса в США к алгоритму DES, с другой же — следствием значительного влияния на европейскую открытую криптографию Цюрихского политехникума (ETH, Федеральный технологический институт). Этот знаменитый швейцарский вуз, в числе выпускников которого можно назвать Альберта Эйнштейна и Джона фон Неймана, имеет также мощную криптографическую школу, поставляющую кадры всемирно известным фирмам, производящим шифраппаратуру: Crypto AG, Gretag AG, Omnisec AG и др. Эти фирмы проявляют традиционный и естественный интерес к высокопроизводительным системам поточного шифрования, а многие выпускники и сотрудники ETH стояли у истоков создания в начале 1980-х годов Международной ассоциации криптографических исследований (International Association for Cryptologic Research, IACR).

Вне всякого сомнения, в очень большой степени популярность поточных шифров можно связывать с работой Клода Шеннона, посвященной анализу одноразовых гамма-блокнотов, изначально именовавшихся шифром Вернама. (Название «одноразовый блокнот» стало общепринятым в годы Второй мировой войны, когда для шифрования широко использовались бумажные блокноты.)

Одноразовый блокнот использует длинную шифрующую последовательность, которая состоит из случайно выбираемых бит или наборов бит (символов). Шифрующая последовательность побитно или посимвольно накладывается на открытый текст, имеет ту же самую длину, что и открытое сообщение, и может использоваться только один раз (о чем свидетельствует само название шифрсистемы); ясно, что при таком способе шифрования требуется огромное количество шифрующей гаммы. Открытый текст сообщения m записывают как последовательность бит или символов m = m0m1...mn-1, а двоичную или символьную шифрующую последовательность k той же самой длины — как k = k0k1...kn-1. Шифртекст c = c0c1...cn-1 определяется соотношением ci = mi ki при 0≤i≤n-1, где обозначает операцию «исключающее ИЛИ» (ассемблерная операция XOR) по модулю два или по любому другому модулю в случае символьной гаммы.

В своей исторической работе «Communication theory of secrecy systems» Шеннон доказал то, что до этого многие принимали на веру: одноразовый гамма-блокнот является «невскрываемой» шифрсистемой. Фактически Шеннон представил эту криптосистему как совершенную: даже противник, обладающий безграничным количеством вычислительной мощности, не в силах придумать ничего лучшего, чем предполагать значения бит или символов сообщения, поскольку шифртекст статистически не зависит от открытого текста.

При работе алгоритмов поточного шифрования имитируется концепция одноразового блокнота — при этом используется короткий ключ для генерации шифрпоследовательности, которая «похожа на случайную последовательность». Такую шифрующую последовательность часто именуют псевдослучайной, и изучение того, каким образом генерировать псевдослучайную последовательность, составляет основную часть работы в области поточных шифров. Принято говорить, что шифрующая последовательность порождается генератором гаммы, или генератором псевдослучайной последовательности.

Вообще говоря, последовательность считают случайной, если по поводу нее нельзя сделать никаких предсказаний и для нее невозможно найти никаких простых описаний. Но если шифрующая гамма может в принципе генерироваться эффективно, то такое простое описание наверняка должно существовать. Тем не менее генератор способен порождать «неотличимые от случайной последовательности», если к гамме не могут быть применены никакие вычисления, позволяющие обнаружить это простое описание. Исходный ключ должен быть преобразован таким сложным образом, чтобы вычислительно было невозможно его восстановить. Уровень случайности последовательности можно определять в терминах классов вычислений (тестов), которые не выявляют в ней статистических нерегулярностей.

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

Одна из проблем организации секретной связи в случае поточных шифров — проблема передачи этих ключей между абонентами. В 1976 году Уитфилд Диффи (Whitfield Diffie) и Мартин Хеллман (Martin Hellman) заложили основу для преодоления этого препятствия, предложив понятие криптографии с открытым ключом. Сходное понятие самостоятельно открыл Ральф Меркль (Ralf Merkle). Вскоре последовала первая практическая реализация криптографии с открытым ключом, предложенная Рональдом Райвистом (Ronald Rivest), Ади Шамиром (Adi Shamir) и Леонардом Адлеманом (Leonard Adleman) и получившая название RSA (по первым буквам фамилий ее создателей).

Основное наблюдение, которое, собственно, и привело к появлению криптографии с открытым ключом, заключалось в следующем: тот, кто зашифровывает сообщение, не обязан уметь его расшифровывать. В таких системах каждый пользователь Y выбирает свой собственный секретный ключ, на основании которого получает пару алгоритмов. Затем он делает один из них доступным каждому из возможных абонентов, объявляя этот алгоритм своим открытым алгоритмом шифрования, в то время как другой, соответствующий первому и являющийся его личным алгоритмом дешифрования, хранит в строгом секрете. Это позволяет даже совершенно незнакомому пользователю, например абоненту сети по имени Х, применять его общедоступный алгоритм шифрования, чтобы зашифровать предназначенное для Y сообщение; однако лишь сам Y сможет расшифровать его после получения с помощью своего секретного алгоритма дешифрования. Такие системы могут быть стойкими только при условии, что свойства общедоступного алгоритма шифрования делают невозможным «вычисление» или подбор соответствующего ему алгоритма дешифрования.

RSA — очень медленный алгоритм. Для сравнения: программа, реализующая DES, по меньшей мере в 100 раз быстрее RSA, на аппаратном уровне — в 1000-10 000 раз, в зависимости от реализации.

Алгоритм RSA представляет собой следующую последовательность действий:

  1. Берутся два очень больших целых числа P и Q и находятся N=P×Q и M=(P-1)×(Q-1).
  2. Выбирается случайное целое число D, взаимно простое с M, и вычисляется

    E=(1 MOD M)/D.

  3. Потом D и N публикуются как открытый ключ, E сохраняется в тайне.
  4. Если S — сообщение, длина которого, определяемая по значению выражаемого им целого числа, должна быть в интервале (1,N), то оно превращается в шифровку возведением в степень D по модулю N и отправляется получателю S’=SD MOD N.
  5. Получатель сообщения расшифровывает его, возведя в степень E (число E ему уже известно) по модулю N, так как

    S=(S’E MOD N)=S(DE) MOD N.

Шафи Гольдвассер (Shafi Goldwasser) и Сильвио Микэли (Silvio Micali) ввели понятие вероятностного шифрования, которое является очень интересной разновидностью криптографии с открытым ключом. Когда какое-то сообщение шифруется при помощи вероятностного шифрования, то при криптоанализе шифртекста становится одинаково трудно получить о сообщении любую информацию, позволяющую восстановить весь его открытый текст. Кроме того, существует вероятностная схема шифрования, которая является более быстрой, чем предложенная до этого схема шифрования с открытым ключом RSA. Подобные криптографические системы называются вероятностными, поскольку шифрование в них сообщений, имеющих один и тот же исходный текст и шифрующихся с использованием одного и того же ключа, может в разное время привести к совершенно различным шифртекстам.

Предлагались и разные другие подходы к проблеме распределения ключей. Например, бесключевая криптография Альперна (Alpern) и Шнейдера (Schneider) может эффективно использоваться в сети связи, которая скрывает происхождение (но не содержание) сообщений. В идентификационной криптосистеме Шамира (Shamir) отпадает необходимость в распределении ключей, но требуется наличие некоего центра, которому должна быть доверена генерация секретных ключей.

Рассмотрим теперь некоторые конкретные алгоритмы шифрования, стараясь охватить все обозначенные классы алгоритмов.

DES (Data Encryption Standard) — это симметричный алгоритм шифрования, то есть один ключ используется здесь как для зашифровывания, так и для расшифровывания сообщений. Разработан фирмой IBM и в 1977 году утвержден правительством США как официальный стандарт.

Алгоритм имеет блоки по 64 бит и основан на 16-кратной перестановке данных; для зашифровывания он использует ключ длиной 56 бит. Существует несколько режимов DES, например Electronic Code Book (ECB) и Cipher Block Chaining (CBC).

56 бит — это 8 семибитовых ASCII-символов, то есть секретный ключ не может иметь длину свыше 8 символов. Если вдобавок использовать только буквы и цифры, то количество возможных вариантов будет существенно меньше максимально возможных 256.

Один из шагов алгоритма DES заключается в следующем.

Входной блок данных делится пополам на левую (L’) и правую (R’) части. После этого формируется выходной массив так, что его левая часть L’’ представлена правой частью R’ входного слова, из 32-битового слова R’ с помощью битовых перестановок формируется 48-битовое слово. Полученное 48-битовое слово «XOR’ится» с 48-битовым раундовым ключом. Результирующее 48-битовое слово разбивается на восемь 6-битовых групп, каждая 6-битовая группа посредством соответствующего S-блока заменяется на 4-битовую группу, и из полученных восьми 4-битовых групп составляется 32-битовое слово. Полученное слово «XOR’ится» с L’, в результате получается R’’. Можно убедиться, что все произведенные операции могут быть обращены и расшифровывание осуществляется за число операций, линейно зависящее от размера блока. После нескольких таких перемешиваний можно считать, что каждый бит выходного блока шифровки может зависеть от каждого бита сообщения.

Поскольку текст, зашифровaнный двойным алгоритмом DES, оказывается нестойким при криптографической атаке, то текст шифруется три раза. Таким образом, длина ключа возрастает до 168 бит (56×3).

Типы тройного шифрования DES:

  • DES-EEE3: шифруется три раза с тремя различными ключами.
  • DES-EDE3: три DES-операции «шифровка-расшифровка-шифровка» с тремя различными ключами.
  • DES-EEE2 и DES-EDE2: как и предыдущие, за исключением того, что первая и третья операции используют одинаковый ключ.

ГОСТ 28147-89 (русская альтернатива американскому DES) — это стандарт, принятый в 1989 году в Советском Союзе и установивший алгоритм шифрования данных, составляющих государственную тайну. Алгоритм был разработан в 70-е годы в 8-м Главном управлении КГБ СССР; тогда он имел гриф «Сов. секретно». Затем гриф был понижен до «Секретно», а когда в 1989 году алгоритм был проведен через Госстандарт и стал официальным государственным стандартом, гриф с него был снят, однако алгоритм имел гриф «для служебного пользования». В начале 90-х он стал полностью открытым.

Данный алгоритм предусматривает три режима шифрования (простая замена, гаммирование, гаммирование с обратной связью) и один режим выработки имитовставки. Первый из режимов шифрования предназначен для шифрования ключевой информации и не может использоваться для шифрования других данных; для этого предусмотрены два других режима шифрования. Режим выработки ИМИТОВСТАВКИ (криптографической контрольной комбинации) предназначен для ИМИТОЗАЩИТЫ шифруемых данных, то есть для их защиты от случайных или преднамеренных несанкционированных изменений.

Алгоритм построен по тому же принципу, что и DES, — классический блочный шифр с секретным ключом, однако он отличается от DES большей длиной ключа, большим количеством раундов и более простой схемой построения самих раундов. Ниже приведены его основные параметры, для удобства — в сравнении с параметрами DES.

В силу намного большей длины ключа ГОСТ гораздо устойчивей, чем DES, к вскрытию путем полного перебора по множеству возможных значений ключа.

Функция шифрования ГОСТ гораздо проще функции шифрования DES, она не содержит операций битовых перестановок, которыми изобилует DES и которые крайне неэффективно реализуются на современных универсальных процессорах (хотя их очень просто реализовать аппаратно — путем разводки проводников в кристалле или на плате). Таким образом, при вдвое большем количестве раундов (32 против 16) программная реализация ГОСТ на процессорах Intel x86 в среднем более чем в два раза превосходит по быстродействию реализацию DES.

Существенное повышение производительности микропроцессоров в 80-е годы обусловило в криптографии усиление интереса к программным методам реализации шифралгоритмов — как к возможной альтернативе аппаратным схемам на регистрах сдвига. Одним из самых первых программных криптоалгоритмов, получивших широкое распространение, стал алгоритм RC4.

Алгоритм RC4 — это поточный шифр с переменной длиной ключа, разработанный в 1987 году Рональдом Райвистом для компании RSA Data Security. Как и его «компаньон», блочный шифр RC2, RC4 представляет собой шифр с переменной длиной ключа, пригодный для быстрого магистрального шифрования. Он очень компактен в терминах размера кода и особенно удобен для процессоров с побайтно-ориентированной обработкой. RC4 может шифровать со скоростью около 10 Мбайт/с на процессоре с тактовой частотой 330 Мгц и, подобно RC2, имеет особый статус, значительно упрощающий получение разрешения на экспорт (схема позволяет безболезненно редуцировать длину ключа). В течение семи лет этот алгоритм был фирменным секретом, и подробности о его конструкции предоставлялись только после подписания договора о неразглашении.

Но в сентябре 1994 года кто-то анонимно распространил исходный код алгоритма через Internet. Пользователи Сети, которые имели легальные шифрсредства фирмы RSA, реализующие RC4, подтвердили совместимость кода с криптопрограммой. Обеспокоенная компания попыталась затолкать джинна обратно в бутылку, провозгласив, что, несмотря на нелегальную публикацию, алгоритм продолжает оставаться коммерческой тайной, но было уже слишком поздно. Через Internet описание алгоритма широко распространилось по миру; его обсуждают, анализируют и включают в учебные криптографические курсы.

В настоящее время алгоритм RC4 реализован в десятках коммерческих криптопродуктов, включая Lotus Notes, Apple Computer’s AOCE, Oracle Secure SQL; он также является частью спецификации стандарта сотовой связи CDPD.

В RC4 криптогенератор функционирует независимо от открытого текста. Генератор имеет подстановочную таблицу (S-бокс 8×8): S0, S1,..., S255. Входами генератора являются замененные по подстановке числа от 0 до 255, и эта подстановка является функцией от ключа изменяемой длины. Генератор имеет два счетчика i и j, инициализируемых нулевым значением.

Для генерации случайного байта гаммы выполняются следующие операции:

i = (i+1) mod 256

j = (j+Si) mod 256

swap Si and Sj

t = (Si+Sj) mod 256

K = St

Байт K складывается операцией XOR с открытым текстом для выработки шифртекста либо для получения байта открытого текста. Шифрование происходит весьма быстро — примерно в 10 раз быстрее DES-алгоритма.

Инициализация S-бокса столь же проста. На первом шаге он заполняется линейно:

S0 = 0, S1 = 1,..., S255 = 255. Затем еще один 256-байтный массив полностью заполняется ключом, для чего ключ повторяется соответствующее число раз в зависимости от длины: K0, K1,..., K255. Индекс j выставляется равным нулю. Затем:

for i=0 to 255

j = (j+Si+Ki) mod 256

swap Si and Sj

Схема показывает, что RC4 может принимать примерно 21700 (256! × 2562) возможных состояний, а это очень много. S-бокс медленно изменяется в процессе работы: параметр i обеспечивает изменение каждого элемента, а j отвечает за то, чтобы эти элементы изменялись случайным образом.

RC4 представляет собой семейство алгоритмов, задаваемых параметром n, который является положительным целым с рекомендованным типичным значением n = 8. Внутреннее состояние генератора RC4 в момент времени t состоит из таблицы содержащей 2n n-битных слов, и из двух n-битных слов-указателей it и jt. Таким образом, размер внутренней памяти составляет M = n2n + 2n бит. Пусть выходное n-битное слово генератора в момент t обозначается как Zt. Пусть начальные значения i0 = j0 = 0. Тогда функция следующего состояния и функция выхода RC4 для каждого t Ј 1 задаются следующими соотношениями:

it = it-1 + 1

jt = jt-1 + St-1(it)

St (it) = St-1(jt), St (jt) = St-1(it)

Zt = St (St (it) + St (jt)),

где все сложения выполняются по модулю 2n. Подразумевается, что все слова, кроме подвергаемых перестановке, остаются теми же самыми. Выходная последовательность n-битных слов обозначается как

.

Начальная таблица S0 задается в терминах ключевой последовательности

с использованием той же самой функции следующего состояния, начиная от таблицы единичной подстановки. Более строго — пусть j0 = 0 и для каждого 1 Ј t Ј 2n вычисляется jt = (jt-1+S t-1 (t-1) + K t-1) mod 2n, а затем переставляются местами S t-1(t-1) и S t-1(jt). На последнем шаге порождается таблица, представляющая S0. Ключевая последовательность K составляется из секретного ключа (возможно, повторяющегося) и рандомизирующего ключа, передаваемого в открытом виде в целях ресинхронизации.

Компания RSA Data Security объявила, что шифр обладает иммунитетом к методам линейного и дифференциального криптоанализа и до сих пор у него не обнаружены короткие циклы. Обычно цитируется заключение закрытой работы криптографа RSA Labs Мэтта Робшоу: «Не имеется известных слабых ключей, и, хотя нет доказательства для нижней границы периодов последовательностей RC4, проведенный теоретический анализ показывает, что период в подавляющем большинстве случаев превышает 10100. Тщательный и всеобъемлющий анализ стойкости RC4 не выявил никаких оснований подвергать сомнению стойкость, обеспечиваемую генератором RC4».

Существует еще много блочных симметричных алгоритмов, таких как IDEA, AES, RC2, RC5, RC6, SkipJack, Blowfish, MISTY1 и др., а также поточных симметричных алгоритмов, таких как SEAL, WAKE, PIKE, GOAL, ORYX, ISAAC, Chameleon и др. Кроме RSA, существуют асимметричные алгоритмы шифрования DH, DSA, а также большой класс алгоритмов, использующих хэш-функцию: MD2, MD5, SHA, SHA-1, RIPEMD, MDC2, которые невозможно рассмотреть в рамках этой статьи из-за ограниченного объема. Все они могут быть выполнены как в программном, так и в аппаратном варианте.

Необходимо отметить, что в последнее время в информационной индустрии стали широко распространяться сетевые протоколы, поддерживающие секретные каналы передачи данных, такие как SSL, OpenSSL, SSH.

SSL (Secure Sockets Layer) — секретный уровень сокетов. Назначение протокола SSL в том, чтобы обеспечить секретность и надежность связи между двумя программными приложениями. Протокол состоит из двух уровней. На низком уровне многоуровневого транспортного протокола (например, TCP) SSL является протоколом записи. SSL используется для формирования пакета (инкапсуляции) различных протоколов более высокого уровня. Для каждого инкапсулированного протокола SSL позволяет серверу и клиенту подтверждать подлинность друг друга, выполнять алгоритмы шифрования и обмен криптографическими ключами прежде, чем протокол прикладной программы передает или получает первые данные. Преимущество SSL состоит в том, что он является независимым протоколом прикладной программы. Более высокий протокол уровня может лежать на уровень выше SSL.

Протокол SSL обеспечивает защиту связи, которая имеет три основные функции: обеспечение конфиденциального соединения; шифрование с открытым ключом, которое используется для подтверждения подлинности друг друга; поддержка надежности передачи данных.

Симметричная криптография используется для шифрования данных (например, DES, RC4, и т.д.).

Цифровая подпись обеспечивается при помощи асимметричного шифрования с открытым ключом (например, RSA, DSS и т.п.).

транспортировка сообщения включает проверку целостности сообщения с использованием корректирующих кодов MAC, безопасных хэш-функций (например, SHA, MD5 и т.д.).

В сочетании с протоколом HTTP и аутентификацией сервера протокол SSL обеспечивает необходимые функции шифрования и далее поддерживает установленное соединение, перепроверяя подлинность Web-сервера и т.п. Важно понять, что SSL только защищает связь «в процессе передачи данных», а не заменяет других защитных механизмов. Также нужно иметь в виду, что протокол инкапсулирует в себя шифралгоритмы, рассмотренные выше.

На этом позвольте закончить беглый обзор криптографических алгоритмов и различных способов их применения. Наверное, вы уже поняли, что на эту тему можно говорить долго. Хорошая криптографическая система — это система, удерживающая равновесие между тем, что возможно, и тем, что приемлемо. Сильная криптография может противостоять целенаправленным атакам до некоторого предела, за которым удается легче получить нужную информацию каким-то иным способом. Никакая криптопрограмма, никакой шифратор не может помешать злоумышленнику копаться в чьем-то мусоре. Но криптопродукт способен полностью лишить атакующего информации о том, чей именно это мусор.

Хорошая новость из области о криптографии: сегодня уже созданы алгоритмы и протоколы для надежной защиты информации. Правда, все не так просто — практическая реализация данных протоколов требует значительных усилий и опыта. Те области обеспечения безопасности, в которых участвуют люди, — управление ключами, интерфейс человек/компьютер, контроль доступа — часто не поддаются анализу. А такие дисциплины, как инфраструктура открытых ключей, защита программного обеспечения, компьютерная и сетевая безопасность, защита аппаратуры от проникновения, пока еще очень плохо изучены.

КомпьютерПресс 3'2002