Для чего нужны ключи шифрования. Управление криптографическими ключами

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

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

В результате применения шифрования появляется шифрованный текст, который и скрывает информационную тайну . Например, тайное послание «Завтра фирма Скотта будет продавать акции по пониженным ценам» имеет некоторый шифрованный текст в виде «?т6ifmфвщб4-!nmdавжшт». Шифрованный текст тайны доступен всем, более того, в шифрованном тексте имеется полное содержание тайны, он содержит весь смысл тайны, но тайна доступна только посвященным. Здесь необходимо сделать одно маленькое замечание и уточнение. Да, тайна легко и быстро доступна только посвященным лицам. Непосвященные лица могут проникнуть в тайну в течение более протяженного отрезка времени, затратив некоторые усилия. Успех непосвященных лиц гарантирован именно тем, что в шифрованном тексте содержится вся информация, скрывающая тайну . Для прочтения шифрованного текста необходима некоторая дополнительная информация, которая позволяет легко и быстро постигнуть смысл скрываемого от посторонних сообщения. Нас будут интересовать шифровальные системы, которые обладают одной характерной особенностью для посвященных лиц: взаимно однозначным прямым и обратным преобразованием исходный (открытый) текст единственный шифрованный текст. В дальнейшем мы покажем, что для непосвященных лиц в некоторых случаях это может быть не совсем так.

Ключи в криптографии

Что позволяет вам быстро открыть свою закрытую дверь, вам, лицу, которому это позволено? Ключ, скажете вы. Ну а при хорошем замке квартирный вор повозится некоторое время, но тоже откроет вашу дверь, не имея ключа. Чтобы квартирный вор не смог быстро открыть дверь вашей квартиры, замок должен быть достаточно хорошим. От этого зависит время незаконного вскрытия вашей квартиры. В крайнем случае, вор может воспользоваться грубой силой, пытаясь взломать саму дверь. В криптографии ситуация аналогична: дверь - это шифрованный текст, который открывает вам путь к тайне. Ключ - это та дополнительная информация, которая позволяет посвященным лицам быстро прочесть шифрованный текст. Эту дополнительную информацию мы тоже будем называть криптографическим ключом или просто ключом. Ключ от квартиры нельзя терять, его нельзя отдавать посторонним лицам, которым вы не доверяете. Криптографический ключ по этим же причинам никому нельзя отдавать. Его необходимо держать в секрете, потому что с него очень легко сделать копию, легче, чем с обыкновенного дверного ключа. Обычный ключ от квартиры имеет небольшие размеры, чтобы было удобно его хранить. Криптографический ключ из этих же соображений также должен иметь небольшой размер, хотя сегодня при использовании ЭВМ это не столь жесткое требование. А что же в криптографии играет роль замка? Это устройство или правило (алгоритм), как создавать шифрованный текст. Минуточку, подождите! Если очень легко копировать настоящий ключ, то можно самому создавать его. Да, можно, но какой создать? Количество возможных ключей очень велико.

Современные криптографические системы имеют набор возможных ключей гораздо больший, чем набор возможных ключей обыкновенного замка от вашей двери. Это число может быть соизмеримо с числом атомов нашей Вселенной (1077≈2264). Перебор всех возможных ключей эквивалентен взлому дверей, т.е. применению грубой силы. Можно сделать секретный уникальный замок, к которому типовая воровская отмычка не подойдет. В древние времена, когда монархи, удельные князья или графы создавали секретные убежища, подземные ходы, строителей обычно убивали, ослепляли, в общем, делали все, чтобы сохранить в тайне эти сооружения. А что вы будете делать с мастером вашего замка? Он же знает конструкцию замка, и, возможно, даже делал к нему ключ! Голландский военный криптограф Датчман А. Керкхоффс еще в 19 веке решил эту проблему, сформулировав в книге «Военная криптография», изданной в 1883 г., шесть основных требований к системе шифрования: система шифрования должна быть не раскрываемой, если не в теоретическом плане, то в практическом; компрометация системы не должна причинять неудобств ее пользователям; секретный ключ должен быть легко запоминаемым без его записи; криптограмма должна быть представлена в такой форме, чтобы ее можно было передать по телеграфу; аппаратура шифрования должна быть портативной и такой, чтобы ее мог обслуживать один человек; система не должна требовать запоминания длинного перечня правил и быть простой в использовании.

