Как установить семя MessageDigest?

Класс MessageDigest реализует алгоритм SHA-1 (среди многих других). Алгоритм SHA-1 позволяет использовать разные «начальные» или начальные дайджесты. См. псевдокод SHA-1.

Алгоритм инициализирует переменные или начальное значение:

Initialize variables:
h0 = 0x67452301
h1 = 0xEFCDAB89
h2 = 0x98BADCFE
h3 = 0x10325476
h4 = 0xC3D2E1F0

Однако класс MessageDigest, как описано в Онлайн-руководство по Java, не предоставляет API для установки этих исходных переменных. На самом деле он не указывает значение начальных переменных.

Как установить начальное семя для алгоритма SHA-1?

Где пример SHA-1 в Java, ИСПОЛЬЗОВАНИЕ НАЧАЛЬНОГО SEED?
(Мне нужна реализация SHA-1, если только в примере не используется MessageDigest с альтернативным начальным кодом.)


person Thomas Matthews    schedule 04.08.2010    source источник


Ответы (3)


Где вы видите потребность в семени в дайджесте SHA-1? Обычно в алгоритме шифрования с необходимостью источника случайных чисел «необходимо начальное число». Но в SHA-1 вы вообще не используете случайные числа, поэтому не нужно устанавливать начальное число или начальный вектор. Упомянутые вами переменные являются «жесткими» (константами), они являются частью алгоритма, нет необходимости или использования для изменения значений h0-4.

person Michael Konietzka    schedule 04.08.2010
comment
Мое приложение выполняет SHA-1 для исполняемого файла. Одно из требований приложения — разрешить пользователям устанавливать начальное семя алгоритма SHA-1. Это позволяет пользователю проверить исполняемый файл. - person Thomas Matthews; 04.08.2010
comment
Вы можете проверить хэш, не меняя начальное семя. Какова мотивация смены семени? Эти константы являются частью алгоритма SHA-1: itl.nist.gov/fipspubs. /fip180-1.htm Стоит отметить, что вы никогда не должны пытаться настраивать алгоритмы шифрования и хеширования, не зная, что вы делаете, так как вы можете фактически свести на нет любые преимущества безопасности, предоставляемые алгоритмом. - person Alan Krueger; 04.08.2010

Я рекомендую использовать соль вместо семени для хеш-функций семейства MessageDigest. Соль применяется, например, путем добавления байтов соли перед входом.

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

person Jeffrey Hantin    schedule 19.01.2011
comment
К сожалению, соли не входили в требования. Требование, в частности, заключалось в том, чтобы иметь возможность изменить начальное значение. Все равно спасибо за технику. - person Thomas Matthews; 19.01.2011

Функция Java не может быть снабжена начальным начальным числом.

Я скопировал реализацию алгоритма SHA-1 на C и модифицировал ее, чтобы можно было изменять начальные начальные значения.

person Thomas Matthews    schedule 21.10.2010