Шифрование для начинающих, вопрос «Мастер-пароль» - PullRequest
1 голос
/ 11 июля 2011

Я пишу программу, которая, используя Rijndael, будет шифровать и дешифровать файлы / папки, используя выбранный пользователем пароль. В настоящее время, когда пользователь хочет что-то зашифровать, он должен ввести пароль, этот пароль используется для шифрования, а когда пользователь готов к нему, расшифровать файл / папку.

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

Теперь, поскольку подобные программы подвержены множеству различных видов атак, как я могу безопасно хранить «главный пароль» пользователя, чтобы кто-то не смог его заполучить? Хранение его в программе в виде простого текста, очевидно, не очень хорошая идея, поэтому я мог бы зашифровать / расшифровать пароль с помощью другого пароля, выбранного мной и сохраненного в программе.

Однако, опять же, если кто-то получит доступ к паролю, выбранному мной для шифрования / дешифрования мастер-пароля, он сможет дешифровать мастер-пароль, и опять же, это не будет хорошо.

SO! Как программы безопасно это делают?

В настоящее время я сохраняю «мастер-пароль», зашифровывая его, используя свой собственный, выбранный пароль, и сохраняя его в настройках, определяемых пользователем. Если вы считаете, что это не очень хорошая идея, скажите, пожалуйста, почему и что бы вы изменили в процессе, который я в настоящее время реализовал?

Спасибо!

Ответы [ 5 ]

3 голосов
/ 11 июля 2011

Просмотрите это: http://www.redkestrel.co.uk/Articles/StoringSecrets.html

Отличная статья о ваших возможностях.

Тем не менее, я думаю, что ваш сценарий использования уже довольно хорошо изначально покрыт самими окнами через EFS .... http://technet.microsoft.com/en-us/library/cc700811.aspx

Просто хотел добавить одну вещь:Принципиально невозможно защитить «секрет» от тех, кто имеет физический доступ к машине.Это было проверено время и снова даже для жестких дисков, которые поддерживают собственные схемы шифрования.

Все, что вы можете сделать, это сделать это несколько сложнодля тех, кто понятия не имеет, что они делают.

Основная проблема заключается в том, что что-то должно иметь доступ к ключу дешифрования.Будь то BIOS компьютера, прошивка жесткого диска или даже если он хранится в какой-то папке, скрытой через DPAPI.Это означает, что единственный эффективный способ - заставить пользователя предоставить необходимые учетные данные, когда пришло время для шифрования / дешифрования файлов.

Если эти полномочия достаточно короткие, то можно использовать грубую силу, чтобы добраться до них.В настоящее время рекомендуется использовать минимальную длину ключа 128 бит или более.Конечно, если вы ограничены в использовании обычных букв, то количество проверяемых битов резко уменьшается.И если вы допустите значения, подобные тем, которые встречаются в словарях для взлома, тогда время для взлома будет уменьшаться.

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

Черт возьми, для действительно параноика, есть устройства, которые могут определять то, что вы печатали, основываясь только на звуке, который ваша клавиатура издает при вводе.Для других ОЗУ поддерживает состояние в течение определенного периода времени даже после выключения машины ...

Итак, что все это значит?Во-первых, вы должны попросить их предоставить учетные данные для каждого запроса шифрования / дешифрования.Во-вторых, они должны быть уверены, что кейлоггеры не установлены.В-третьих, учетные данные не могут быть легко запоминающимися.В-четвертых, компьютер не может находиться в физически доступном месте.В-пятых, даже клавиатура должна быть защищена ...

Все это создает ситуацию, в которой говорится, что если она находится на компьютере, ее может получить кто-то другой.

0 голосов
/ 11 июля 2011

Знаете ли вы, почему веб-сайты не сообщают вам ваш пароль, когда вы его потеряли, и просят новый?
Потому что они его не знают.Да, они этого не знают.Они хэшируют это и хэшируют это хорошо, поэтому они могут проверять только хэш вашего входного пароля против того, который в базе данных

Почему все это?
Потому что они не могут хранить его безопасно.
Они не могут безопасно его зашифровать.

Это аналогичный случай.
Лучший способ - не использовать мастер-пароль.

Когда вы шифруете файл, запрашиваете пароль и шифруете с помощью хэша пароля.
При расшифровке do запрашивает пароль и пытается расшифровать.
Если это не удается, значит, это неправильно.
Если все в порядке, тогда это правильно.

Можно добавить некоторые (более короткие) фиктивные данные перед содержимым файла, которые можно использовать для проверки ключа.


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

Редактировать : Я сожалею об обескураживающей природе этого ответа, но то, что вам нужно сделать, действительно невозможно.

0 голосов
/ 11 июля 2011

Не сохраняйте пароль пользователя, возьмите хеш и обязательно соль . Используйте хэш для шифрования и дешифрования файлов. Остерегайтесь, если пользователь забудет свой пароль, вы не сможете восстановить его для него, однако вы все равно можете расшифровать файлы для них. Это также означает, что ваше приложение будет уязвимо для того, чтобы кто-то взломал или исправил его, чтобы заставить его расшифровывать файлы без предоставления пароля.

Если метод шифрования является стандартным, документированным, очевидным и / или общеизвестным, то чтобы хакеры не могли просто прочитать хеш и использовать его для расшифровки самих файлов, вы можете сделать это: использовать сохраненный хеш вместе с некоторой другой информацией создать новый хеш, который вы затем используете для шифрования / дешифрования файлов и никогда не сохраняете. Другая информация может быть составлена ​​из размера файла, даты создания и т. Д. Хакеры могут использовать эту информацию, но им придется взломать / проанализировать ваше приложение, прежде чем они узнают, что оно им нужно. Технически это безопасность через неизвестность, так как эти ключи скрыты в простом виде.

0 голосов
/ 11 июля 2011

Я буду откровенен об этом. Оставьте охрану экспертам по безопасности. Безопасность нелегка, и ее очень очень трудно получить право, даже для людей, которые предположительно являются экспертами в этой области.

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

0 голосов
/ 11 июля 2011

Рассмотрите возможность сохранения своего мастер-пароля в памяти, используя SecureString Class.

...