Определение хеш-функции, используемой в цифровой подписи
У меня есть цифровая подпись (RSA - PKCS#1). После расшифровки с открытым ключом RSA я получаю следующие 128 байтов
00 01 ff ff ff .. ff 00 30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 77 51 1b f4 d7 17 d7 ad 8c 2d e5 89 2a ca e0 6d a3 c0 7d 13 4d d7 b8 01 14 87 03 00 69 e4 9b b3
Удалено заполнение PKCS # 1, осталось 51 байт:
30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 77 51 1b f4 d7 17 d7 ad 8c 2d e5 89 2a ca e0 6d a3 c0 7d 13 4d d7 b8 01 14 87 03 00 69 e4 9b b3
Я хотел бы две вещи об этом:
Можно ли определить используемую хеш-функцию? Идентификатор закодированного алгоритма должен быть добавлен к фактическому телу дайджеста. Можно ли определить, какой это алгоритм из необработанных байтов?
С чего начинается фактический дайджест (сколько времени занимает голова / дайджест)?
1 ответ
Похоже, это EMSA-PKCS1-v1_5, как описано в RFC 3447, что означает, что после удаления заголовка и заполнения у вас есть кодировка DER для AlgorithmIdentifier
с последующим хеш-значением.
Из RFC:
Для шести хеш-функций, упомянутых в Приложении B.1, DER-кодирование T
DigestInfo
значение равно следующему:[...]
SHA-256:
(0x)30 31 30 0d 06 09 60 86 48 01 65 03 04 02 01 05 00 04 20 || H.
Итак, в вашем примере значение хеш-функции - это начало хеша SHA-256 77511bf4d7...
,