2015-03-31 1 views
1

Я вычисляю хэш с помощью init-update-final механизм i.e инициализирует хэш-контекст, за которым следует хеш-обновление с различными размерами входных данных и итоговый расчет дайджеста. Это можно сделать, используя the EVP_DigestInit, EVP_DigestUpdate and EVP_DigestFinal_Ex functions of OpenSSL или Update and Final methods of Crypto++.Создает ли механизм Digest Init-Update-Final копию входных данных?

Из того, что я могу выкопать из исходного кода OpenSSL и Crypto ++, похоже, входные данные действительно копируются и хранятся. Может ли кто-нибудь подтвердить это? Является ли это ограничением процесса хеширования или стандартная процедура? И это зависит от используемого алгоритма дайджеста?

У меня создалось впечатление, что алгоритм хэширования будет вычислять некоторое внутреннее состояние на основе куска входных данных, а итоговый дайджест будет вычисляться на основе внутренних состояний, собранных по всем различным вызовам обновления. Кажется, это не так. Очевидно, я недостаточно разбираюсь в механике алгоритмов хэширования.

ответ

1

Из того, что я могу извлечь из исходного кода OpenSSL и Crypto ++, кажется, что входные данные фактически копируются и сохраняются. Может ли кто-нибудь подтвердить это?

Да и нет. Вход обычно не сохраняется. Частичные входы буферизуются до тех пор, пока не будет доступен полный блок для обработки.

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

Сколько данных может быть сохранено в памяти, зависит от внутренних элементов хэша и размера блока. Это утверждение, как правило, справедливо для итеративных хэшей, таких как MD5, SHA1 и SHA512. Но я не знаю об рекурсивных хеш-функциях, таких как SHA3.

Стратегия применяется как к OpenSSL, так и к Crypto ++.

В случае Crypto ++ выход хеша буферизуется внутри, если нет AttachedTransformation.


См. Также Init-Update-Final на вики Crypto ++. Его последнее дополнение, добавленное в январе 2016 года.