(2024-05-29 14:59:23 отредактировано rxnsx)

Ошибка декодирования для рутокена ГОСТ3410 - 256 C# библиотека

Не получается дешифровать сообщение с рутокена ГОСТ3410 - 256, выдает следующую ошибку при использовании метода DECRYPT


Net.Pkcs11Interop.Common.Pkcs11Exception: Method C_EncryptInit returned CKR_KEY_TYPE_INCONSISTENT
   at Net.Pkcs11Interop.HighLevelAPI41.Session.Encrypt(Mechanism mechanism, ObjectHandle keyHandle, Byte[] data)
   at Net.Pkcs11Interop.HighLevelAPI.Session.Encrypt(Mechanism mechanism, ObjectHandle keyHandle, Byte[] data)
   at SEV_Vplay.Models.LibModel.DecryptTokenMessage(String itemEncryptedMessage) in


Данные полученные методом: GetCertificateInfo


Certificate:
    Data:
        Version: 3 (0x2)
        Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
        Issuer: ST=Moscow,L=Moscow,O=AO Aktiv-Soft,OU=Rutoken,CN=Rutoken TEST CA GOST
        Validity
            Not Before: May 29 06:29:26 2024 GMT
            Not After : May 29 06:29:26 2025 GMT
        Subject: CN=TestCertificate,SN=QWE,GN=ZXC QWE
        Subject Public Key Info:
            Public Key Algorithm: GOST R 34.10-2012 with 256 bit modulus
                Public key:
                   X:6213D698AAC219330309D2978EC8C03243593333250EAE45827D8091003624AB
                   Y:6AE225FD44242A7DA2FB78E3673C32D3BCB2600FDF18B90A85A62FDD1F9211EE
                Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet
        X509v3 extensions:
            X509v3 Key Usage:
                Digital Signature
            X509v3 CRL Distribution Points:
                Full Name:
                  URI:http://ra.rutoken.ru/root_certs/gost.crl
            Authority Information Access:
                CA Issuers - URI:http://ra.rutoken.ru/root_certs/caGost256.crt
            X509v3 Authority Key Identifier:
                keyid:F3:D9:D9:0D:6C:3F:B0:10:1D:01:BB:B4:B1:01:56:99:04:47:96:72
                DirName:/ST=Moscow/L=Moscow/O=AO Aktiv-Soft/OU=Rutoken/CN=Rutoken TEST CA GOST
                serial:96:81:17:07:20:FD:D0:C9
            X509v3 Subject Key Identifier:
                79:4E:65:EA:AF:23:A1:22:1B:6B:6A:ED:C5:38:E1:10:40:0D:8E:26
    Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
    Signature Value:
        f2:57:6a:2f:26:92:00:d3:c3:2a:ba:50:2d:9c:95:43:a7:2f:
        34:d1:b3:b0:fe:86:74:11:ef:b3:c7:cf:6a:28:75:18:f3:07:
        e3:7b:ae:ed:2f:ab:86:3b:06:21:13:98:4a:c9:b4:87:7f:7b:
        2a:4f:84:7e:1b:09:4c:5e:90:71


