Comments (10)
Здравствуйте!
Полагаю, что вам подойдёт этот пример. Основную роль играют KeyExchangeFormatter
/KeyExchangeDeformatter
, экземпляры которых создаются на основе асимметричного ключа. Симметричный ключ может быть как постоянным (например, храниться в конфигурациионном файле приложения), так и случайным (если будет организован способ передачи параметров симметричного ключа от отправителя к получателю зашифрованных данных).
from gostcryptography.
Я пробовал реализовать этот пример. Дело в том, что я отправляю открытый ключ в Контур, и они возвращают мне строку, которую я должен расшифровать с помощью закрытой части сертификата.
Это выглядит вот так:
var encryptedStr = "здесь_длинная_полученная_строка";
var encryptedBytes = Convert.FromBase64String(encryptedStr);
var encryptedStream = new MemoryStream(encryptedBytes);
var privateKeyAlgorithm = (GostAsymmetricAlgorithm)cert.GetPrivateKeyAlgorithm();
var deformatter = privateKeyAlgorithm.CreateKeyExchangeDeformatter();
using (var receiverSessionKey = deformatter.DecryptKeyExchangeAlgorithm(encryptedBytes))
{
var decryptedString = receiverSessionKey.ToString();
}
Но на строке using код падает в ошибки:
CryptographicException: ASN.1 encoded byte array contains invalid structure 'Gost_R3410_KeyTransport'.
CryptographicException: ASN.1 decode error. SEQUENCE or SET is missing a required element. Offset: 2.
В чём тут может быть проблема?
from gostcryptography.
Вам нужно внимательней посмотреть на указанный пример.
Метод DecryptKeyExchangeAlgorithm()
делает дешифрацию общего секретного ключа, т.е. на вход он получает зашифрованный симметричный ключ. Как я понял, вы передаете ему не ключ, а зашифрованные данные. Для шифрации/дешифрации данных используется поток CryptoStream
.
Помимо зашифрованных данных вы должны как-то получить вектор инициализации и зашифрованный симметричный ключ. На основе ассиметричного алгоритма вы расшифруете симметричный ключ, а потом уже симметричным ключом расшифруете данные. Обычно это делается так.
from gostcryptography.
Я просто подумал, что есть вариант как-то выдернуть часть реализации расшифровки сообщения. Если я правильно понимаю, то речь идёт о расшифровке сообщения, зашифрованного открытым ключом сертификата. А значит его можно расшифровать закрытым ключом сертификата.
Подобно объекту RSACryptoServiceProvider, в котором есть методы .Encrypt(byte[]), .Decrypt(byte[]).
from gostcryptography.
Да, действительно, RSA имеет методы Encrypt()
/Decrypt()
. Однако примечательно, что его нет среди методов базового класса AsymmetricAlgorithm
. Судя по коду RSACryptoServiceProvider
, внутри вызываются методы EncryptKey()
/DecryptKey()
, что наводит на мысль, что под данными подразумевается все-таки ключ (симметричного) шифрования, а не сами данные. Вам действительно не передают зашифрованный симметричный ключ, только зашифрованные данные? Если так, то я попробую изучить тему глубже, может что-то и получится. :)
from gostcryptography.
@IverCold Если вопрос решен, предлагаю поделиться решением и закрыть задачу. :)
from gostcryptography.
@AlexMAS Я лучше приложу инструкцию Контура, которую они мне дали. Нужно получить Access Token. Его можно получить по логину-паролю (как мы делаем сейчас), а можно по сертификату (так должно быть безопаснее). Чтобы получить токен по сертификату расшифровать случайный контент, который присылает Контур. Сам же инструкция вот здесь:
https://developer.testkontur.ru/doc/openidconnect?about=2
from gostcryptography.
@IverCold Если вопрос решен, предлагаю поделиться решением и закрыть задачу. :)
Ну, я не настолько хорош, чтобы предложить решение в рамках вашей библиотеки = )
Но невероятная благодарность от меня за её существование. Без неё мы бы просто не взлетели - мы используем реализацию raw подписи для Контура/СФР как раз.
from gostcryptography.
Спасибо за обратную связь! :)
Понятно, то есть вам не удалось выполнить аутентификацию по сертификату. А можете прикрепить файл с base64 этого encrypted_key
, я попробую посмотреть ее через ASN.1-редактор. Может что-то прояснится, что они присылают в ответ. :)
from gostcryptography.
@IverCold Здравствуйте! У вас нет примера encrypted_key
? :)
from gostcryptography.
Related Issues (20)
- Верефикация нескольких сигнатур в файле
- Расшифровка с помощью сертификата HOT 2
- Подпись сообщений в веб-приложении (IIS) HOT 5
- Утечки памяти в GostCryptography HOT 4
- .netcore HOT 7
- Ошибка подписания при работе с КриптоПРО
- ЭЛН 2.0 HOT 90
- Реализация под Net 5 HOT 7
- VipNet 4.4.2 создает провайдеры с типом 75, 80 и 81 HOT 1
- Поддержка префиксов в xmldsig
- Верификация подписи ГОСТ Р 34.10-2012, 256 бит. HOT 3
- Принудительное шифрование XML по ГОСТ 2001 HOT 3
- Отправка запроса на получение "Уведомление об изменении ЭЛН".
- ComputeSignature Exception HOT 8
- Создание симметричных ключей для тестов HOT 5
- Алгоритм ключа сертификата не поддерживается HOT 1
- Взаимодействие с федеральными сервисами. Формирование jwt токена с использованием GOST3410. HOT 7
- Поддержка ГОСТ 34.12-2018 HOT 7
- Unknown algorithm '1.2.643.7.1.1.1.1' HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gostcryptography.