Мне нужно хранить пароли базы данных в файле конфигурации. По понятным причинам я хочу их зашифровать (желательно с помощью AES). Кто-нибудь знает реализацию Delphi, которую легко внедрить в существующий проект с> 10 000 строк исторически сложившегося (URGH!) Исходного кода?
Уточнение: «Легко» означает добавление блока в проект, добавление макс. 5 строк кода, в которых читается файл конфигурации, и все готово. Не должно занимать более 15 минут.
Еще одно пояснение: пароль нужен для создания подключения к базе данных, а не для поддержки схемы управления пользователями для приложения. Так что использование хешей не помогает. Движок db проверяет, действителен ли пароль, а не приложение.
Если вы используете Windows, вы можете проверить эту статью: [Безопасный способ сохранить пароль в Windows] [1] [1]: stackoverflow.com/questions/13145112/…





Я использовал этот библиотека, очень быстро добавляю. Но вики-шоу еще несколько решений.
Даже если вы зашифруете, мне кажется, что и ваш ключ дешифрования, и зашифрованный пароль будут находиться в вашем исполняемом файле, что означает, что это никоим образом не является просто безопасностью посредством неизвестности. Кто угодно может взять ключ дешифрования и зашифрованные пароли и сгенерировать необработанные пароли.
Вам нужен односторонний хеш.
Односторонний хеш идеален, но нет возможности его расшифровать, чтобы использовать снова. Похоже, ему нужно прочитать пароль, чтобы его приложение могло подключиться к базе данных. Хеши работают только в том случае, если вы хотите подтвердить, что у вас есть тот же пароль, который вы сохранили ранее.
Хеширование не вариант, мне нужен пароль, чтобы установить соединение с базой данных. Я вообще не контролирую БД.
Но Ник прав. Если вы сохраняете ключ в своем приложении, вы только (очень) немного усложняете расшифровку пароля. Вам также необходимо защитить ключ.
Я поддерживаю рекомендацию Дэвида Бартона Библиотека DCPCrypt. Я успешно использовал его в нескольких проектах, и это займет не более 15 минут после того, как вы прочитаете примеры использования. Он использует лицензию MIT, поэтому вы можете свободно использовать его в коммерческих проектах и в других целях. DCPCrypt реализует ряд алгоритмов, в том числе Rijndael, который является AES.
Также существует множество автономных (одноуровневых) реализаций googlable - вопрос в том, какой из них вы доверяете, если только вы не готовы самостоятельно проверить исправность конкретной библиотеки.
DCPCrypt великолепен. Я использую его во многих местах.
Для чего стоит (в таком старом потоке) я только что установил DCPcrypt и работает фантастически.
Ссылка не найдена, пожалуйста, обновите ее
Ник, конечно, прав - я просто предполагаю, что вы знаете, что делаете, когда говорите, что хотите потратить все 15 минут на внедрение решения безопасности. Библиотека DCPCrypt также реализует ряд алгоритмов хеширования, если вы решите пойти по этому (лучшему) маршруту.
Думаю, Turbopower LockBox - отличная библиотека для криптографии:
http://sourceforge.net/projects/tplockbox/
Я не знаю, слишком ли он велик для вашего использования, но он очень прост в использовании, и вы можете зашифровать строку с помощью 5 строк кода. Это все в примерах.
Он старый и не обслуживается. Он не поддерживает некоторые необходимые улучшения (например, блочные шифры, большие ключи). Есть попытки обновить его, но сейчас это не та библиотека, которую нужно использовать.
Для типичных целей аутентификации вам не нужно хранить пароли, вам нужно только проверить, правильный ли пароль, введенный пользователем. Если это ваш случай, вы можете просто сохранить хеш-подпись (например, MD5) и сравнить ее с подписью введенного пароля. Если две подписи совпадают, введенный пароль правильный.
Хранение зашифрованных паролей может быть опасным, потому что, если кто-то получит ваш «главный» пароль, он сможет восстановить пароли всех ваших пользователей.
Если вы решите использовать MD5, вы можете использовать MessageDigest_5.pas, который поставляется с Delphi (по крайней мере, он включен в мою копию Delphi 2007). Есть также другие реализации с исходным кодом Delphi, из которых вы можете выбрать.
+1 за упоминание hashing и опасностей хранения паролей. Никогда не храните пароли (даже не думайте их шифровать!).
Если он обсуждает сохранение пароля для соединений с базой данных, применяется ли хеширование? Для подключения к базе данных вам понадобится действующий пароль. Или вы предлагаете разослать главный пароль базы данных всем своим пользователям, чтобы они могли ввести их?
У Тандрея правильный подход. Никогда не следует хранить пароль с помощью обратимого шифра. Как было правильно указано, если ваш «главный» ключ был когда-либо скомпрометирован, вся система будет скомпрометирована. Использование необратимого хеша, такого как MD5, намного безопаснее, и вы можете сохранить хешированное значение в виде открытого текста. Просто хешируйте введенный пароль, а затем сравните его с сохраненным хешем.
Хеширование не вариант, мне нужен пароль, чтобы установить соединение с базой данных. Я вообще не контролирую БД.
Просто напоминание.
Если вам не нужно взаимодействовать с другими библиотеками шифрования, то DCP или LockBox сделают эту работу.
НО
Если вам нужно, чтобы он полностью соответствовал спецификациям rinjdael, забудьте о бесплатных компонентах, они в большинстве случаев «паршивые».
Я всегда пользуюсь Turbopower Lockbox. Он хорошо работает и очень прост в использовании. На самом деле я использую его для того же самого, сохраняя пароль в текстовом файле конфигурации.
Как указывали другие, для целей аутентификации вам следует избегать хранения паролей с использованием обратимого шифрования, то есть вам следует хранить только хэш пароля и проверять хеш пароля, предоставленного пользователем, по хешу, который вы сохранили. Однако у этого подхода есть недостаток: он уязвим для атак радужный стол, если злоумышленник завладеет вашей базой данных хранилища паролей.
Что вам следует сделать, так это сохранить хеши предварительно выбранного (и секретного) значения соли + пароль. То есть объединить соль и пароль, хэшировать результат и сохранить этот хеш. При аутентификации сделайте то же самое - объедините значение соли и введенный пользователем пароль, хэш, затем проверьте равенство. Это делает невозможными атаки на радужную таблицу.
Конечно, если пользователь отправляет пароли по сети (например, если вы работаете в веб-приложении или приложении клиент-сервер), вам не следует отправлять пароль открытым текстом, поэтому вместо хранения хеша (соль + пароль), вы должны хранить и проверять его на соответствие хэшу (соль + хеш (пароль)), и пусть ваш клиент предварительно хеширует введенный пользователем пароль и отправляет его по сети. Это также защищает пароль вашего пользователя, если пользователь (как и многие другие) повторно использует один и тот же пароль для нескольких целей.
Хеширование не вариант, мне нужен пароль, чтобы установить соединение с базой данных. Я вообще не контролирую БД. Но спасибо за подробное объяснение!
Я рекомендую использовать какую-нибудь соль. Не храните крипту (пароль) в файле конфигурации, а храните крипту этого хранилища (соль + пароль). В качестве «соли» вы можете использовать то, что требуется для открытия базы данных, например. db_name + user_name. Для функции шифрования вы можете использовать какой-нибудь хорошо известный алгоритм, как AES, Idea, DES, или что-то более простое, например, скоринг каждого байта с байтом из какой-то другой строки, эта строка будет вашим ключом. Чтобы сделать решение более разным, вы можете использовать несколько случайных байтов и хранить их.
Итак, чтобы хранить:
И для подключения:
TurboPower LockBox 3 (http://lockbox.seanbdurkin.id.au/) использует автоматическое соление. Я не рекомендую DCPCrypt Бартона, потому что IV не соленые. В некоторых ситуациях это очень серьезный недостаток защиты.
Вопреки предыдущему комментарию, реализация AES в LB3 полностью соответствует стандарту.
1) Стабильна ли версия 3? 2) Лицензия Mozilla была изменена на GPL3, и мне интересно, имеете ли вы на это право. Многие коммерческие разработчики предпочитают держаться подальше от библиотек GPL.
1) Статус можно посмотреть на сайте; 2) Нет, это не так. Лицензии на одну из двух библиотек LockBox никогда не менялись. LockBox 2 выпущен под лицензией MPL; LockBox 3 выпущен под LGPL3 (не GPL). LB2 и LB3 не имеют общего исходного кода. Ни один коммерческий разработчик никогда не откажется от LGPL - это было бы просто нерационально.
Пара решений:
Вам нужно сохранить его в месте, где доступ есть только у текущего пользователя.
В основном это можно сделать двумя способами:
Internet Explorer использует 2. Но если вы можете получить локальный доступ, вы можете расшифровать как 1., так и 2., если у вас есть правильный главный ключ и алгоритм (например, iepv может получить пароли Internet Explorer).
Итак:
По возможности не храните пароли.
Сначала поищите альтернативы (например, проверка подлинности Windows, службы каталогов и т. д.).
- Джерун
Демо Embarcadero дает простую, но достаточно сильную систему для большинства приложений: https://edn.embarcadero.com/article/28325
Какая база данных? В настоящее время существуют более эффективные способы подключения, чем использование простых старых пар пользователь / пароль.