17.12.2004 17:25:59"Доподпись" сообщения Ответов: 11
Denis
Подскажите пожалуйста, как добавить подпись к подписанному сообщению, если оно собрано как ’detached’. Т.е. проблема в том, что при ’attached’ подписи все работает (CryptSignMessage(&param, FALSE, 1, MessageArray, MessageSizeArray, pOutSign, &cbOutSign)), а при ’detached’ (CryptSignMessage(&param, TRUE, 1, MessageArray, MessageSizeArray, pOutSign, &cbOutSign)) проверка на нее не проходит.
 
Ответы:
20.12.2004 10:18:48Kirill Sobolev
Возпользуйтесь low level
функциями - CryptMsgOpenToDecode, CryptMsgUpdate и т.д.
23.12.2004 13:35:57Denis
> Возпользуйтесь low level функциями -
>CryptMsgOpenToDecode, CryptMsgUpdate и
>т.д.

На самом деле проблема в том, чтобы подписать не сами данные, а их хеш-функцию. Для этого и делается ’detached’ подпись, т.к. тянуть на клиента огромный файл не возможно. А доподпись такого сообщения не проходит, точнее low level функции (CryptMsgOpenToDecode, CryptMsgUpdate, CryptMsgControl ) отрабатывают без ошибок, а при проверке подписи функцией CryptVerifyDetachedMessageSignature проверяется только первая подпись, при проверке второй выдается NTE_BAD_SIGNATURE. При ’attached’ все проверяется корректно.
23.12.2004 13:54:59Kirill Sobolev
CryptoAPI всегда подписывает хэш а не данные (особенность асимметричных алгоритмов). Не очень понятна схема - клиент будет подписывать то, что на самом деле не видит?
При attached Вы похоже не добавляете подпись к сообщению, а подписываете целиком данные + первую подпись, т.е. заверяете ее. А требуется именно это?
23.12.2004 15:33:29Denis
> CryptoAPI всегда подписывает хэш
Проблема в том что подписывается не хэш данных, а хэш сообщения, и неполучается построить новое сообщение на имеющимся хэше данных...

>клиент будет подписывать то, что на
>самом деле не видит?
Да, иначе с данным каналом связи не получится.

>При attached Вы похоже не добавляете
> подпись к сообщению, а подписываете
> целиком данные + первую подпись, т.е.
> заверяете ее. А требуется именно это?

Нет, требуется просто добавить второю подпись.

Возможно ли это?



23.12.2004 15:41:41Kirill Sobolev
Если клиенту допустимо не видеть то, что он подписывает - можно передавать ему не сообщение а хэш, и при проверке подписи проверять ее не на сообщение а на его хэше.
23.12.2004 16:19:49Denis
Проблема в том, что так нельзя, потому что используется SMIME, и Outlook Express должен корректно обрабатывать письмо.
23.12.2004 16:25:40Kirill Sobolev
Тогда попробуйте воспользоваться функцией CryptSignHash - раз хэш можно передавать.
23.12.2004 16:42:39Denis
>Тогда попробуйте воспользоваться
> функцией CryptSignHash - раз хэш
> можно передавать

А как на основе этой функции сделать PKCS7 - подпись ? (для Outlook Express )
23.12.2004 17:19:18Kirill Sobolev
Только вручную - с помощью CryptEncodeObject
11.01.2005 15:08:19Юрий
А такой механизм как со-подпись (co-sign) не подходит? Там просто подписывают не данные, а уже существующую цифровую подпись другого человека.
12.01.2005 13:19:42Denis
>А такой механизм как со-подпись (co-
>sign) не подходит?

Outlook Express не сможет проверить...