Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Защита данных в БД


Автор: max-anikin 25.11.2005, 15:18
Довольно общий вопрос, но решил его добавить в БД.

В двух словах:

Вообщем необходимо сделать защиту данных в БД. Таким образом, чтобы в БД данные хранились в зашифрованном виде, а на клиенте данные расшифровывались и выводились пользователю. Шифрование данных производится с помощью алгоритма AES. Это уже сделано.
Но осталась проблема: данный алгоритм шифрования требует наличия закрытого AES ключа на клиенте. Также желательно ввести возможность изменения ключа. На данный момент он просто зашит в клиент (exe). Вот как его безопасно передать с сервера на клиент и как его хранить я пока не знаю.

Прошу совета. Желательно поподробнее. Надеюсь описал все более менее понятно.

Автор: LSD 25.11.2005, 16:34
Цитата(max @ 25.11.2005, 15:18)
Вообщем необходимо сделать защиту данных в БД. Таким образом, чтобы в БД данные хранились в зашифрованном виде, а на клиенте данные расшифровывались и выводились пользователю. Шифрование данных производится с помощью алгоритма AES. Это уже сделано.
Но осталась проблема: данный алгоритм шифрования требует наличия закрытого AES ключа на клиенте. Также желательно ввести возможность изменения ключа. На данный момент он просто зашит в клиент (exe). Вот как его безопасно передать с сервера на клиент и как его хранить я пока не знаю.

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

Автор: YurikGL 19.12.2005, 23:08
Автору: Какая СУБД? Если типа Interbase то через UDF можно все что угодно сделать...


Цитата
если сервер защищен, то зачем в нем хранить зашифрованные данные

Вытаскиваем диск, копируем файл базы данных и, если структура базы простая, вытаскиваем данные легко и непринужденно....

Автор: LSD 19.12.2005, 23:20
Цитата(YurikGL @ 19.12.2005, 23:08)
Вытаскиваем диск, копируем файл базы данных и, если структура базы простая, вытаскиваем данные легко и непринужденно....

1. Под защитой, понимается и физическая защита тоже.
2. Существуют средсва позволяющие шифровать физический диск целиком, в том числе и аппаратные.

Автор: YurikGL 19.12.2005, 23:28
Цитата
1. Под защитой, понимается и физическая защита тоже.
2. Существуют средсва позволяющие шифровать физический диск целиком, в том числе и аппаратные.

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

Автор: Bose 16.1.2006, 14:22
Цитата(max-anikin @ 25.11.2005, 15:18 Найти цитируемый пост)

Вот как его безопасно передать с сервера на клиент и как его хранить я пока не знаю.


по этому поводу рекомендую посмотретьhttp://support.df.ru/likbez_24.html
Цитата

Теперь закономерно встает вопрос о том, каким образом распространять свои публичные ключи. Для этого (и не только) была придумана специальная форма - сертификат (certificate). Сертификат состоит из следующих частей:
Имя человека/организации выпускающего сертификат.
Для кого был выпущен данный сертификат (субъект сертификата).
Публичный ключ субъекта.
Некоторые временные параметры (срок действия сертификата и т.п.).
Сертификат подписывается приватным ключом человека (или огрганизации), который выпускает сертификаты. Организации, которые производят подобные операции называются Certificate authority (CA). Если в стандартном Web-клиенте (web-browser), который поддерживает SSL, зайти в раздел security, то там можно увидеть список известных организаций, которые подписывают сертификаты. С технической стороны, создать свою собственную CA достаточно просто. Но против этого могут действовать скорее юридические препятствия.


Теперь рассмотрим, каким образом происходит обмен данными в Интернете. Воспользуемся все теми же действующими лицами.
Алиса: Привет.
Боб: Привет, я Боб (выдает свой сертификат).
Алиса: А ты точно Боб?
Боб: Алиса я Боб. (Сообщение передается два раза, один раз в открытую, второй раз, зашифрованный с помощью приватного ключа Боба).
Алиса: Все нормально, ты действительно Боб. (И присылает Бобу секретное сообщение, зашифрованное с помощью публичного ключа Боба).
Боб: А вот и мое сообщение (посылает сообщение, которое было зашифровано с помощью секретного ключа, например того же шифрованного сообщения Алисы).
Поскольку Боб знает сообщение Алисы, потому что он владеет приватным ключом и Алиса знает, что было в том сообщении. Теперь они могут использовать симметричный шифровальный алгоритм (где в качестве секретного ключа выступает сообщение Алисы) и безбоязненно обмениваться шифрованными сообщениями. А для контроля над пересылкой сообщений (от случайного/преднамеренного изменения) используется специальный алгоритм - Message Authentication Code (MAC). Довольно распространенным является алгоритм MD5. Обычно, и сам MAC-code также шифруется. В связи с этим достоверность сообщений повышается в несколько раз и внести изменения в процесс обмена практически невозможно.


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


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)