Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Шура_Газ  
#1 Оставлено : 26 октября 2016 г. 16:21:01(UTC)
Шура_Газ

Статус: Новичок

Группы: Участники
Зарегистрирован: 26.10.2016(UTC)
Сообщений: 1
Российская Федерация
Откуда: Москва

Есть задача зашифровать данные (envelope) с помощью сертификата с алгоритмом ГОСТ3410.

Мой метод:
Код:
private byte[] EnvelopeData(byte[] data, X509Certificate certificate)
{
    try
    {                          
        var generator = new CmsEnvelopedDataGenerator();
        generator.AddKeyTransRecipient(certificate);

        var envelopedData = generator.Generate(new CmsProcessableByteArray(data), CmsEnvelopedGenerator.DesEde3Cbc);
        return envelopedData.GetEncoded();
    }
    catch (Exception e)
    {
        Logger.Error(e);
        return null;
    }
}


Получаю исключение: Org.BouncyCastle.Cms.CmsException: can't find key generation algorithm. ---> Org.BouncyCastle.Security.SecurityUtilityException: Cipher 1.2.643.2.2.19 not recognised. in Org.BouncyCastle.Security.CipherUtilities.GetCipher(String algorithm) ...

Выполнив отладку по исходникам BouncyCastle, пришел к выводу, что исключение генерируется на этапе шифрования сессионного ключа, а именно - при поиске алгоритма шифрования 1.2.643.2.2.19.

Фрагмент метода GetCipher() с либы BC [CipherUtilites.cs]:
Код:
try
    {
        cipherAlgorithm = (CipherAlgorithm)Enums.GetEnumValue(typeof(CipherAlgorithm), algorithmName);
    }
    catch (ArgumentException)
    {
        throw new SecurityUtilityException("Cipher " + algorithm + " not recognised.");
    }

    switch (cipherAlgorithm)
    {
        case CipherAlgorithm.AES:
            blockCipher = new AesFastEngine();
            break;
        case CipherAlgorithm.ARC4:
            streamCipher = new RC4Engine();
            break;
        case CipherAlgorithm.BLOWFISH:
            blockCipher = new BlowfishEngine();
            break;
        case CipherAlgorithm.CAMELLIA:
            blockCipher = new CamelliaEngine();
            break;
        case CipherAlgorithm.CAST5:
            blockCipher = new Cast5Engine();
            break;
        case CipherAlgorithm.CAST6:
            blockCipher = new Cast6Engine();
            break;
        case CipherAlgorithm.DES:
            blockCipher = new DesEngine();
            break;
        case CipherAlgorithm.DESEDE:
            blockCipher = new DesEdeEngine();
            break;
        case CipherAlgorithm.ELGAMAL:
            asymBlockCipher = new ElGamalEngine();                  
            break;
        case CipherAlgorithm.GOST28147:
            blockCipher = new Gost28147Engine();
            break;
        case CipherAlgorithm.HC128:
            streamCipher = new HC128Engine();
            break;
        case CipherAlgorithm.HC256:
            streamCipher = new HC256Engine();
            break;
        case CipherAlgorithm.IDEA:
            blockCipher = new IdeaEngine();
            break;
        case CipherAlgorithm.NOEKEON:
            blockCipher = new NoekeonEngine();
            break;
        case CipherAlgorithm.PBEWITHSHAAND128BITRC4:
        case CipherAlgorithm.PBEWITHSHAAND40BITRC4:
            streamCipher = new RC4Engine();
            break;
        case CipherAlgorithm.RC2:
            blockCipher = new RC2Engine();
            break;
        case CipherAlgorithm.RC5:
            blockCipher = new RC532Engine();
            break;
        case CipherAlgorithm.RC5_64:
            blockCipher = new RC564Engine();
            break;
        case CipherAlgorithm.RC6:
            blockCipher = new RC6Engine();
            break;
        case CipherAlgorithm.RIJNDAEL:
            blockCipher = new RijndaelEngine();
            break;
        case CipherAlgorithm.RSA:
            asymBlockCipher = new RsaBlindedEngine();
            break;
        case CipherAlgorithm.SALSA20:
            streamCipher = new Salsa20Engine();
            break;
        case CipherAlgorithm.SEED:
            blockCipher = new SeedEngine();
            break;
        case CipherAlgorithm.SERPENT:
            blockCipher = new SerpentEngine();
            break;
        case CipherAlgorithm.SKIPJACK:
            blockCipher = new SkipjackEngine();
            break;
        case CipherAlgorithm.TEA:
            blockCipher = new TeaEngine();
            break;
        case CipherAlgorithm.THREEFISH_256:
            blockCipher = new ThreefishEngine(ThreefishEngine.BLOCKSIZE_256);
            break;
        case CipherAlgorithm.THREEFISH_512:
            blockCipher = new ThreefishEngine(ThreefishEngine.BLOCKSIZE_512);
            break;
        case CipherAlgorithm.THREEFISH_1024:
            blockCipher = new ThreefishEngine(ThreefishEngine.BLOCKSIZE_1024);
            break;
        case CipherAlgorithm.TNEPRES:
            blockCipher = new TnepresEngine();
            break;
        case CipherAlgorithm.TWOFISH:
            blockCipher = new TwofishEngine();
            break;
        case CipherAlgorithm.VMPC:
            streamCipher = new VmpcEngine();
            break;
        case CipherAlgorithm.VMPC_KSA3:
            streamCipher = new VmpcKsa3Engine();
            break;
        case CipherAlgorithm.XTEA:
            blockCipher = new XteaEngine();
            break;
        default:
            throw new SecurityUtilityException("Cipher " + algorithm + " not recognised.");
    }


Помогите, пожалуйста решить проблему. Возможно есть другие решения для Windows для шифрования данных таким способом.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.