Вопрос

Мне нужно сохранить пароли базы данных в конфигурационном файле.По очевидным причинам я хочу зашифровать их (желательно с помощью AES).Кто-нибудь знает реализацию Delphi, которую легко внедрить в существующий проект с > 10 000 строками исторически сложившегося (УХ!) исходного кода?

Разъяснение:Простота означает добавление объекта в проект, добавление макс.5 строк кода, в которых файл конфигурации считывается и с ним можно покончить.Это должно занять не более 15 минут.

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

Это было полезно?

Решение

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

Существует также множество доступных для использования в Google автономных реализаций (single-unit) - вопрос в том, какой из них вы доверяете, если только вы не готовы самостоятельно проверить корректность конкретной библиотеки.

Другие советы

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

Хранение зашифрованных паролей может быть опасным, потому что, если кто-то получит ваш "главный" пароль, он может получить пароли всех ваших пользователей.

Если вы решите использовать MD5, вы можете использовать MessageDigest_5.pas, который поставляется с Delphi (по крайней мере, он включен в мою копию Delphi 2007).Существуют также другие реализации с исходным кодом Delphi, которые вы можете выбрать.

Я думаю, что Turbopower LockBox - отличная библиотека для криптографии:

http://sourceforge.net/projects/tplockbox/

Я не знаю, слишком ли он велик для вашего использования, но он очень прост в использовании, и вы можете зашифровать строку 5 строками кода.Все это есть в примерах.

У Тондрея правильный подход.Вам никогда не следует хранить пароль, используя обратимый шифр.Как было правильно указано, если ваш "главный" ключ когда-либо был скомпрометирован, то скомпрометирована вся система.Использование необратимого хэша, такого как MD5, намного безопаснее, и вы можете сохранить хэшированное значение в виде открытого текста.Просто хэшируйте введенный пароль, а затем сравните его с сохраненным хэшем.

Я всегда пользовался Turbopower Lockbox.Он хорошо работает и очень прост в использовании.На самом деле я использую его точно для того же, сохраняя пароль в текстовом файле конфигурации.

http://sourceforge.net/projects/tplockbox/

TurboPower сейфа 3 (http://lockbox.seanbdurkin.id.au/) используется с автоматической засолки.Я не рекомендую использовать Barton's DCPcrypt, потому что капельницы не соленые.В некоторых ситуациях это очень серьезный недостаток безопасности.

В отличие от более раннего комментария, реализация AES в LB3 полностью соответствует стандарту.

Я использовал это библиотека, очень быстро добавляется.Но вики - шоу еще несколько решений.

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

То, что вам нужно, - это односторонний хэш.

Просто напоминаю.

Если вам не нужно взаимодействовать с другими криптографическими библиотеками, то DCP или LockBox справятся с этой задачей.

НО

если вам нужно, чтобы он полностью соответствовал спецификациям rinjdael, забудьте о бесплатных компонентах, они в большинстве случаев "паршивые".

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

Что вам следует сделать, так это сохранить хэши предварительно выбранного (и секретного) значения соли + пароль.Т.е. объедините соль и пароль, хэшируйте результат и сохраните этот хэш.При аутентификации сделайте то же самое - объедините ваше значение salt и предоставленный пользователем пароль, хэш, затем проверьте на равенство.Это делает атаки на радужные таблицы невозможными.

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

Я рекомендую использовать какой-нибудь вид соли.Не храните crypt(пароль) в конфигурационном файле, а вместо этого храните crypt (соль + пароль).В качестве "соли" вы можете использовать что-то, что требуется для открытия базы данных, например.имя_бд+имя_пользователя.Для функции crypt вы можете использовать какой-нибудь хорошо известный алгоритм, такой как AES, Idea, DES, или что-то столь же простое, как xoring каждого байта байтом из какой-либо другой строки, эта строка будет вашим ключом.Чтобы сделать ее более сложной для решения, вы можете использовать несколько случайных байтов и сохранить их.

Итак, чтобы хранить:

  1. init_str := 5 случайных байт
  2. new_password := соль + пароль // соль:= имя_бд + имя_пользователя
  3. зашифрованный пароль = xor_bytes(init_str + new_password, 'моя ключевая фраза')
  4. зашифрованный пароль := init_str + зашифрованный пароль
  5. сохраните crypted_password в конфигурации, так как это будут байты, которые вы можете преобразовать в шестнадцатеричное значение или в base64

И для подключения:

  1. разделите данные, считанные из конфигурации, на init_str и crypted_password
  2. new_password = xor_bytes(инициализация + зашифрованный пароль, 'моя ключевая фраза')
  3. пароль:= удалить (db_name + user_name) из new_password

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

Пара решений:

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

Вам также нужно сохранить его в месте, доступ к которому есть только у текущего пользователя.

В принципе, есть два способа сделать это:

  1. Храните его в Зашифрованный файл EFS.
  2. Храните его в защищенное локальное хранилище.

Internet Explorer использует 2.Но если вы можете получить локальный доступ, вы можете расшифровать оба 1.и 2.если у вас есть правильный мастер-ключ и алгоритм (например, iepv можно получить пароли в Internet Explorer).

Итак:
Если можете, избегайте хранения паролей.
Сначала поищите альтернативные варианты (например, проверку подлинности Windows, службы каталогов и т.д.).

--джерун

Простая, но для большинства приложений достаточно мощная система представлена в этой демо-версии Embarcadero:https://edn.embarcadero.com/article/28325

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top