Несмотря на примитивизм отдельных требований с позиции сегодняшних возможностей (не забудьте о 1883 г.), этот перечень содержит важный (второй) фундаментальный пункт требований к системе сохранения тайны: конструкция замка вашей двери (правило получения шифрованного текста) может быть известно всем. Секретным должен быть только ключ к нему. Если при этом ваша система окажется надежной против взлома, можете спать спокойно. Где же взять этот секретный ключ, ключ который бы никто не знал? Ответ может быть только один: необходимо сделать его самому. Итак, для вашего полного спокойствия вы должны приобрести алгоритм создания тайны у надежной фирмы с гарантией и самому сделать секретный ключ.

В вашем РС ключ представляет собой некоторый файл, который состоит их нулей и единиц. Каждый ноль или единица представляет собой одно из двух значений единицы информации, которая называется битом. Суммарное значение нулей и единиц в файле ключа определяет его длину. Например, ключ длиной 256 бит означает, что файл ключа содержит некоторое число нулей и единиц, суммарное число которых равно 256. Сколько же всего может быть ключей? Можно построить специальную вычислительную машину для быстрого перебора ключей. Наверное, эта машина будет стоить достаточно больших денег. Гордон Э.Мур (Gordon E. Moor) заметил, что за год размеры процессоров, их стоимость и время выполнения команд уменьшаются приблизительно на 40%. Эту закономерность называют в честь этого исследователя законом Мура. Можно проиллюстрировать действие закона Мура на примере вскрытия криптографического алгоритма DES с длиной ключа равной 46 бит. На текущий отрезок времени принято, что длина ключа в 246 бит вполне приемлема для защиты от полного перебора ключевого поля. Таким образом, ключ - это секретный параметр алгоритма криптографического преобразования данных, обеспечивающий выбор только одного варианта из всех возможных вариантов данного алгоритма.

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

Стандарты на криптографические алгоритмы

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

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

В России существуют собственные государственные стандарты на алгоритмы шифрования и выработки/проверки электронной подписи: ГОСТ 28147-89 , ГОСТ Р 34.10-94 , ГОСТ Р 34.10-2001 .

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

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

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

В России также приняты государственные стандарты на криптографические алгоритмы. Российские производители, в том числе ООО «Криптоком», используют в своих программных продуктах алгоритмы, соответствующие российским стандартам.

В качестве секретной информации используются криптографические ключи.

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

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

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



Каждый алгоритм предъявляет собственные требования к ключам, поэтому любой криптографический ключ создается для определенного алгоритма и используется только с этим алгоритмом.

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

Поэтому сейчас в основном используется асимметричная криптография . В асимметричной криптографии выработка электронной подписи или зашифрование выполняются на одном ключе, а проверка подписи или расшифрование - на другом, парном ключе.

В асимметричной криптографии применяются так называемые ключевые пары (key pairs). Каждая такая пара состоит из двух связанных между собой ключей. Один из этих ключей - закрытый (private key). Он известен только владельцу ключа и ни при каких условиях не должен быть доступен никому другому. Другой ключ - открытый (public key), он может быть доступен

любому желающему.

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

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

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

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

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

Сначала рассмотрим алгоритмы, обладающие обеими характеристиками, а затем перейдем к алгоритмам открытого ключа , которые не обладают вторым свойством.

При описании симметричного шифрования и шифрования с открытым ключом будем использовать следующую терминологию. Ключ , используемый в симметричном шифровании , будем называть секретным ключом . Два ключа, используемые при шифровании с открытым ключом , будем называть открытым ключом и закрытым ключом . Закрытый ключ держится в секрете, но называть его будем закрытым ключом , а не секретным, чтобы избежать путаницы с ключом, используемым в симметричном шифровании . Закрытый ключ будем обозначать KR , открытый ключ - KU .

