Почему в RSACryptoServiceProvider.VerifyHash есть параметр «идентификатор хеш-алгоритма»?

Поскольку RSACryptoServiceProvider .VerifyHash проверяет уже хэшированное сообщение — зачем ему знать, какой алгоритм хеширования использовался?

При вопросе о методе SignHash было предложено что причина для сообщения hash (а не для фактического использования при подписании). Но в данном случае это не объясняет. (поскольку это не параметр out.)


person ispiro    schedule 06.05.2013    source источник
comment
@DanielHilgarth Из MSDN: подтверждает что цифровая подпись действительна, путем определения хэш-значения в подписи с использованием предоставленного открытого ключа и сравнения его с предоставленным значением хэш. - параметр уже является хешем.   -  person ispiro    schedule 06.05.2013


Ответы (1)


Это связано с тем, что кодирование подписи PKCS#1 включает OID хеш-функции в блоке данных, зашифрованном с помощью RSA.

person Nickolay Olshevsky    schedule 06.05.2013
comment
Спасибо. Поэтому, если я введу неправильный алгоритм, он скажет мне, что он не удался просто потому, что алгоритмы не совпадают. Если это так - кажется, что причина для параметра алгоритма в SignHash также по той же причине, а не для передачи хэша, как было предложено в ответах, на которые я ссылался. Я вас правильно понял? - person ispiro; 06.05.2013
comment
Насколько я помню, причина включения OID хеша в подпись также связана с защитой - если у нас есть более слабый алгоритм хеширования с той же длиной хэша, мы можем (теоретически) изменить подписанные данные и создать ту же подпись, используя другой алгоритм хеширования. - person Nickolay Olshevsky; 06.05.2013
comment
Спасибо.​​​​​​​​​​​​​​​​​​​​​​ - person ispiro; 06.05.2013
comment
+1 да, именно так. См. также ISO 9796, где идентификатор хэша должен передаваться вне диапазона, даже если он может присутствовать в подписи. В противном случае злоумышленник может заставить вас принять подпись, используя сломанную хэш-функцию. Обычно это не большой риск, но лучше перестраховаться, чем потом сожалеть. - person Maarten Bodewes; 07.05.2013