Как использовать CNG (или набор инструкций с поддержкой AES-NI) в .NET? - PullRequest
14 голосов
/ 15 ноября 2011

I В настоящее время выполняю большое количество шифрования / дешифрования текста в c # с использованием AES.

При использовании чисто программной системы может потребоваться довольно много времени на процессор для приличного количества наборов данных, которые необходимо расшифровать. Я знаю, что Intel выпустила свой набор инструкций AES-NI, а AMD - аналогичное.

Я использую .NET 4.0, я знаю, что Windows CNG Framework использует эти наборы инструкций, но не похоже, что AesManaged в мире .NET делает то же самое.

Существует фантастический проект " CLR Security ", который делает шлюз из .NET 3.5 в Windows CNG, однако он не поддерживался в течение года, и я бы предпочел этого не делать (если это возможно) Запрыгнуть на умирающий проект.

В .NET 4 есть класс CNGProvider, но, похоже, нет достаточной документации, чтобы собрать воедино рабочую расшифровку из него для AES.

Кто-нибудь имеет опыт работы с темой, которую он мог бы указать мне в правильном направлении о том, как реализовать AES-NI в чистой среде .NET, используя готовые классы, без необходимости выполнять p / invoke непосредственно из c #? (Было бы хорошо, если бы это делал класс-оболочка, если он поддерживается).

1 Ответ

15 голосов
/ 16 ноября 2011

А как насчет AesCryptoServiceProvider? Там написано, что используется CAPI, и так надеюсь, СПГ, если таковой имеется. - Rup

Этот комментарий очень помог, после некоторых копаний похоже, что AesCryptoServiceProvider будет использовать AES-NI, если он доступен, я не вижу никакой «официальной» документации от Microsoft по этому вопросу, однако при выполнении простых тестов синхронизации разница в ~ 15 раз быстрее либо сам API оптимизирован в массе (что для 15-кратного увеличения - довольно приятная оптимизация), либо он использует набор команд AES-NI.

К сожалению, у меня нет бокса без AES-NI для тестирования, но если я его получу, я обновлю эту ветку с результатами.

Так что я вполне уверен, что это API для AES-NI, но не могу гарантировать без дальнейшего тестирования.

...