Как можно безопасно хранить ключ AES в Windows с помощью .Net (C #)? - PullRequest
10 голосов
/ 30 сентября 2010

Я искал способ сохранить данный ключ AES, чтобы его нельзя было извлечь, но он все еще может быть использован для шифрования и дешифрования (с использованием C #).Я думаю, что эквивалент для хранения асимметричного ключа можно найти здесь , но я ищу что-то, что можно использовать для симметричного шифрования.Существует ли он в управляемой форме (до .Net 4)?

Ответы [ 5 ]

5 голосов
/ 04 октября 2010

Windows DPAPI ( документация Win32 ) и его оболочка .NET ( ProtectedData Class ) не хранит никаких данных. Вместо этого Windows DPAPI возвращает значение криптографического шифра, которое вы можете хранить где угодно, в том числе на нескольких серверах.

На моем рабочем месте мы используем DPAPI для генерации шифра для ключа AES, который затем сохраняем в Реестре.

Единственная цель Windows DPAPI состоит в том, чтобы зашифровать данные таким образом, чтобы расшифровать их могла только определенная учетная запись пользователя или машина без необходимости хранить пароль.

.NET ProtectedData класс находится в .NET Framework с 2.0.

Я бы остановился на Windows DPAPI над сторонним продуктом, поскольку он зрелый, стабильный, бесплатный, простой в использовании и полностью поддерживается в .NET.

2 голосов
/ 30 сентября 2010

В зависимости от того, против кого вы защищаетесь, вы можете использовать ProtectedData класс .

1 голос
/ 30 сентября 2010

@ SLaks прав, если он у вас в памяти, к нему можно получить доступ. Вы можете сделать это более сложным, но это всегда будет возможно.

Вот почему серьезные люди разряжают крипто.

Одной из опций является смарт-карта . Это позволяет перемещать данные на карту и получать результаты обратно, но не позволяет получить доступ к ключевому материалу. Его нет в памяти компьютера, поэтому он не может быть пропущен.

У Росса Андерсона есть хорошая статья, Программирование компьютера сатаны о таких вещах. Из аннотации:

Проблема в присутствии противника, кто может изменять сообщения по желанию. По сути, наш задача состоит в том, чтобы запрограммировать компьютер, который дает ответы которые тонко и злонамеренно неправильно в самый неудобный момент.

Даже если вас не беспокоит физическая память и только жесткий диск и источник, вам все равно следует опасаться виртуальной памяти. Если вы не будете осторожны (или используете тщательно написанный сервис), вы можете получить незашифрованные ключи в вашем файле подкачки. Вот еще одна ссылка, которая обсуждает проблему. Не то, чтобы вы хотели это сделать, но это делает проблему очевидной: Шифрование виртуальной памяти . Я полагаю, что для этой цели существуют системные вызовы, чтобы пометить память как неподключаемую, но я не могу найти ссылку.

0 голосов
/ 30 сентября 2010

Чтобы продолжить тенденцию разгрузки криптографии, если вы знаете аппаратное обеспечение всего вашего кластера, вы можете получить ключ в TPM , если таковой имеется на материнской плате, это просто еще один вариант:решения для USB или смарт-карт.

0 голосов
/ 30 сентября 2010

Даже для асимметричных данных, если ключ хранится на компьютере и используется позже, он извлекается и дешифруется перед использованием.И в этот момент опытный хакер может извлечь его (захватив компьютерную память и изучив ее).Это не тривиально, но все же возможно.

В общем, для решения вашей проблемы предлагаются USB-криптотокены и криптокарты.Эти аппаратные устройства имеют собственную память для хранения как симметричных, так и асимметричных ключей, и у них есть процессор для выполнения криптографических операций с использованием этих ключей.Ключ никогда не покидает устройство, и практически невозможно принудительно извлечь его из устройства (существуют некоторые аппаратные атаки, такие как сканирование памяти с помощью микроскопа, но они намного сложнее, чем программная атака на компьютер).

Так что, если ваш ключ действительно ценный, используйте криптокен USB.Цена устройства очень умеренная - около $ 70-100 за единицу, и есть несколько поставщиков, которые предлагают такие устройства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...