Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ 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 Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.