Можно ли шифровать данные в режиме AES (256 бит) GCM в .net framework 4.7?

ссылка MSDN предоставляет ссылки на конкретные классы AES:

  • Система.Безопасность.Криптография.AesCng
  • System.Security.Cryptography.AesCryptoServiceProvider
  • Система.Безопасность.Криптография.AesManaged

Однако AesCryptoServiceProvider предназначен для старых компьютеров, а AesManaged не сертифицирован для FIPS. Так что единственный вариант это AesCng. AesCng имеет свойство Mode, которое принимает только CBC, ECB, OFB, CFB, CTS, но не GCM.

  1. Поддерживается ли AES GCM в этой среде?
  2. Если да, то есть пример?
  3. Если нет, то какие у меня варианты?

person Raghu    schedule 06.09.2017    source источник
comment
Нет, нет и используйте BouncyCastle   -  person Luke Joshua Park    schedule 06.09.2017
comment
Это мой единственный вариант?   -  person Raghu    schedule 06.09.2017
comment
Очевидно, что BouncyCastle — не единственная реализация AES, поддерживающая режим GCM, так что нет. Но он самый распространенный.   -  person Luke Joshua Park    schedule 06.09.2017
comment
Другой вариант — P/Invoke в BCryptEncrypt вручную.   -  person bartonjs    schedule 06.09.2017
comment
Обратите внимание, что это есть в .NET Core (начиная с версии 2.1.3): github.com/dotnet/corefx/blob/master/src/   -  person Timo    schedule 17.09.2018
comment
@Timo Кажется, не для релиза, там написано, что это будет в 3.0 здесь ( запрос функции github для GCM/CCM)   -  person Maarten Bodewes    schedule 08.01.2019


Ответы (1)


Этот ответ отражает комментарии Люка Парка, Бартонжа, Тимо и Маартена Бодевеса выше.

Одним из вариантов является использование библиотеки Bouncycastle C#, которая имеет собственную самодостаточную реализацию AES в качестве а также режим GCM. Посмотрите исходный код классов GCMBlockCipher, AesEngine и AEADParameters.

Другой вариант — использовать P/Invoke для ручного вызова BCryptEncrypt.

Наконец, обратите внимание, что .NET Core будет поддерживаться, начиная с версии 3.0. Исходный код уже доступен в github.

person Community    schedule 08.01.2019
comment
В качестве обновления от января 2021 г. документация для класс AesGcm теперь доступен в MSDN и поддерживается в .Net 5.0 и .Net Core 3.0. Это часть .Net Standard 2.1. - person reirab; 20.01.2021