| ||||
| ||||
Подскажите пожалуйста, как добавить подпись к подписанному сообщению, если оно собрано как ’detached’. Т.е. проблема в том, что при ’attached’ подписи все работает (CryptSignMessage(¶m, FALSE, 1, MessageArray, MessageSizeArray, pOutSign, &cbOutSign)), а при ’detached’ (CryptSignMessage(¶m, TRUE, 1, MessageArray, MessageSizeArray, pOutSign, &cbOutSign)) проверка на нее не проходит. | ||||
Ответы: | ||||
| ||||
Возпользуйтесь low level функциями - CryptMsgOpenToDecode, CryptMsgUpdate и т.д. | ||||
| ||||
> Возпользуйтесь low level функциями - >CryptMsgOpenToDecode, CryptMsgUpdate и >т.д. На самом деле проблема в том, чтобы подписать не сами данные, а их хеш-функцию. Для этого и делается ’detached’ подпись, т.к. тянуть на клиента огромный файл не возможно. А доподпись такого сообщения не проходит, точнее low level функции (CryptMsgOpenToDecode, CryptMsgUpdate, CryptMsgControl ) отрабатывают без ошибок, а при проверке подписи функцией CryptVerifyDetachedMessageSignature проверяется только первая подпись, при проверке второй выдается NTE_BAD_SIGNATURE. При ’attached’ все проверяется корректно. | ||||
| ||||
CryptoAPI всегда подписывает хэш а не данные (особенность асимметричных алгоритмов). Не очень понятна схема - клиент будет подписывать то, что на самом деле не видит? При attached Вы похоже не добавляете подпись к сообщению, а подписываете целиком данные + первую подпись, т.е. заверяете ее. А требуется именно это? | ||||
| ||||
> CryptoAPI всегда подписывает хэш Проблема в том что подписывается не хэш данных, а хэш сообщения, и неполучается построить новое сообщение на имеющимся хэше данных... >клиент будет подписывать то, что на >самом деле не видит? Да, иначе с данным каналом связи не получится. >При attached Вы похоже не добавляете > подпись к сообщению, а подписываете > целиком данные + первую подпись, т.е. > заверяете ее. А требуется именно это? Нет, требуется просто добавить второю подпись. Возможно ли это? | ||||
| ||||
Если клиенту допустимо не видеть то, что он подписывает - можно передавать ему не сообщение а хэш, и при проверке подписи проверять ее не на сообщение а на его хэше. | ||||
| ||||
Проблема в том, что так нельзя, потому что используется SMIME, и Outlook Express должен корректно обрабатывать письмо. | ||||
| ||||
Тогда попробуйте воспользоваться функцией CryptSignHash - раз хэш можно передавать. | ||||
| ||||
>Тогда попробуйте воспользоваться > функцией CryptSignHash - раз хэш > можно передавать А как на основе этой функции сделать PKCS7 - подпись ? (для Outlook Express ) | ||||
| ||||
Только вручную - с помощью CryptEncodeObject | ||||
| ||||
А такой механизм как со-подпись (co-sign) не подходит? Там просто подписывают не данные, а уже существующую цифровую подпись другого человека. | ||||
| ||||
>А такой механизм как со-подпись (co- >sign) не подходит? Outlook Express не сможет проверить... | ||||