Другое

Лучшая библиотека AES-GCM для .NET 4.8.1

Сравните BouncyCastle.Cryptography и Microsoft.Bcl.Cryptography для шифрования AES-GCM в .NET 4.8.1. Узнайте о производительности, соображениях безопасности и примерах реализации, чтобы выбрать лучшую библиотеку для вашего проекта.

Какая лучшая внешняя библиотека для шифрования и дешифрования AES-GCM в C# .NET 4.8.1?

Я работаю над проектом .NET 4.8.1 и мне нужно реализовать функциональность шифрования и дешифрования AES-GCM. Поскольку .NET 4.8.1 не имеет встроенной поддержки AES-GCM, я использую библиотеку BouncyCastle.Cryptography (версия 2.6.2) и успешно реализовал базовое шифрование/дешифрование.

Я ищу рекомендации по поводу того, является ли BouncyCastle.Cryptography лучшим выбором для этой цели, или существуют ли альтернативные библиотеки, которые могут предложить лучшую производительность, безопасность или удобство использования для реализации AES-GCM в .NET 4.8.1.

Для проектов .NET 4.8.1 BouncyCastle.Cryptography остается жизнеспособным вариантом реализации AES-GCM, но пакет совместимости Microsoft.Bcl.Cryptography предлагает лучшую производительность, так как он обеспечивает поддержку AES-GCM, аналогичную нативной, через .NET Framework. Выбор зависит от ваших конкретных потребностей: BouncyCastle для максимальной совместимости и функциональности, или Microsoft.Bcl.Cryptography для лучшей производительности и более легкой будущей миграции.

Содержание

Варианты AES-GCM для .NET 4.8.1

.NET Framework 4.8.1 не имеет встроенной поддержки режима AES-GCM, что означает необходимость использования внешних библиотек. На основе исследований существуют два основных варианта:

BouncyCastle.Cryptography

  • Версия: 2.6.2 (и более новые версии)
  • Статус: Полностью функционален и широко используется
  • Функциональность: Комплексная поддержка криптографии, выходящая за рамки AES-GCM
  • Интеграция: Требует добавления NuGet-пакета BouncyCastle.Cryptography

Microsoft.Bcl.Cryptography

  • Описание: Пакет совместимости, обеспечивающий поддержку AES-GCM для .NET Framework
  • Статус: Официальное решение Microsoft для добавления современных функций криптографии
  • Функциональность: Обеспечивает поддержку AES-GCM и ChaCha20Poly1305
  • Интеграция: Доступен в виде NuGet-пакета

Примечание: Хотя BouncyCastle традиционно был выбором для проектов .NET Framework, требующих AES-GCM, пакет Microsoft.Bcl.Cryptography предлагает более современный подход, который лучше соответствует API .NET Core/.NET 5+.


Сравнение производительности: BouncyCastle против Microsoft.Bcl.Cryptography

Производительность является критическим фактором при выборе между этими библиотеками. На основе результатов исследований:

Результаты тестов производительности

Согласно тестам производительности, существуют значительные различия:

Библиотека Операция Время (мс) для 10 байт Накладные расходы
BouncyCastle AES128-GCM Шифрование/Расшифрование 26.5225 320%
BouncyCastle AES256-GCM Шифрование/Расшифрование 26.3741 320%
.NET Native AES Различные режимы 1.4-2.6 мс 220%

Ключевые выводы о производительности

  1. Аппаратное ускорение: Исследования показывают, что BouncyCastle не использует аппаратное ускорение, в то время как Microsoft.Bcl.Cryptography обеспечивает лучшую производительность за счет использования базовых оптимизаций .NET.

  2. Пропускная способность: Подход Microsoft.Bcl.Cryptography обычно обеспечивает лучшую пропускную способность по сравнению с BouncyCastle, особенно для больших объемов данных.

  3. Использование памяти: BouncyCastle имеет более высокие накладные расходы на память из-за более универсального дизайна криптографического движка.

