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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline realstan  
#1 Оставлено : 25 июля 2017 г. 14:23:51(UTC)
realstan

Статус: Новичок

Группы: Участники
Зарегистрирован: 25.07.2017(UTC)
Сообщений: 3

Добрый день!

Реализуем систему электронного документооборота с функцией электронной подписи. Для этих целей был выбран CryptoPro Browser Plugin
Смысл задачи: загрузить файл на сервер и все участники процесса его подписывают.

Делаю это примерно так:
0. Файл загружается на сервер.
1. Генерируется хеш файла по ГОСТ алгоритму (непринципиально пока 34.11-94 или 34.11-2012)
2. Далее каждый, кто должен подписать документ подписывает не сам документ, а сформированный хеш методом SignHash с параметром отделенной подписи.
3. Файлы отделенных подписей сохраняются.

Если все так, то помогите разобраться с нюансами, т.к. подпись формируется, но в совокупности с файлом не проверяется.

Исходники:
Код:

    function InitializeHashedData(hashAlg, sHashValue) {
        // Создаем объект CAdESCOM.HashedData
        var oHashedData = cadesplugin.CreateObject("CAdESCOM.HashedData");
        // Инициализируем объект заранее вычисленным хэш-значением
        // Алгоритм хэширования нужно указать до того, как будет передано хэш-значение
        oHashedData.Algorithm = hashAlg;		
		//console.log(sHashValue);
		//oHashedData.DataEncoding = CADESCOM_BASE64_TO_BINARY;
		//oHashedData.Hash(dataToSign); // dataToSign - это строка base64
        oHashedData.SetHashValue(sHashValue);

        return oHashedData;
    }

    function CreateSignature(oCertificate, oHashedData) {

        // Создаем объект CAdESCOM.CPSigner
        var oSigner = cadesplugin.CreateObject("CAdESCOM.CPSigner");
        oSigner.Certificate = oCertificate;
        // Создаем объект CAdESCOM.CadesSignedData
        var oSignedData = cadesplugin.CreateObject("CAdESCOM.CadesSignedData");
        var sSignedMessage = "";
        // Вычисляем значение подписи
        try {
            sSignedMessage = oSignedData.SignHash(oHashedData, oSigner, CADESCOM_CADES_BES);
        } catch (err) {
            alert("Failed to create signature. Error: " + cadesplugin.getLastError(err));
            return;
        }
        return sSignedMessage;
    }


Вызываются вышеуказанные функции так:
Код:

//sHashValue - параметр в функции, хеш получается на этапе загрузки и проверялся вручную для загружаемых файлов. Т.е. пока исключаю возможность некорректно сформированного хеша.
var hashAlg = CADESCOM_HASH_ALGORITHM_CP_GOST_3411; // ГОСТ Р 34.11-94
// Создаем объект CAdESCOM.HashedData
var oHashedData = InitializeHashedData(hashAlg, sHashValue);	
var sSignedMessage = CreateSignature(Certificate, oHashedData);


Собственно приведенный код практически полная копия из руководства разработчика http://cpdn.cryptopro.ru...les-cades-sign-hash.html

Результат sSignedMessage сохраняется в файл. Средства КриптоАрм и VipNet выдают информацию о подписи, но не валидируются вместе с файлом, на основе которого формировался хеш.

Подскажите пожалуйста, что я упустил. Пробовал разные варианты (задавал кодировки), на форуме нашел эту тему
https://www.cryptopro.ru...aspx?g=posts&t=11975

Разобрал исходный код альтернативной демостраницы (https://www.cryptopro.ru/sites/default/files/products/cades/demopage_/cades_bes_sample.html) и обнаружил, что сначала выполняется SignHash, а затем зачем-то SignCades. Результат подписи - файл подписи, который извлекать надо, содержащий внутри текст результата SignHash.
Возможно я не до конца понимаю назначения метода SignHash?

Буду признателен любой помощи, спасибо.
Offline realstan  
#2 Оставлено : 26 июля 2017 г. 12:52:31(UTC)
realstan

Статус: Новичок

Группы: Участники
Зарегистрирован: 25.07.2017(UTC)
Сообщений: 3

Отвечу сам себе:
проблема все таки была в хеше, а точнее в его представлении:
cpverify и подобные утилиты к моим файлам выдавали хеш в одном порядке и я использовал аналогичное представление, а для плагина требуется попарная перестановка символов.
Т.е. если cpverify выдает хеш в виде
ABCDEF0123456789, то плагину в setHashValue нужно подать значение BADCFE1032547698.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.