Шифрование файлов с помощью AES, Шифрование ключа с помощью RSA - Я на правильном пути? - PullRequest
2 голосов
/ 13 мая 2010

Обзор: Я пытаюсь разработать приложение, которое будет шифровать файлы для безопасной отправки через Snail Mail (БОЛЬШИЕ наборы данных). Я планирую использовать шифрование AES / RijndaelManaged из .Net для первоначального шифрования файлов, используя случайно сгенерированный ключ, используя RNGCryptoServiceProvider. Затем я шифрую этот случайный ключ AES с помощью открытого ключа RSA. Получатель данных является единственным, кто имеет секретный ключ RSA для его расшифровки.

Мой вопрос: Это правильный способ сделать что-то подобное? Если это так, безопасно ли отправлять этот ключ с шифрованием RSA вместе с данными, поскольку для его расшифровки требуется закрытый ключ?

РЕДАКТИРОВАТЬ - Согласно Ответам, это действительно правильный путь.

РЕДАКТИРОВАТЬ - Спасибо за ответы. И вот что я действительно хочу знать:
Когда конечный пользователь генерирует свою пару открытого / секретного ключей, как лучше всего сохранить закрытый ключ? Я не хочу, чтобы он был доступен только с одного компьютера, поэтому я стараюсь не использовать хранилище ключей пользователя. Но MSDN говорит, что сохранять ключ в файл небезопасно, так как еще это можно сделать?

Ответы [ 4 ]

3 голосов
/ 13 мая 2010

Используйте PGP , если нет веских причин не делать этого. PGP является открытым и вездесущим стандартом для гибридной криптографии, обычно используемой в электронной почте. Существует множество реализаций PGP. Единственный известный мне .NET - это библиотека C # крипто-проекта *1003* BouncyCastle. PGP фактически предоставляет расширенный набор функций, которые вы описываете; например, PGP может также подписывать сообщения цифровой подписью.

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

Пожалуйста, не переопределяйте PGP, если он делает то, что вы хотите. PGP довольно широко поддерживается. Кроме того, простые смертные, такие как я (и, вероятно, вы сами), вряд ли имеют шанс сделать все правильно.

3 голосов
/ 13 мая 2010

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

2 голосов
/ 13 мая 2010

Это по сути то, что делает SSL. RSA используется для аутентификации и обмена ключами симметричного сеансового ключа (например, AES), который затем используется для тела сообщения.

0 голосов
/ 25 мая 2010

Традиционный способ сохранить закрытый ключ (используемый в GPG / PGP / PKCS # 1 / PKCS # 8) - это защитить его паролем с помощью надежной парольной фразы и вставить в файл. Большинство инструментов управления хранилищем ключей имеют способ экспортировать ключи в формате PKCS # 1 / PKCS # 8 - вы генерируете ключ на одном компьютере, экспортируете его с паролем и импортируете его на другом компьютере; ключ находится только вне хранилища ключей с целью передачи его между компьютерами.

...