Как отмечает один из источников: “На самом деле, .NET Framework 4.8.1 поддерживает AesCgm через пакет совместимости Microsoft.Bcl.Cryptography. .NET Core, который включает все версии с .NET 5, поддерживает его нативно.”


Примеры реализации и фрагменты кода

Реализация с использованием BouncyCastle

Вот типичный шаблон реализации с использованием BouncyCastle:

csharp
#if NET48
var cipher = new GcmBlockCipher(new AesEngine());
cipher.Init(false, new AeadParameters(new KeyParameter(key), tag.Length * 8, iv, aad));
plaintextBytes = new byte[cipher.GetOutputSize(encrypt.Length)];
int len = cipher.ProcessBytes(encrypt, 0, encrypt.Length, plaintextBytes, 0);
cipher.DoFinal(plaintextBytes, len);
#else
using (var decryptor = new AesGcm(key))
    decryptor.Decrypt(iv, encrypt, tag, plaintextBytes, aad);
#endif

Реализация с использованием Microsoft.Bcl.Cryptography

Пакет Microsoft.Bcl.Cryptography предоставляет API, более похожие на реализации .NET Core/.NET 5+:

csharp
// Добавьте пакет Microsoft.Bcl.Cryptography
using System.Security.Cryptography;

// Реализация будет похожа на .NET Core AesGcm
// но может потребовать некоторых адаптаций для .NET Framework 4.8.1

Ключевые различия в реализации

  1. Сложность API: BouncyCastle требует более детальной обработки параметров и ручного управления буферами.

  2. Обслуживание кода: Реализации с использованием Microsoft.Bcl.Cryptography легче поддерживать и переносить на более новые версии .NET.

  3. Обработка ошибок: Реализации с использованием BouncyCastle часто требуют более явной обработки ошибок для криптографических операций.


Соображения по безопасности и лучшие практики

Соответствие FIPS

  • AesManaged: Не сертифицирован для соответствия FIPS
  • AesCryptoServiceProvider: Разработан для старых машин, может не соответствовать современным требованиям безопасности
  • AesCng: Поддерживает режим GCM, но специфичен для .NET Framework
  • BouncyCastle: В целом считается безопасным, но требует тщательной реализации

Лучшие практики криптографии

  1. Управление ключами: Обе библиотеки требуют правильных практик управления ключами
  2. Использование nonce: Всегда используйте уникальные nonce для каждой операции шифрования
  3. Теги аутентификации: Правильно проверяйте теги аутентификации при расшифровке
  4. Обработка ошибок: Реализуйте правильную обработку ошибок для криптографических сбоев

Как указано в исследованиях, “AES GCM (Galois Counter Mode) - это режим поточного шифра для AES. Он основан на режиме CTR, но преобразуется в поточный шифр. Это обеспечивает низкую задержку в процессе шифрования/расшифровки и быструю обработку.”

Рекомендации по безопасности

  • Для производственных систем учитывайте последствия безопасности для каждой библиотеки
  • BouncyCastle подвергался тщательной аудитории, но требует тщательной реализации
  • Microsoft.Bcl.Cryptography выигрывает от обновлений безопасности и обслуживания от Microsoft

Рекомендации по миграции на более новые версии .NET

Обеспечение будущей совместимости вашей реализации

Исследования настоятельно рекомендуют рассмотреть возможность миграции на более новые версии .NET:

“К настоящему времени .NET Framework 4.8.1 уже 3 года, и если нет очень, ОЧЕНЬ веской причины, следует рассмотреть миграцию на .NET 8 или, что еще лучше, на .NET 10.”

Преимущества миграции

  1. Нативная поддержка AES-GCM: .NET 5+ и .NET 8/10 имеют нативную поддержку AES-GCM
  2. Лучшая производительность: Нативные реализации обеспечивают лучшую производительность
  3. Сокращение зависимостей: Нет необходимости во внешних библиотеках
  4. Долгосрочная поддержка: Более новые версии .NET получают постоянные обновления безопасности

