CryptoPro / libcore

44 stars 0 forks source link

EnvelopedCms #17

Closed Bykiev closed 1 year ago

Bykiev commented 1 year ago

Здравствуйте, не подскажете хотя бы приблизительные сроки по реализации EnvelopedCms в библиотеке?

Fasjeit commented 1 year ago

День добрый. В настоящий момент в работе, дорабатываем/тестируем.

По прогрессу по данному направлению напишу тут.

Fasjeit commented 1 year ago

Можно пробовать пререлизную сборку из вложения. Пока не очень стабильна, можно ожидать проблем. linux win

Для cms шифрования нужно использовать класс CpEnvelopedCms, имеющий интерфейс исходного EnvelopedCms. Встраивание в исходный EnvelopedCms пока не делали.

Bykiev commented 1 year ago

Здравствуйте, протестировал на Windows и Linux (Astra Linux SE 1.7.3) все работает, спасибо!

Fasjeit commented 1 year ago

Отлично. Issue оставлю пока открытой до релиза.

skuzminoff commented 1 year ago

добрый день! попробовал использовать CpEnvelopedCms, в одну сторону (шифрование + кодирование) работает нормально, а вот в обратную сторону эксепшен на .Decode()

LibCore.Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: Invalid cryptograp
   at Internal.Cryptography.Pal.Windows.HelpersWindows.GetOriginatorCerts(SafeCryptMsgHandle hCryptMsg)
   at Internal.Cryptography.Pal.Windows.DecryptorPalWindows.Decode(Byte[] encodedMessage, Int32& version, ContentInfo& contentInfo, AlgorithmIdentifier& contentEncryptionAlgorithm, X509Certificate2Collection& originatorCerts, CpCryptographicAttributeObjectCollection& unprotectedAttributes)
   at Internal.Cryptography.Pal.Windows.PkcsPalWindows.Decode(Byte[] encodedMessage, Int32& version, ContentInfo& contentInfo, AlgorithmIdentifier& contentEncryptionAlgorithm, X509Certificate2Collection& originatorCerts, CpCryptographicAttributeObjectCollection& unprotectedAttributes)
   at LibCore.Security.Cryptography.CpEnvelopedCms.Decode(ReadOnlySpan`1 encodedMessage)
   at LibCore.Security.Cryptography.CpEnvelopedCms.Decode(Byte[] encodedMessage)
   at LibCore.TestApp.Cms.DecryptCms(Byte[] encryptedData, X509Certificate2 gostCert) in /app/LibCore.TestApp/Cms.cs:line 101
   at Program.<Main>$(String[] args) in /app/LibCore.TestApp/Program.cs:line 48

Версия LibCore - 2023.5.30.1 Версия csp - 5.0 R2 ОС - debian 11

Сертификат получателя в хранлище my установлен.

Fasjeit commented 1 year ago

@skuzminoff добрый день. Сможете приложить проект с кодом, сертификат с ключом, на котором пробуете расшифровать и сам зашифрованный файл? upd: и уточните пожалуйста конкретную версию CSP

skuzminoff commented 1 year ago

@Fasjeit репозиторий с примером ошибки, которая у меня воспроизводится https://github.com/skuzminoff/enveloped_cms_test

версии deb пакетов 5.0.12000-6 (если не оно, то скажите, где посмотреть)

Fasjeit commented 1 year ago

Пожалуйста, проверьте на ауктуальном релизе CSP (на данный момент это версия 5.0.12600), как указанно в Readme файле.

У себя локально на последнем релизе CSP не воспроизводим на вашем примере.

skuzminoff commented 1 year ago

@Fasjeit после обновления до 5.0.12800 пример стал падать на методе Encrypt() класса EnvelopedCms. Ошибка следующая

LibCore.Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: ASN1 bad tag
   at Internal.Cryptography.Pal.Windows.PkcsPalWindows.Encrypt(CmsRecipientCollection recipients, ContentInfo contentInfo, AlgorithmIdentifier contentEncryptionAlgorithm, X509Certificate2Collection originatorCerts, CpCryptographicAttributeObjectCollection unprotectedAttributes)
   at LibCore.Security.Cryptography.CpEnvelopedCms.Encrypt(CmsRecipientCollection recipients)
   at LibCore.Security.Cryptography.CpEnvelopedCms.Encrypt(CmsRecipient recipient)
   at LibCore.TestApp.Cms.EncryptCms(Byte[] dataToEncrypt, X509Certificate2 gostCert) in /app/Cms.cs:line 95
   at Program.<Main>$(String[] args) in /app/Program.cs:line 34

однако, прием с указанием ContentType у ContentInfo из вашего комментария (https://github.com/CryptoPro/corefx/issues/63#issuecomment-1366408025) в соседнем репозитории помогает ошибки избежать, последовательности Encrypt->Encode и Decode->Decrypt отработали с ожидаемым результатом.

Fasjeit commented 1 year ago

У 12800 поменялась логика в кодировании в EnvelopedCms, действительно возможны какие то наводки. Как будет время - посмотрим. По результату отпишусь.

skuzminoff commented 1 year ago

@Fasjeit а где взять csp версии 5.0.12600? на сайте у вас доступна только версия 12800.

Bykiev commented 1 year ago

@Fasjeit а где взять csp версии 5.0.12600? на сайте у вас доступна только версия 12800.

https://cryptopro.ru/sites/default/files/private/csp/50/12600/CSPSetup-5.0.12600.exe

Bykiev commented 1 year ago

@Fasjeit, здравствуйте, не подскажете по срокам, когда будет решена эта проблема в последней сборке?

Fasjeit commented 1 year ago

Проблему воспроизвели, локализовали, ждём правок в csp.

Как только появится новая сборка которую можно посмотреть - отпишусь тут.

Отдельную под 12800 делать Libcore не хочется, ибо, скорее всего придётся потом откатить изменения с следующим релизом csp.

Bykiev commented 1 year ago

Проблему воспроизвели, локализовали, ждём правок в csp.

Как только появится новая сборка которую можно посмотреть - отпишусь тут.

Отдельную под 12800 делать Libcore не хочется, ибо, скорее всего придётся потом откатить изменения с следующим релизом csp.

Спасибо, баг ведь влияет только на расшифровку, шифрование работает корректно в любой версии CSP?

Fasjeit commented 1 year ago

С 12800 проблема именно в шифровании, ибо csp не принимает передаваемый asn1 формат данных.

Fasjeit commented 1 year ago

В csp проблему починили, ждём релиза в ближайшие недели.

Bykiev commented 1 year ago

В csp проблему починили, ждём релиза в ближайшие недели.

Здравствуйте, нет ли более точных сроков?

maxdm commented 1 year ago

Стараемся до конца июля

maxdm commented 1 year ago

Выложили: https://cryptopro.ru/products/csp/downloads#latest_csp50r3

Fasjeit commented 1 year ago

В релизе 12900 всё должно работать корректно.