Криптографическая защита информации. Яковлев А.В - 74 стр.

UptoLike

была значительно больше, чем при использовании самого со-
общения.
4. Для любого у с вычислительной точки зрения невозможно
найти х такое, что H(x) = y.
5. Для любого фиксированного х с вычислительной точки зре-
ния невозможно найти х' х такое, что Н(x’) = Н(х).
Последнее свойство гарантирует отсутствие другого сообщения, даю-
щего ту же свертку, что предотвращает подделку и позволяет использовать
Н в качестве криптографической контрольной суммы для проверки целост-
ности.
Четвертое свойство эквивалентно тому, что Н является односторонней
функцией. Стойкость систем с открытыми ключами зависит от того, что
открытое криптопреобразование является односторонней функцией-
ловушкой. Напротив, функции хэширования являются односторонними
функциями, не имеющими ловушек. Классическая хэш-функция является
открытым преобразованием. В случае, когда она зависит от ключа, резуль-
тат ее вычисления носит название кода аутентификации сообщения (MAC
– Message Authentication Code).
4.3.1. ФУНКЦИЯ ХЭШИРОВАНИЯ SHA
Алгоритм безопасного хэширования SHA (Secure Hash Algorithm) при-
нят в качестве стандарта США в 1992 г. и предназначен для использования
совместно с алгоритмом цифровой подписи, определенным в стандарте
DSS. При вводе сообщения М алгоритм вырабатывает 160-битовое выход-
ное сообщение, называемое сверткой (Message Digest), которая и использу-
ется при выработке ЭЦП.
Рассмотрим работу алгоритма подробнее. Пусть исходное сообщение
дополняется так, чтобы его длина стала кратной 512 битам. При этом со-
общение дополняется даже тогда, когда его длина уже кратна указанной.
Процесс происходит следующим образом: добавляется единица, затем
столько нулей, сколько необходимо для получения сообщения, длина кото-
рого на 64 бита меньше, чем кратная 512, и затем добавляется 64-битовое
представление длины исходного сообщения.
Далее инициализируются пять 32-битовых переменных следующими
шестнадцатеричными константами:
А = 67452301 В = EFCDAB89 С = 98BADCFE D = 10325476 E = C3D2E1F0
Эти пять переменных копируются в новые переменные а, b, c, d и e
соответственно.
Главный цикл может быть описан на псевдокоде следующим образом:
for (t=0; t<80; t++){
temp = (а <<< 5)+f
t
(b, с, d) + e + W
t
+ К
t
;
e = d; d = c; c = b <<<30; b = а; а = temp;
}
где <<< – операция циклического сдвига влево; K
t
– 16-ричные константы,
определяемые как:
=
=
=
=
=
...79,60 ,6162
...59;40 ,18
...39;20 ,196
...19;0 ,8279995
tDCCA
tBBCDCF
tEDAED
tA
K
t
функции f
t
(x, у, z) задаются следующими выражениями:
=
=
=¬
=
...59,40 ,
60...79; ...39,20 ,
...19;0 ,
), ,(
tZYZXYX
tZYX
tZXYX
zyxf
t
значения W
t
получаются из 32-битовых подблоков 512-битового блока
расширенного сообщения по следующему правилу: