Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline Василий Анисимов  
#1 Оставлено : 13 июня 2012 г. 19:51:55(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
У меня такая проблема: в своём приложении для добаления УЭЦП я использовал функцию CadesMsgAddEnhancedSignature(). Но в ТЗ у меня написано, что если сервера TSP или OCSP недоступны, то нужно добавить сначала обычную ЭЦП, а потом, при восстановлении подключения, дополнить её до усовершенствованной.
Возможно ли такое сделать, и если да, то как? Просто я не нашел у вас в руководстве функции добавления обычной ЭЦП.

Отредактировано пользователем 13 июня 2012 г. 19:55:18(UTC)  | Причина: Не указана

ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Татьяна  
#2 Оставлено : 13 июня 2012 г. 21:34:00(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
Обычную ЭЦП можно сделать при помощи API CAPILite, аналогичного CryptoAPI от Microsoft.
CAPILite делает подписи в формате cades bes, который можно дополнить до УЭЦП.
Татьяна
ООО Крипто-Про
Offline Василий Анисимов  
#3 Оставлено : 13 июня 2012 г. 22:04:33(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
А добавляется ещё одна подпись так же, как и при подписании сообщения впервые?

А, да, и что с автономным режимом у удостоверяющей подписи?

Отредактировано пользователем 13 июня 2012 г. 22:09:23(UTC)  | Причина: Не указана

ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Василий Анисимов  
#4 Оставлено : 14 июня 2012 г. 14:26:08(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
Мне нужно именно добавить к уже имеющейся УЭЦП (или ЭЦП) ещё одну ЭЦП, и я не очень понимаю алгоритм такого добавления. Помогите, пожалуйста.

А, да, и если это воможно точно так же сделать с удостоверяющей подписью (возможность добавлять её в оффлайне, а потом дополнять до УЭЦП)

Отредактировано пользователем 14 июня 2012 г. 14:30:15(UTC)  | Причина: Не указана

ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Татьяна  
#5 Оставлено : 14 июня 2012 г. 14:46:01(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
Если я правильно поняла что вы хотите, то порядок примерно такой:

CryptMsgOpenToDecode
прочитать сообщение
CryptMsgUpdate
заполнить структуру SignerInfo, причем если сервер штампов времени доступен, то можно получить штамп и заполнить SignerInfo.cAuthAttr, SignerInfo.rgAuthAttr
CryptMsgControl с параметром CMSG_CTRL_ADD_SIGNER
сохранить полученное закодированное сообщение
Татьяна
ООО Крипто-Про
Offline Василий Анисимов  
#6 Оставлено : 14 июня 2012 г. 16:13:54(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
Сделал как вы написали, почему-то подпись добавляется дважды, не могу понять почему..

Код:

    HCRYPTMSG hMsg = CryptMsgOpenToDecode(
                                        TYPE_DER,      // Encoding type.
                                        CMSG_DETACHED_FLAG,                     // Flags.
                                        0,                     // Use the default message type.
                                        0,//hCryptProv,            // Cryptographic provider.
                                        0,                  // Recipient information.
                                        0);                 // Stream information.
    
    if (hMsg) 
		printf("The message to decode is open. \n");
    else{
    	return [self handleError:"OpenToDecode failed" errorCode:0];
	}

    if(!CryptMsgUpdate(
                       hMsg,		// Handle to the message
                       pSignaruteBlob->pbData,//signature_mem,		// Pointer to the content
                       pSignaruteBlob->cbData,//signature_len,	// Size of the content
                       TRUE)){
        return [self handleError:"CryptMsgUpdate() 1 failed" errorCode:0];
    }
    
    if (!CryptMsgUpdate(
                        hMsg,                 // Handle to the message
                        pMessageBlob->pbData,        // Pointer to the encoded blob
                        pMessageBlob->cbData,        // Size of the encoded blob
                        TRUE)){               // Last call) 
		return [self handleError:"CryptMsgUpdate() 2 failed" errorCode:0];
    }
    
    printf("The encoded blob has been added to the message. \n");
    CMSG_SIGNER_ENCODE_INFO SignerEncodeInfo = {sizeof(CMSG_SIGNER_ENCODE_INFO)};
    
    SignerEncodeInfo.cbSize = sizeof(CMSG_SIGNER_ENCODE_INFO);
    SignerEncodeInfo.pCertInfo = pUserCert->pCertInfo;
    SignerEncodeInfo.hCryptProv = hCryptProv;
    SignerEncodeInfo.dwKeySpec = keytype;
    SignerEncodeInfo.HashAlgorithm = HashAlgorithm;
    SignerEncodeInfo.pvHashAuxInfo = NULL;
    
    ...
    printf("Adding signature to message\n");
            if (!CryptMsgControl(hMsg, 0, CMSG_CTRL_ADD_SIGNER, &SignerEncodeInfo)){
                return [self handleError:"CryptMsgControl() failed" errorCode:0];
            }
            ...
            pbEncodedBlob = (BYTE *) malloc(cbEncodedBlob);
            ...
            if(CryptMsgGetParam(
                                hMsg,                      // Handle to the message
                                CMSG_ENCODED_MESSAGE,        // Parameter type
                                0,                         // Index
                                pbEncodedBlob,             // Pointer to the blob
                                &cbEncodedBlob))           // Size of the blob
            {
                printf("Message encoded successfully.\n");
            } else {
                return [self handleError:"MsgGetParam failed" errorCode:0];
            }
            printf("Простая подпись:\n");
            for(DWORD i=0; i < cbEncodedBlob; i++) 
            {
                printf("%2.2x", pbEncodedBlob[i]);
                if ((i+1)%32 == 0) printf("\n");
            }
            if (outFilename) {
                FILE *out = NULL;
                out = fopen (outFilename, "wb");
                if (out) {
                    fwrite (pbEncodedBlob, cbEncodedBlob, 1, out);
                    fclose (out);
                    cout << "Output file " << outFilename << " has been saved" << endl;
                    
                }
                else
                    return [self handleError:"Cannot open out file" errorCode:ERROR_CANT_OPEN_OUTPUT_FILE];
            }
            return 0;
ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Василий Анисимов  
#7 Оставлено : 18 июня 2012 г. 13:07:41(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
И ещё к предыдущему - это нормально, что при проверке обычной ЭЦП ф-ия CadesMsgVerifySignature завершается с ошибкой 80070490 (не найден штамп времени, как писали в одном из топиков)?
Тип подписи в структуре CADES_VERIFICATION_PARA выставлен CADES_BES.
ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Новожилова Елена  
#8 Оставлено : 18 июня 2012 г. 15:17:59(UTC)
Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 926
Женщина
Откуда: Крипто-Про

