- PVSM.RU - https://www.pvsm.ru -

Анализ хеш функций для повышения криптостойкости алгоритмов

Хеш-функция—преобразование текста произвольной длинны в текст фиксированной длинны.
H=hash(P);
P—пароль ( открытый текст), длинна P от 0 до бесконечности;
H—хеш-значение (хешированный текст), длинна H=N бит (при условии что функция hash возвращает хеш-значение длинной N бит).
Хеш-функция используется в любом алгоритме шифрования. Ее функция заключается в следующем—при вводе пользователем пароля произвольной длинны, хеш-функция преобразует этот пароль в хеш-значение фиксированной длинны (ключ).

Для любого итерационного (циклического) алгоритма возможно повысить криптостойкость.
Общую схему итерационного алгоритма можно представить следующим образом представленным на Рис. 1.
Ключи находятся по следующему алгоритму:
K1=hash(PASSWORD)
K2=f(K1)
……………
Kn=f(Kn-1)
Функция f—функция преобразования ключа.
Если знать K1, то возможно вычислить все остальные Ki, i=2..n.
Анализ хеш функций для повышения криптостойкости алгоритмов
Рис. 1.—Обобщенная схема итерационных криптоалгоритмов
Злоумышленник (взломщик) не зная пароля, но зная значение хеш функции может расшифровать весь текст. Для подбора пароля методом грубой силы необходимо сделать перебор 2S значений (S—размер хеш-значения в битах). Если хеш-функция возвращает значение длинной 64 бита—потребуется сделать перебор 264 = 1.84467441×1019 значений.
Компьютер злоумышленника может перебирать 1000000 паролей в секунду. Тогда подбор хеш-значения максимально займет 213 503 982 дней.
Если использовать «атаку дней рождения» [1] то количество вариантов сократится в среднем вдвое—264/2 = 232 = 4 294 967 296 значений. На перебор этих значений уйдет всего лишь 1.19 часов.

Методы повышения криптографической стойкости.

Метод «изменение процедуры генерации ключей»

Проведем анализ наиболее распространенных хеш-функций.
Для пароля «Password» были получены следующие хеш-значения:

Хеш-функция Хеш-значение
1 MD2 9dc7dd5f9b5f681a133e64c0089330e7
2 MD4 f15abd57801840f3348ddccafb677f6a
3 MD5 dc647eb65e6711e155375218212b3964
4 SHA-1 8be3c943b1609fffbfc51aad666d0a04adf83c9d
5 SHA-224 a1308b7983fef7def9ffd06bed7ff767fa4216baf9d9d911af1e7e2e
6 SHA-256 e7cf3ef4f17c3999a94f2c6f612e8a888e5b1026878e4e19398b23bd38ec221a
7 SHA-384 d3a1ad34a5f0d265d8c0441d85532a95d02fcca0450646c21f1585cfc521843cd423d02f53e9205390706cc15f3a06fe
8 SHA-512 e6c83b282aeb2e022844595721cc00bbda47cb24537c1779f9bb84f04039e1676e6ba8573e588da1052510e3aa0a32a9e55879ae22b0c2d62136fc0a3e85f8bb
9 Tiger-128 78db95bcce175ab632095962774965d1
10 Tiger-160 78db95bcce175ab632095962774965d1151e1f17
11 Tiger-192 78db95bcce175ab632095962774965d1151e1f1727c63f3d
12 Whirlpool fd07ba63996cdcfa6130ee82acec65da7487f51564bb7c6ead6dabc6b9e8eac974e5d852edc545804ae68fa46fc59d4789acab50bbc22b26fb24412f8dc11cde
13 DES(Unix) Q37hnXsCsGjCU
14 CRC-32 9abfd710

(Таблица была получена с сайта InsidePro [2] )

Алгоритмы CRC-32, DES(Unix) использовать не желательно, т.к. они генерируют очень короткий хеш. А алгоритмы серии Tiger генерируют одинаковые хеши в начале последовательности. Об алгоритмах MD2 и MD4 были заявления о взломе.
Из претендентов на реальное использование можно рассматривать только алгоритмы серии SHA, MD5 и Whirlpool.
Наиболее оптимально использовать SHA-512 и Whirlpool.
Предположим что алгоритм шифрования требует ключ длины 64 бита.
Ключ Ks вычисленный по алгоритму SHA-512 занимает 512 бит. Разбиваем ключ на 8 подключей равной длинны. Обозначим их как Ks1, Ks2, …., Ks8.

Ks1 Ks2 Ks3 Ks4
e6c83b282aeb2e02 2844595721cc00bb da47cb24537c1779 f9bb84f04039e167
Ks5 Ks6 Ks7 Ks8
6e6ba8573e588da1 052510e3aa0a32a9 e55879ae22b0c2d6 2136fc0a3e85f8bb

Аналогично поступим и с ключом Kw (хеш Whirlpool).
Получим 16 подключей Ks1 —Ks8 и Kw1 —Kw8.
Исходя из предположения что в алгоритме рассмотренном на Рис.1 n=8, возможно итерационную последовательность ключей Ki (i=1..8) заменить независимыми (не итерационными) ключами Kxi (i=1..8).

Ключ Значение
Kx1 Ks1 XOR Kw5
Kx2 Ks3 XOR Kw2
Kx3 Ks5 XOR Kw3
Kx4 Ks8 XOR Kw1
Kx5 Ks4 XOR Kw7
Kx6 Ks7 XOR Kw4
Kx7 Ks6 XOR Kw8
Kx8 Ks2 XOR Kw6

Тогда злоумышленнику вместо 264 или 232 вариантов придется вычислять 2 хеш-функции, сложность каждой из которых 2512. И того ему придется перебрать:
1. методом «грубой силы»—1.8 × 10308 вариантов.
2. атакой «дней рождений»— 1.34 × 10154 вариантов.

Метод «изменения хеш-функции».

На основе этой [3] статьи.

Различие в пользователе (знающим пароль) и взломщике (не знающим пароль) в количестве запуска процесса расшифрования. Пользователь запускает процесс расшифровки один раз с правильным паролем. Злоумышленник же запускает этот процесс огромное количество раз в попытке подобрать пароль.
Исходя из этой предпосылки возможно повысить криптостойкость алгоритма. Необходимо замедлить работу хеш-функции для замедления подбора пароля и осуществления анализа криптоалгоритма.
Если для создания ключа функция hash работает 1 мс. И при подборе пароля осуществляется вызов этой функции 1000 раз в секунду, то перебор 106 значений займет 1000 секунд (примерно 16 минут).
Модифицируем функцию hash таким образом что она будет работать 100 мс. Назовем получившуюся функцию slow_hash. При использовании функции slow_hash вместо hash перебор займет 100000 секунд или 27 часов.
Для пользователя замедление процесса хеширования будет практически не заметна, а взлом будет занимать на порядок больше времени.


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

Автор: karazhanov


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/bezopasnost/6610

Ссылки в тексте:

[1] «атаку дней рождения»: http://ru.wikipedia.org/wiki/%D0%90%D1%82%D0%B0%D0%BA%D0%B0_%C2%AB%D0%B4%D0%BD%D0%B5%D0%B9_%D1%80%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F%C2%BB

[2] InsidePro: http://www.insidepro.com/hashes.php

[3] этой: http://habrahabr.ru/post/100138/