КриптоПро .NET
Search Results for

    Показать/Скрыть содержание

    Работа с контейнерами и провайдерами

    Открытие контейнера ключа

    using (var provider =
        new Gost3410_2012_256CryptoServiceProvider(
            new CpCspParameters(
                80,
                "",
                "\\\\.\\HDIMAGE\\G2012256")))
    {
    
    }
    

    Создание ключевого контейнера (требует гамму)

    using (var provider =
        new Gost3410_2012_256CryptoServiceProvider(
            new CpCspParameters()
            {
                Flags = CspProviderFlags.NoPrompt,
                KeyContainerName = $"\\\\.\\HDImage\\0000_test_{Guid.NewGuid()}",
                ProviderName = "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider",
                ProviderType = 80,
                KeyPassword = new SecureString(),
                KeyNumber = keyNumber
            }))
    {
    
    }        
    

    Выставление OID

    https://github.com/CryptoPro/corefx/issues/45

    Провайдер для 2817 теперь можно задавать через новый конструктор

    public Gost28147CryptoServiceProvider(CpCspParameters parameters)
    

    Выбор CipherOid для Gost28147CryptoServiceProvider, Gost3410_XXXXCryptoServiceProvider производится через одноименное свойство.

    Список CipherOid - https://cpdn.cryptopro.ru/content/csp40/html/group___pro_c_s_p_ex_CP_PARAM_OIDS.html


    Ниже оригинальные комментарии. Логика должна быть аналогичной КриптоПро.NET.

    Для установки желаемого OID транспортного ключа необходимо выставить его через свойство CipherOid в объекте открытого ключа

    Пример установки OID для транспортного ключа:

    var gost = (Gost3410_2012_256CryptoServiceProvider)cert.PrivateKey;
    var gostRes = (Gost3410_2012_256CryptoServiceProvider)certRes.PrivateKey;      
          
    var gostPk = (Gost3410_2012_256CryptoServiceProvider)cert.PublicKey.Key;
    var gostResPk = (Gost3410_2012_256CryptoServiceProvider)certRes.PublicKey.Key;
    
    gostPk.CipherOid = "1.2.643.2.2.31.1";
    gostResPk.CipherOid = "1.2.643.2.2.31.1";
    
    var agree = (GostSharedSecretCryptoServiceProvider)gost.CreateAgree(gostResPk.ExportParameters(false));
    byte[] wrappedKeyBytesArray = agree.Wrap(symmetric, GostKeyWrapMethod.CryptoProKeyWrap);
    
    var agreeRes = (GostSharedSecretCryptoServiceProvider)gostRes.CreateAgree(gostPk.ExportParameters(false));
    var key = agreeRes.Unwrap(wrappedKeyBytesArray, GostKeyWrapMethod.CryptoProKeyWrap);
    

    ps. При использовании метода ExportParameters(false) для закрытого ключа может не заполнится поле EncryptionParamSet возвращаемого объекта Gost3410Parameters и тогда будет использоваться Oid по умолчанию, вне зависимости от проставленного OID в закрытом ключе. Можно исправить руками, выставив в Gost3410Parameters.EncryptionParamSet нужное значение:

    var paramsPk = gostRes.ExportParameters(false);
    paramsPk.EncryptionParamSet = gostResPk.CipherOid;            
    var agree = (GostSharedSecretCryptoServiceProvider)gost.CreateAgree(paramsPk);
    
    В этом разделе
    Наверх Generated by DocFX