Будем предполагать, что все участники имеют доступ к открытым ключам друг друга, а закрытые ключи создаются локально каждым участником и, следовательно, распределяться не должны.

В любое время участник может изменить свой закрытый ключ и опубликовать составляющий пару открытый ключ , заменив им старый открытый ключ .

Диффи и Хеллман описывают требования, которым должен удовлетворять алгоритм шифрования с открытым ключом .

  1. Вычислительно легко создавать пару (открытый ключ KU, закрытый ключ KR ).
  2. Вычислительно легко, имея открытый ключ и незашифрованное сообщение М , создать соответствующее зашифрованное сообщение:
  3. Вычислительно легко дешифровать сообщение, используя закрытый ключ :

    М = D KR [C] = D KR ]

  4. Вычислительно невозможно, зная открытый ключ KU , определить закрытый ключ KR .
  5. Вычислительно невозможно, зная открытый ключ KU и зашифрованное сообщение С , восстановить исходное сообщение М .

    Можно добавить шестое требование, хотя оно не выполняется для всех алгоритмов с открытым ключом :

  6. Шифрующие и дешифрующие функции могут применяться в любом порядке:

    М = Е KU ]

Это достаточно сильные требования, которые вводят понятие . Односторонней функцией называется такая функция, у которой каждый аргумент имеет единственное обратное значение, при этом вычислить саму функцию легко, а вычислить обратную функцию трудно.

Обычно "легко" означает, что проблема может быть решена за полиномиальное время от длины входа. Таким образом, если длина входа имеет n битов, то время вычисления функции пропорционально n a , где а - фиксированная константа. Таким образом, говорят, что алгоритм принадлежит классу полиномиальных алгоритмов Р. Термин "трудно" означает более сложное понятие. В общем случае будем считать, что проблему решить невозможно, если усилия для ее решения больше полиномиального времени от величины входа. Например, если длина входа n битов, и время вычисления функции пропорционально 2 n , то это считается вычислительно невозможной задачей. К сожалению, тяжело определить, проявляет ли конкретный алгоритм такую сложность. Более того, традиционные представления о вычислительной сложности фокусируются на худшем случае или на среднем случае сложности алгоритма. Это неприемлемо для криптографии, где требуется невозможность инвертировать функцию для всех или почти всех значений входов.

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

Мы видим, что разработка конкретного алгоритма с открытым ключом зависит от открытия соответствующей односторонней функции с люком .

Криптоанализ алгоритмов с открытым ключом

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

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

Другая форма атаки состоит в том, чтобы найти способ вычисления закрытого ключа , зная открытый ключ . Невозможно математически доказать, что данная форма атаки исключена для конкретного алгоритма открытого ключа . Таким образом, любой алгоритм, включая широко используемый алгоритм RSA , является подозрительным.

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

Основные способы использования алгоритмов с открытым ключом

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

Шифрование с открытым ключом состоит из следующих шагов:


Рис. 7.1.

  1. Пользователь В создает пару ключей KU b и KR b , используемых для шифрования и дешифрования передаваемых сообщений.
  2. Пользователь В делает доступным некоторым надежным способом свой ключ шифрования, т.е. открытый ключ KU b . Составляющий пару закрытый ключ KR b держится в секрете.
  3. Если А хочет послать сообщение В , он шифрует сообщение, используя открытый ключ В KU b .
  4. Когда В получает сообщение, он дешифрует его, используя свой закрытый ключ KR b . Никто другой не сможет дешифровать сообщение, так как этот закрытый ключ знает только В .

Если пользователь (конечная система) надежно хранит свой закрытый ключ , никто не сможет подсмотреть передаваемые сообщения.

Создание и проверка подписи состоит из следующих шагов:


Рис. 7.2.
  1. Пользователь А создает пару ключей KR A и KU A , используемых для создания и проверки подписи передаваемых сообщений.
  2. Пользователь А делает доступным некоторым надежным способом свой ключ проверки, т.е.

