Статус: Новичок
Группы: Участники
Зарегистрирован: 10.06.2014(UTC) Сообщений: 8  Откуда: Москва
|
Добрый день, у меня такая проблема. 1) Сценарий 1. Создаю криптографическое сообщение (без данных) с одной подписью X1, созданной ключом Х. Проверяю подпись достоверна. Меняю данные, проверяю подпись скомпрометирована. Соподписываю сообщение опять ключом X и получаю подпись X2. Проверяю X1 и X2 достоверны. Меняю данные на первоначальные - обе подписи скомпрометированы. 2) Сценарий 2. Создаю криптографическое сообщение (без данных) с одной подписью X1, созданной ключом Х. Проверяю подпись достоверна. Меняю данные, проверяю подпись скомпрометирована. Соподписываю сообщение ключом Y и получаю подпись Y1. Проверяю подпись Y1 достоверна, а X1 соответственно скомпрометирована. Меняю данные еще раз. Проверяю подпись Y1 скомпрометирована, а X1 достоверна. Все верно. Соподписываю сообщение опять ключом X получаю подпись X2. Проверяю все подписи X1, X2 достоверны, Y1 - не достоверна. Подписываю ключом Y и получаю подпись Y2. Проверяю все подписи X1, X2 достоверны, Y1, Y2 - не достоверны. Кратко о том как я делал: 1) Создание криптографического сообщения с подписью Цитата:1.1 Ищу контейнер закрытого ключа 1.1 Получаю закрытый ключ CryptAcquireCertificatePrivateKey() 1.2 Заполняю структуры CRYPT_ALGORITHM_IDENTIFIER, CMSG_SIGNER_ENCODE_INFO 1.3 Структуру CMSG_SIGNER_ENCODE_INFO помещаю в массив структур CMSG_SIGNER_ENCODE_INFO (массив csei) 1.4 Заполняю структуры CERT_BLOB 1.5 Структуру CERT_BLOB помещаю в массив структур CERT_BLOB (массив cb) 1.6 Заполняю структуру CMSG_SIGNED_ENCODE_INFO (csedei) с учетом массивов csei и cb 1.7 Получаю сообщение CryptMsgOpenToEncode(MY_ENCODING_TYPE, CMSG_DETACHED_FLAG, CMSG_SIGNED, &csedei, NULL, NULL) 1.8 В цикле заполняю сообщение CryptMsgUpdate(..., feof(...)) 1.9 Получаю сообщение CryptMsgGetParam(hMsg, CMSG_CONTENT_PARAM, 0, &blob, &i) 1.10 Записываю блоб в файл. 2) Соподпись Цитата:2.1 Повтор пунктов 1.1, 1.2, 1.4 2.2 Загружаю содержимое файла (криптографическое сообщения) в память 2.3 Получаю сообщение CryptMsgOpenToDecode(MY_ENCODING_TYPE, CMSG_DETACHED_FLAG, 0, NULL, NULL, NULL) 2.4 Копирую в сообщение содержимое файла (крипт. сообщения) CryptMsgUpdate(..., TRUE) 2.5 Аналогично пункту 1.8 2.6 Помещаю подпись в сообщение CryptMsgControl(hMsg, 0, CMSG_CTRL_ADD_SIGNER, &SignerEncodeInfo) 2.7 Помещаю сертификат открытого ключа в сообщение CryptMsgControl(hMsg, 0, CMSG_CTRL_ADD_CERT, &SignerCertBlob) 2.8 Повтор пунктов 1.9 и 1.10 3) Проверка Цитата:3.1 Повтор пункта 2.3, 2.4, 1.8 3.2 Получаю кол-во подписей CryptMsgGetParam(hMsg, CMSG_SIGNER_COUNT_PARAM, 0, &count, &size) 3.3 В цикле по каждой подписи 3.3.1 CryptMsgGetParam(hMsg, CMSG_SIGNER_CERT_INFO_PARAM, номер_подписи, pbSignerCertInfo, &cbSignerCertInfo)){ 3.3.2 Открываю хранилище hStoreHandle = CertOpenStore(CERT_STORE_PROV_MSG, MY_ENCODING_TYPE, hCryptProv, 0, hMsg) 3.3.3 Получаю контекст pSignerCertContext = CertGetSubjectCertificateFromStore(hStoreHandle,MY_ENCODING_TYPE, pSignerCertInfo) 3.3.4 Получаю структуру CMSG_SIGNER_INFO_PARAM: CryptMsgGetParam(hMsg, CMSG_SIGNER_INFO_PARAM, номер_подписи, (PVOID)pSignerInfo, &dwSignerInfo) 3.3.5 Проверяю CryptMsgControl(hMsg,0,CMSG_CTRL_VERIFY_SIGNATURE, pSignerCertContext->pCertInfo) 3.3.6 Получаю остальные необходимые параметры (даты, а так же свои собственные подписанные атрибуты - комментарий и еще один). Подскажите это все таки моя ошибка (можете подсказать где именно) или все таки ошибка CryptoPro или особенность CryptoAPI? Отредактировано пользователем 19 июня 2014 г. 17:36:17(UTC)
| Причина: Не указана
|