13.6. Шифрование
261
Единственный способ получить информацию о результате функции хэширо-
вания — это узнать б´ольшую часть ее входных данных. Для этого злоумыш-
леннику нужна информация об
r
. Но если алгоритм RSA является безопас-
ным (а мы должны исходить из предположения, что он безопасен, раз вы-
брали его для шифрования), тогда получить какой-либо значительный объем
информации о случайно выбранном
r
, зная лишь
r
e
mod
n
, невозможно. По-
этому у злоумышленника остается большая неопределенность относительно
r
и, как следствие, никакой информации о
K
.
Предположим, через некоторое время злоумышленнику E стал известен
ключ
K
(возможно, из-за сбоя какого-нибудь другого компонента системы).
Приведет ли это к утечке информации о закрытом ключе пользователя А?
Нет. Ключ
K
— это результат функции хэширования, а злоумышленник не
может получить какую-либо информацию о входных данных
функции хэ-
ширования на основе ее выходных данных. Следовательно, даже если зло-
умышленнику Е удастся особым образом подобрать шифрованный текст
c
,
полученный им ключ
K
не предоставит никакой информации об
r
. Закры-
тый ключ пользователя A применялся только для вычисления
r
, поэтому
злоумышленнику Е снова ничего не удастся узнать о закрытом ключе поль-
зователя А.
Это одно из преимуществ применения функции хэширования в функ-
ции
DecryptRandomKeyWithRSA
. Предположим, что последняя возвра-
щала бы лишь значение
c
1
/e
mod
n
. В этом случае данная
функция могла
бы быть использована злоумышленником для осуществления всевозможных
атак. Предположим, что другая часть системы имеет слабое место, в резуль-
тате чего злоумышленник Е может узнать наименее значимый бит выходных
данных. В этом случае злоумышленник может отослать пользователю А спе-
циально подобранные значения
c
1
, c
2
, c
3
, . . .
и получить наименее значимые
биты значений
c
1
/e
1
, c
1
/e
2
, c
1
/e
3
, . . .
. Полученные результаты будут обладать все-
ми видами алгебраических свойств. Вполне вероятно, что злоумышленник Е
сможет извлечь из подобной ситуации что-нибудь полезное. Функция хэши-
рования
h
, примененная в
DecryptRandomKeyWithRSA
, полностью раз-
рушает математическую структуру. Знание одного бита значения
K
не предо-
ставит злоумышленнику Е практически никакой информации о
c
1
/e
. Более
того, даже знание всего значения
K
не принесет слишком большой пользы,
так как
функция хэширования не является обратимой. Таким образом, при-
менение функции хэширования делает алгоритм RSA более безопасным по
отношению к сбоям остальных компонентов системы.
Описанное поведение, помимо всего прочего, является также причиной
того, почему мы
не
проверяем, попадает ли значение
r
, вычисленное по за-
данному
c
, в интервал
0
, . . . ,
2
k
−
1
. Если бы мы реализовали подобную про-