Код в котором происходит ошибка


        public void DecryptTokenMessage(string itemEncryptedMessage)
        {
            // The module is already initialized to do GetInstance
            using (Pkcs11 pkcs11Module = new Pkcs11(RutokenPkcs11Interop.Settings.RutokenEcpDllDefaultPath, AppType.MultiThreaded))
            {
                Slot selectedSlot = null;
                var slots = pkcs11Module.GetSlotList(SlotsType.WithTokenPresent);

                selectedSlot = slots[0];
               
                var session = selectedSlot.OpenSession(SessionType.ReadWrite);
                session.Login(CKU.CKU_USER, "12345678");

               
                List<ObjectAttribute> privateKeyAttributesWithoutLabel = new List<ObjectAttribute>();
                privateKeyAttributesWithoutLabel.Add(new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_PRIVATE_KEY));
                privateKeyAttributesWithoutLabel.Add(new ObjectAttribute(CKA.CKA_KEY_TYPE, CKK.CKK_GOSTR3410));
                List<ObjectHandle> foundPrivateKeysWithoutLabelGost3410 = session.FindAllObjects(privateKeyAttributesWithoutLabel);
                Console.WriteLine("Total private Key found : " + foundPrivateKeysWithoutLabelGost3410.Count); //1
               
                List<ObjectAttribute> privateKeyAttributesDes = new List<ObjectAttribute>();
                privateKeyAttributesWithoutLabel.Add(new ObjectAttribute(CKA.CKA_TOKEN, true));
                privateKeyAttributesWithoutLabel.Add(new ObjectAttribute(CKA.CKA_KEY_TYPE, CKK.CKK_DES3));
                List<ObjectHandle> foundPrivateKeysDes = session.FindAllObjects(privateKeyAttributesDes);
                Console.WriteLine("Total private Key found : " + foundPrivateKeysDes.Count); //6

                var data = "hello";
                var data64 = Base64Converter.Base64Encode(data);
                var binData = Convert.FromBase64String(data64);

                byte[] encryptedData = null;

                try
                {
                    var mechanismKeyPairGen = new Mechanism(CKM.CKM_DES3_CBC, new byte[8]);
                    encryptedData = session.Encrypt(mechanismKeyPairGen, foundPrivateKeysDes.First(), binData);
                    var decrypted = session.Decrypt(mechanismKeyPairGen, foundPrivateKeysDes.First(), encryptedData);
                    var decryptedData = decrypted.ToArray();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    throw;
                }
            }
        }

Re: Ошибка декодирования для рутокена ГОСТ3410 - 256 C# библиотека

Добрый день!

Алгоритм СKM_DES3_CBC не применим для ГОСТ-ключей. Опишите  вашу задачу, постараемся помочь.

Re: Ошибка декодирования для рутокена ГОСТ3410 - 256 C# библиотека

Павел Анфимов пишет:

Добрый день!

Алгоритм СKM_DES3_CBC не применим для ГОСТ-ключей. Опишите  вашу задачу, постараемся помочь.


Задача следующая, приходит сообщение уже зашифрованное, которое нужно расшифровать имеющимся у меня токеном ГОСТ3410 - 256 с меткой цифровая подпись(80),  зашифровано с другой стороны сообщение таким же токеном, с метками цифровая подпись, шифрование (90)

Re: Ошибка декодирования для рутокена ГОСТ3410 - 256 C# библиотека

rxnsx,

Поделитесь, пожалуйста:
1) в каком формате сообщение получено,
2) каким ПО сформировано?
3) есть ли пример зашифрованного сообщения?

(2024-05-29 17:30:12 отредактировано rxnsx)

Re: Ошибка декодирования для рутокена ГОСТ3410 - 256 C# библиотека

Павел Анфимов пишет:

rxnsx,

Поделитесь, пожалуйста:
1) в каком формате сообщение получено,
2) каким ПО сформировано?
3) есть ли пример зашифрованного сообщения?


1)Сообщение получено в формате строки:
2) Скрипт на C++ (от котрого и хотим отказаться, чтобы всё было на c#)https://forum.rutoken.ru/uploads/images/2024/05/479187889e2fb4d8387525db9f26e6f7.png


3) Пример сообщения:

(Всё не влазит)

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

Re: Ошибка декодирования для рутокена ГОСТ3410 - 256 C# библиотека

rxnsx,

Ваш формат сообщения - CMS.
Увы, в библиотеке PCKS11ECP (и ее обертки на C#) нет механизмов зашифрования/расшифрования CMS, как есть в библиотеке pki-core на С++.

Пожалуйста, напишите, подробнее о вашем проекте и задаче на hotline@rutoken.ru.