Алгоритмы шифрования

Перевод оригинального документа Tatu Ylonen "Cryptographic Algorithms"

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


Алгоритмы с открытым ключом

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

Алгоритмы с симметричным ключом (симметричные шифры)

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

Эти и некоторые другие шифры доступны на ftp.funet.fi:/pub/crypt/cryptography/symmetric .

Моды блочной шифровки

Многие распространенные шифры (например IDEA, DES, BLOWFISH) являются блочными шифрами. Это означает, что они берут блоки данных фиксированного размера (обычно 64 бита), и преобразуют их в другой 64-битный блок с помощью функции, задаваемой ключом. Шифр обычно задает однозначное соответствие между исходным 64-битным числом и результирующим 64-битным числом.

Если один и тот же блок шифруется дважды одним и тем же числом, то в обоих случаях результат будет одинаков (такой метод шифровки называют Электронной Книгой Кодов, Electronic Code Book mode, или ECB). Эта информация может быть полезна для атакующего.

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

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

Дополнительную информацию о блочных методах шифровки можно найти в Bruce Schneier: Applied Cryptography, John Wiley & Sons, 1994.

Криптографические хэш-функции

Генераторы случайных чисел

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

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

Примеры криптографических генераторов случайных чисел можно найти, например, в исходных текстах PGP, Noiz и Ssh.

Disclaimer: Любые мнения и выводы, представленные здесь являются субъективными и автор не может нести ответственность за их правильность.