(MAC). При использовании одного и того же алгоритма результат шифрования зависит от ключа. Для современных алгоритмов сильной криптографии утрата ключа приводит к практической невозможности расшифровать информацию.

Для современных симметричных алгоритмов (AES , CAST5 , IDEA , Blowfish , Twofish) основной характеристикой криптостойкости является длина ключа. Шифрование с ключами длиной 128 бит и выше считается сильным , так как для расшифровки информации без ключа требуются годы работы мощных суперкомпьютеров. Для асимметричных алгоритмов, основанных на проблемах теории чисел (проблема факторизации - RSA , проблема дискретного логарифма - Elgamal) в силу их особенностей минимальная надёжная длина ключа в настоящее время - 1024 бит. Для асимметричных алгоритмов, основанных на использовании теории эллиптических кривых (ECDSA , ГОСТ Р 34.10-2001 , ДСТУ 4145-2002), минимальной надёжной длиной ключа считается 163 бит, но рекомендуются длины от 191 бит и выше.

Классификация ключей

Криптографические ключи различаются согласно алгоритмам, в которых они используются.

  • Секретные (Симметричные) ключи - ключи, используемые в симметричных алгоритмах (шифрование, выработка кодов аутентичности). Главное свойство симметричных ключей: для выполнения как прямого, так и обратного криптографического преобразования (шифрование/расшифровывание, вычисление MAC/проверка MAC) необходимо использовать один и тот же ключ (либо же ключ для обратного преобразования легко вычисляется из ключа для прямого преобразования, и наоборот). С одной стороны, это обеспечивает более высокую конфиденциальность сообщений, с другой стороны, создаёт проблемы распространения ключей в системах с большим количеством пользователей.
  • Асимметричные ключи - ключи, используемые в асимметричных алгоритмах (шифрование, ЭЦП). Более точно, они являются ключевой парой , поскольку состоят из двух ключей:
    • Закрытый ключ (en:Private key) - ключ, известный только своему владельцу. Только сохранение пользователем в тайне своего закрытого ключа гарантирует невозможность подделки злоумышленником документа и цифровой подписи от имени заверяющего.
    • Открытый ключ (en:Public key) - ключ, который может быть опубликован и используется для проверки подлинности подписанного документа, а также для предупреждения мошенничества со стороны заверяющего лица в виде отказа его от подписи документа. Открытый ключ подписи вычисляется, как значение некоторой функции от закрытого ключа, но знание открытого ключа не дает возможности определить закрытый ключ.

Главное свойство ключевой пары: по секретному ключу легко вычисляется открытый ключ, но по известному открытому ключу практически невозможно вычислить секретный. В алгоритмах ЭЦП подпись обычно ставится на секретном ключе пользователя, а проверяется на открытом. Таким образом, любой может проверить, действительно ли данный пользователь поставил данную подпись. Тем самым асимметричные алгоритмы обеспечивают не только целостность информации, но и её аутентичность. При шифровании же наоборот, сообщения шифруются на открытом ключе, а расшифровываются на секретном. Таким образом, расшифровать сообщение может только адресат и больше никто (включая отправителя). Использование асимметричных алгоритмов снимает проблему распространения ключей пользователей в системе, но ставит новые проблемы: достоверность полученных ключей. Эти проблемы более-менее успешно решаются в рамках инфраструктуры открытых ключей (PKI).

  • Сеансовые (сессионные) ключи - ключи, вырабатываемые между двумя пользователями, обычно для защиты канала связи. Обычно сеансовым ключом является общий секрет - информация, которая вырабатывается на основе секретного ключа одной стороны и открытого ключа другой стороны. Существует несколько протоколов выработки сеансовых ключей и общих секретов, среди них, в частности, алгоритм Диффи - Хеллмана .
  • Подключи - ключевая информация, вырабатываемая в процессе работы криптографического алгоритма на основе ключа. Зачастую подключи вырабатываются на основе специальной процедуры развёртывания ключа.