(2023-05-26 09:35:49 отредактировано smartiska)

Расшифровка открытым ключом и какая логика дожна быть

Имею рутокен ЭЦП 2.0, пишу веб приложение. Реализовал метод sign. Он возвращает base64 строку. Так же получил открытый ключ методом getPublicKeyValue. Так вот вопрос: как должна происходить логика дешифровки на другом компе? Типа передать ему открытый ключ который я получил и он каким то методом делает дешифровку или ему на его рутокен тоже надо установить такой же сертификат как мой?

Re: Расшифровка открытым ключом и какая логика дожна быть

smartiska, добрый день.
Да, вы передаете вместе с подписанным сообщением свой открытый ключ.
На другой стороне проверяют подпись методом Verify с использованием вашего открытого ключа.

(2023-05-29 09:38:01 отредактировано smartiska)

Re: Расшифровка открытым ключом и какая логика дожна быть

Аверченко Кирилл, Метод sign выглядит следующим образом:

const tokenSign = () => {
    return token().then(({ rutoken, devices }) => {
        const device = devices[1];
        console.log(rutoken);
        return rutoken
            .login(device, "123456")
            .then(() =>
                rutoken.sign(device, certId, data, rutoken.DATA_FORMAT_BASE64,
                {
                    detached: false,
                    addUserCertificate: true,
                    addEssCert: false,
                    addSignTime: false,
                })
            );
    });
};


Метод verify:

const tokenVerify = (signData) => {
    return token().then(({ rutoken, devices }) => {
        console.log(devices)
        const device = devices[0];
        console.log(rutoken);
        return rutoken.login(device, "123456").then(() =>
            rutoken.verify(device, signData, {
                    base64: true,
                    verifyCertificate: false,
                })
                .then((res) => console.log(res))
        );
    });
};

Подпись идет одним рутокеном, проверка другим. Проверка возвращает true. Но не могу понять, куда передать открытый ключ подписываещго рутокена, в методе verify. Если есть примеры скиньте плиз, для наглядности)

Re: Расшифровка открытым ключом и какая логика дожна быть

smartiska, добрый день.
При вызове sign с параметром addUserCertificate: true, сертификат (в котором содержится открытый ключ) кладется в CMS-конверт с подписью.

Соответственно, при вызове verify сертификат берется из CMS-конверта.

(2023-05-29 11:14:19 отредактировано smartiska)

Re: Расшифровка открытым ключом и какая логика дожна быть

Аверченко Кирилл, Таак, понял, спасибо большое. У меня еще один общий вопрос остался. Я новичок в теме подписей, и не до конца могу понять. Получается строка которую нам возвращает sign - это и есть cms? Или при вызове каких методов, мы получаем в ответ cms?

Re: Расшифровка открытым ключом и какая логика дожна быть

Аверченко Кирилл, И где я передаю cms в моем вызове метода verify, укажите плиз:)

Re: Расшифровка открытым ключом и какая логика дожна быть

Да, на выходе функции sign у вас как раз будет CMS конверт в кодировке base64.
Именно это вы передаете в функцию verify в поле signData.

Re: Расшифровка открытым ключом и какая логика дожна быть

Аверченко Кирилл, Здравствуйте, еще появились вопросы.
1. Можно ли узнать верна подпись или нет, без физического рутокена? (скорее всего с использованием публичного ключа)
2. Когда вызываю метод parseCertificate, в теле ответа есть поле Signature Value, мы как то или где то используем его?

Re: Расшифровка открытым ключом и какая логика дожна быть

smartiska, добрый день.
1. Да, для проверки подписи необходим только открытый ключ. Рутокен не обязателен.
2. Это поле - электронная подпись сертификата ключем удостоверяющего центра. Если вы перед проверкой электронной подписи документа проверяете на валидность сертификат, то это поле используется.
Проверить эту подпись можно с помощью открытого ключа центра сертификации, который выдал ваш сертификат.

(2023-06-06 12:32:25 отредактировано smartiska)

Re: Расшифровка открытым ключом и какая логика дожна быть

Аверченко Кирилл, Добрый день, можете пожалуйста привести пример кода верификации подписи, с использованием только открытого ключа без рутокена. Никак не могу понять, как сделать это

Re: Расшифровка открытым ключом и какая логика дожна быть

Аверченко Кирилл пишет:

Да, для проверки подписи необходим только открытый ключ. Рутокен не обязателен.

Вопрос все еще открыт:(

Re: Расшифровка открытым ключом и какая логика дожна быть

smartiska, добрый день.
Наши разработчики подготовили пример с проверкой CMS подписи https://github.com/AktivCo/rutoken-demo … cms-verify
На вход необходимо подать подписанные файлы, которые можно сделать в Демосмене, и сертификат пользователя.