21.12.2005 16:41:56CryptSignHash выдает разные значения при неизменном Hashe Ответов: 12
Александр
Использую функцию CryptSignHash на хеше сгенерированном по ГОСТ ("1.2.643.2.2.9").
В результате каждый раз получаю разные значения подписи при одинаковой исходной информации!!!
На RSA-шном сертификате значение одинаковое.

В чем тут может быть проблемма?
 
Ответы:
21.12.2005 17:17:33Александр
Там добарляется случайное число, читайте ГОСТ на подпись
21.12.2005 17:39:58Александр
А как этого избежать?
21.12.2005 17:50:32Александр
Насколько я помню это требует ГОСТ. И следовательно этого избежать никак нельзя!
а зачем вам это нужно?
22.12.2005 9:30:12Александр
Хочется сделать по общеизвестному имени пароль, используя сертификат.
22.12.2005 10:53:54Александр
Смысл делать это, если имя общеизвестное и каждый сможет войти использую его?
22.12.2005 11:03:10Александр
Так если бы мы зашифровали имя закрытым ключем сертификата, тогда в принципе никто не сможет получить такой же пароль не зная этого ключа.
22.12.2005 11:26:23Kirill Sobolev
Не очень понятна схема. Если "зашифровать имя закрытым ключем сертификата" (через CryptSignHash я так понимаю), то любой, знающий ОК сможет его расшифровать.
Возможно, Вам надо сделать наоборот - шифровать окрытым ключем? Тогда CryptSignHash непричем, использовать нужно CryptEncrypt
22.12.2005 11:28:25Александр
Честно говоря, я смутно представляю эту систему =)
Пусть пользователь вводит просто пароль и всё.
22.12.2005 11:32:17Александр
Ну и что, что каждый сможет из пароля получить имя пользователя. Главное, что зная имя пользователя никто другой кроме владельца сертификата не может получить пароль!!!
22.12.2005 11:43:24Kirill Sobolev
А нельзя сделать так: пользователь в качестве пароля вводит общеизвестное имя, подписанное секретным ключем. А Вы в качестве проверки проверяете его (CryptVerifyHash) ОК пользователя. Такая схема даже предпочтительнее, т.к. пароль в явном виде нигде хранится не будет.
22.12.2005 11:51:35Александр
Это я только что и хотел предложить =)
22.12.2005 11:59:08Александр
К сожалению такая схемя не подходит. Сейчас пытаюсь обойти с другой стороны: при помощи связки
CryptDeriveKey
CryptSetKeyParam
CryptGetUserKey
CryptExportKey

Но пока не получается сделать экспорт ключа. Возвращает NTE_BAD_KEY_STATE, несмотря на то, что при вызове CryptDeriveKey использовался флаг CRYPT_EXPORTABLE