Путь миграции

  1. Краткосрочный: Используйте Microsoft.Bcl.Cryptography для лучшей производительности в .NET 4.8.1
  2. Среднесрочный: Планируйте миграцию на .NET 6 или 8 для частичной нативной поддержки
  3. Долгосрочный: Целитесь на .NET 8 или .NET 10 для полной нативной поддержки AES-GCM

Документация Microsoft подтверждает, что “Поддержка AES-GCM и ChaCha20Poly1305 доступна начиная с .NET 9 на iOS и tvOS 13.0 и более поздних версиях, а также во всех версиях MacCatalyst.”


Итоговые рекомендации и критерии принятия решений

Когда выбирать BouncyCastle.Cryptography

  • Вам нужны комплексные функции криптографии, выходящие за рамки AES-GCM
  • Ваш проект имеет строгие требования совместимости с существующими системами
  • Вам требуется максимальная гибкость в криптографических операциях
  • Вы работаете в среде, где существуют ограничения на пакеты Microsoft

Когда выбирать Microsoft.Bcl.Cryptography

  • Вы отдаете приоритет производительности и более легкому обслуживанию
  • Вы планируете миграцию на более новые версии .NET в будущем
  • Вам нужны API, совместимые с .NET Core/.NET 5+
  • Вы предпочитаете решения, поддерживаемые Microsoft

Матрица принятия решений

Фактор BouncyCastle Microsoft.Bcl.Cryptography
Производительность Ниже Выше
Будущая миграция Сложнее Проще
Набор функций Комплексный Фокусированный
Обслуживание Управляемое сообществом Поддерживаемое Microsoft
Кривая обучения Более крутая Более пологая

Итоговая рекомендация

Для большинства проектов .NET 4.8.1, требующих AES-GCM, Microsoft.Bcl.Cryptography является рекомендуемым выбором благодаря лучшей производительности, более простому пути миграции и поддержке Microsoft. Однако, если вам нужны обширные функции криптографии, выходящие за рамки AES-GCM, или у вас есть конкретные требования совместимости, BouncyCastle.Cryptography остается надежной альтернативой.

Учитывайте вашу долгосрочную дорожную карту: если миграция на .NET 8 или .NET 10 входит в ваши планы, инвестиции в подход Microsoft.Bcl.Cryptography сделают переход более плавным и поддерживаемым.

Источники

  1. Best external dll for AES-GCM encrypt/decrypt for C# .Net 4.8.1 - Stack Overflow
  2. .Net 4.8 AES GCM equivalent - Stack Overflow
  3. AES GCM with Bouncy Castle and C# - A Security Site
  4. Cross-platform cryptography in .NET - Microsoft Learn
  5. Investigating the performance of cryptographic primitives in Microsoft .NET and Bouncy Castle libraries
  6. AES Java Encryption Performance Benchmarks - Medium

Заключение

На основе комплексного анализа, вот ключевые выводы:

  1. Microsoft.Bcl.Cryptography в целом является лучшим выбором для AES-GCM в .NET 4.8.1 благодаря превосходной производительности и более легкой миграции на более новые версии .NET.

  2. BouncyCastle.Cryptography остается жизнеспособной альтернативой, если вам нужны комплексные функции криптографии или у вас есть конкретные требования совместимости.

  3. Производительность имеет значение: Результаты тестов показывают, что BouncyCastle может быть до 10 раз медленнее нативных реализаций для операций AES-GCM.

  4. Стратегия будущей миграции: Если вы планируете перейти на .NET 8 или .NET 10, Microsoft.Bcl.Cryptography обеспечит более плавный переход.

  5. Соображения по безопасности: Обе библиотеки безопасны при правильной реализации, но решение Microsoft выигрывает от постоянных обновлений безопасности и обслуживания.

Для вашего проекта .NET 4.8.1 я рекомендую начать с Microsoft.Bcl.Cryptography, если у вас нет конкретных требований, которые делают BouncyCastle лучшим выбором. Учитывайте вашу долгосрочную дорожную карту и выберите решение, которое лучше всего соответствует вашим планам миграции и потребностям в производительности.

Авторы
Проверено модерацией
Модерация