13.6. Шифрование
259
не собираемся критиковать именно этот стандарт PKCS. Данная проблема
весьма широко распространена во всех сферах компьютерной индустрии.
13.6
Шифрование
Шифрование сообщений является канонической областью применения ал-
горитма RSA. Тем не менее оно редко используется на практике. Причи-
на проста: размер сообщения, которое может быть зашифровано с помощью
RSA, ограничивается размером числа
n
. В реальных системах мы даже не
можем использовать все биты сообщения, так как функции кодирования тре-
буются дополнительные биты. Подобное ограничение на размер сообщения
для большинства систем крайне непрактично, а поскольку в терминах вы-
числений каждая операция RSA обходится довольно дорого, вряд ли кому-
нибудь захочется разбивать сообщение на блоки меньшего размера и шифро-
вать каждый из них с помощью отдельной операции RSA.
В большинстве случаев эту
проблему решают следующим образом: выби-
рают случайный секретный ключ
K
и зашифровывают его с помощью клю-
чей RSA. После этого фактическое сообщение
m
зашифровывается с помо-
щью обыкновенного блочного или поточного шифра, где в качестве ключа
шифрования используется
K
. Таким образом, вместо того чтобы отсылать
нечто наподобие
E
RSA
(
m
)
, мы отсылаем
E
RSA
(
K
)
и
E
K
(
m
)
. Размер сооб-
щения больше не ограничен, а для шифрования даже больших сообщений
требуется только одна операция RSA. Конечно, нам приходится передавать
немного дополнительной информации, но затраты на это несоизмеримо малы
по сравнению с преимуществами данного подхода.
Наш метод шифрования еще проще. Вместо того чтобы выбирать и за-
шифровывать ключ
K
, мы выбираем случайное
r
∈
Z
n
и определяем ключ
группового шифрования как
K
:=
h
(
r
)
для некоторой
функции хэширования
h
. Шифрование числа
r
выполняется путем простого возведения
r
в пятую
степень по модулю
n
. (Напомним, что для шифрования применяется
e
= 5
.)
Это решение простое и безопасное. Поскольку значение
r
выбирается слу-
чайным образом, оно не подчиняется какой-либо структуре, которая могла
бы использоваться для атаки на шифрование RSA. Функция хэширования,
в свою очередь, гарантирует, что ни одна зависимость между различными
значениями
r
не перейдет на значения
K
, за исключением очевидного требо-
вания, что одинаковым
r
должны соответствовать одинаковые
K
.
Для простоты реализации будем выбирать
r
в диапазоне
0
, . . . ,
2
k
−
1
, где
k
— наибольшее число, для которого выполняется
2
k
< n
. Гораздо легче
сгенерировать случайное
k
-битовое число, чем случайное число из
Z
n
, а по-