Способы генерации ключей

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


При переборе 1 млн ключей в секунду можно в приемлемые сроки раскрывать 8-байтовые ключи с букв и цифр, 7-байтовые цифровой цифровые-буквенно-цифровые ключи, 6-байтовые ключи, состоящие из ASCII-символов, которые печатаются, и 5-байтовые ключи, в которые могут входить любые ASCII-символы. А если учесть, что вычислительная мощность компьютеров удваивается за 1,5 года, то для успешного отражения атаки методом тотального перебора течение ближайшего десятилетия необходимо заранее позаботиться о том, чтобы используемый ключ был достаточно длинным.
В настоящее время персональные компьютеры повсеместно работают под управлением многозадачных операционных систем. В результате пользователь часто оказывается не в состоянии определить, когда операционная система прерывает выполнение его программы шифрования, записывает ее саму, а также все ее данные на диск и переключается на работу с другим приложением. После того как операционная система возобновляет процесс шифрования, все выглядит вполне пристойно: пользователь даже не успевает осознать, что шифровальная программа вместе с используемым ею ключом побывала на диске. В итоге ключ так и останется на диске в незашифрованном виде, пока поверх него не будут записаны другие данные. Когда это случится - через полсекунды, через месяц или вообще никогда не может сказать никто. Однако враг не дремлет, и вполне может произойти так, что ключ еще сохраняется на диске в открытом виде, когда злоумышленник проверит этот диск в поисках полезной для себя информации.


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


В сгенерированном ключа (назовем его основным) добавляется битный управляющий код, содержащий информацию об ограничениях, налагаемых на использование ключа. Управляющий код подвергается хэширования и затем составляется по основным ключом по модулю 2. Полученный результат служит как ключ для шифрования сеансового ключа. Зашифрованный сеансовый ключ сохраняется вместе с управляющим кодом. Чтобы получить сеансовый ключ в исходном виде, нужно применить хэширования к управляющему коду, составить его с основным ключом по модулю 2 и использовать результат для расшифрования сеансового ключа. Достоинством этого метода является возможность задействовать управляющий код произвольной длины, и открыто хранить его вместе с зашифрованным основным ключом.


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


С целью дальнейшего уменьшения вероятности компрометации ключа его можно разделить на две части. Первую часть следует реализовать в виде ПЗУ ключа, а вторую - поместить в память компьютера. Тогда потеря части ключа, который носится, или его половинки, хранимой в памяти компьютера, не приведет к разглашению криптографического ключа в целом. А части ключа при необходимости можно заменять отдельно друг от друга.
Любой ключ должен использоваться в течение ограниченного периода времени по следующим причинам:
? чем дольше ключ находится в действии, тем больше вероятность того, что он будет скомпрометирован;
? при длительном пользовании тем самым ключом увеличивается потенциальный ущерб, который может быть нанесен в случае его компрометации;
? ключ, что очень долго применялся для шифрования информации, становится лакомым кусочком для противника, у которого появляется стимул потратить на его раскрытие значительные ресурсы, поскольку полученная выгода позволит оправдать понесенные расходы;
? криптоаналитическую атаку на шифр вести тем легче, чем больше перехваченного шифротекста для него накоплен.