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