Хороший способ шифрования полей базы данных?
Мне было предложено шифровать различные db-поля в db.
Проблема в том, что после чтения этих полей необходимо дешифровать.
Я использую Django и SQL Server 2005.
Любые хорошие идеи?
Ответы
Ответ 1
Да. Скажите, кто сказал, чтобы вы стали реальными. Не имеет смысла. Если речь идет о сохраненных значениях - корпоративная версия 2008 может хранить зашифрованные файлы DB.
В противном случае, если вам действительно нужно (со всеми недостатками) просто зашифровать их и сохранить их как байтовые поля.
Ответ 2
Смотрите: Использование симметричного шифрования в базе данных SQL Server 2005
Ответ 3
У меня была та же проблема, и я создал следующее решение: http://djangosnippets.org/snippets/2489/
Мне пришлось использовать M2Crypto в качестве механизма шифрования, но при необходимости его можно поменять.
Как отмечает TomTom, это просто повышает планку для злоумышленника, а не делает невозможным враждебное дешифрование - помимо доступа к вашей базе данных, теперь им также необходимо получить доступ, где бы вы ни хранили кодовую фразу, которая подается в функцию деривации ключей. Однако, разделив ключ на данные, которые он защищает таким образом, вы, по крайней мере, теперь имеете возможность дополнительно защитить этот ключ (например, с сервером управления ключами), чтобы поднять планку еще выше. Оборона в глубину - хорошая стратегия, но вам также нужно решить, какие элементы будут излишними для данного приложения.
Также очень сложно зашифровать любое поле, которое может быть полезно для поиска или сортировки (я использую этот трюк для хранения учетных данных OAuth для веб-службы, которая не поддерживает надлежащие токенизированные соединения OAuth).
Ответ 4
Если вы храните такие вещи, как пароли, вы можете сделать это:
- хранить пароли пользователей как их хэши SHA256
- получить пароль пользователя
- hash it
- Элемент списка
проверить его на сохраненный пароль
Вы можете создать хэш SHA-256 в Python с помощью модуля hashlib
.
Надеюсь, что это поможет