Зашифрованные поля и полнотекстовый поиск, лучший подход?

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

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

Как лучше всего зашифровать эти поля, но при этом разрешить поиск?


person Community    schedule 04.08.2009    source источник


Ответы (5)


Это будет нелегко. То, что вы описываете, редко реализуется в коммерческих базах данных, хотя есть некоторые теоретические результаты в этой области. Я бы посоветовал вам зайти на сайт Google Scholar и начать искать статьи по этой теме.

Вот несколько ссылок для начала:

person Community    schedule 04.08.2009
comment
Также ознакомьтесь с этой презентацией: Как искать зашифрованные данные - Ю-Джин Го crypto.stanford.edu/~eujin/papers/secureindex/ - person Karl Glennon; 15.08.2013

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

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

person Community    schedule 04.08.2009

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

person Community    schedule 14.08.2009

Oracle 10g Release 2 (или новее) может поддерживать эту функцию. Со своего веб-сайта здесь:

http://www.oracle.com/technology/oramag/oracle/05-sep/o55security.html

«Новая функция в Oracle Database 10g Release 2 позволяет вам сделать именно это: вы можете объявить столбец зашифрованным, не написав ни единой строчки кода. Когда пользователи вставляют данные, база данных прозрачно шифрует их и сохраняет в столбце. Точно так же , когда пользователи выбирают столбец, база данных автоматически расшифровывает его. Поскольку все это делается прозрачно, без каких-либо изменений в коде приложения, функция имеет соответствующее имя: Прозрачное шифрование данных (TDE) ».

Идея состоит в том, что никто не может видеть открытый текст в базе данных, но оператор select будет работать как обычно. Это может помочь в поиске, если Oracle - вариант?

Обновление: здесь есть еще один вариант:

http://www.critotech.com/index.htm

для баз данных MySQL, но это кажется довольно дорогим.

person Community    schedule 23.10.2009

Я знаю, что это старый ответ, но и у SQL Server, и у Oracle теперь есть (дорогие) предложения для прозрачного шифрования данных, которое в основном позволяет вашему приложению выполнять поиск без изменений, но фактические данные в состоянии покоя зашифрованы. Больше информации здесь:

SQL Server: https://msdn.microsoft.com/en-us/library/bb934049%28v=sql.120%29.aspx

Oracle: http://www.oracle.com/technetwork/database/options/advanced-security/index-099011.html

person Community    schedule 31.08.2015