Поблагодарили: 101 раз в 96 постах
Цитата:
Сделал как вы написали, почему-то подпись добавляется дважды, не могу понять почему..


То есть всего в документе получается 3 подписи? Исходная и 2 новых? Так быть не должно. Исходная подпись точно одна?

Цитата:
И ещё к предыдущему - это нормально, что при проверке обычной ЭЦП ф-ия CadesMsgVerifySignature завершается с ошибкой 80070490 (не найден штамп времени, как писали в одном из топиков)?
Тип подписи в структуре CADES_VERIFICATION_PARA выставлен CADES_BES.


Нет, не нормально. CAdES-BES не требует наличия штампа времени.
Offline Василий Анисимов  
#9 Оставлено : 18 июня 2012 г. 15:37:34(UTC)
Василий Анисимов

Статус: Активный участник

Группы: Участники
Зарегистрирован: 27.04.2012(UTC)
Сообщений: 119
Мужчина
Российская Федерация
Откуда: Digital Design

Сказал «Спасибо»: 19 раз
Поблагодарили: 1 раз в 1 постах
По обоим комментариям - я понимаю, что так быть не должно и что-то не так :)

Цитата:
То есть всего в документе получается 3 подписи? Исходная и 2 новых? Так быть не должно. Исходная подпись точно одна?


Да, точно одна. Мой лог такой:

Цитата:

Running function: addEnhancedSignatureToSignatute //ф-ия доьбавления подписи к имеющейся
The message to decode is open.
The encoded blob has been added to the message.
Count of signers: 1 //кол-во подписей в сообщении
Adding enchnced signature to message

Running function: handleError
Error:
CadesMsgAddEnhancedSignature() failed
Error N c2100100
Adding signature to message
Message encoded successfully.

Running function: verifyEnhancedDetachedSignature //ф-ия проверки подписи
Count of signers: 3 //кол-во подписей в сообщении
The message to decode is open.
The encoded blob has been added to the message.
The message parameter (CMSG_CONTENT_PARAM) has been acquired. Message size: 0
The message param (CMSG_CONTENT_PARAM) updated. Length is 0.
A signer certificate has been retrieved.


Цитата:
CAdES-BES не требует наличия штампа времени.


Лог:
Цитата:

//ф-ии вывода сообщений об ошибках проверки, в обоих случаях ошибка одна и та же
Running function: handleError
Error:
CadesMsgVerifySignature() (enhanced) failed //ошибка проверки УЭЦП
Error N 80070490
The enhansed signature was NOT VEIFIED.
Status: 9. //Код из pInfo->dwStatus; CADES_VERIFY_NO_VALID_CADES_C_TIMESTAMP

Running function: handleError
Error:
CadesMsgVerifySignature() failed //ошибка проверки ЭЦП
Error N 80070490
Signature №0 was VERIFIED.
Status: 9. //здесь то же самое, хотя я прописываю dwCadesType = CADES_BES
...
Running function: cleanUp
ВАСИЛИЙ АНИСИМОВ
Ведущий iOS разработчик в «Digital Design»
www.digdes.ru
Offline Новожилова Елена  
#10 Оставлено : 19 июня 2012 г. 13:33:47(UTC)
Новожилова Елена

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 926
Женщина
Откуда: Крипто-Про

Поблагодарили: 101 раз в 96 постах
Нужно смотреть код.

Потому как вот это:

Код:
CadesMsgAddEnhancedSignature() failed
Error N c2100100


попытка добавить усовершенствованную подпись в сообщение. При этом сначала делается обычная подпись, которую потом не удается усовершенствовать (судя по всему из-за того, что сервер штампов времени недоступен). Сама подпись при этом никуда не исчезнет.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.