Как искать зашифрованные данные через like?

Есть необходимость шифрование данных пользователей, зашифровать проблемы нет, но проблема в том, что по ним ещё нужен поиск, и поиск нужен в том числе через like. Знаю про пакеты которые работают через слепой индекс, но они работают только через точное совпадение при поиске, а не через like. Может есть обходные пути?
  • Вопрос задан
  • 334 просмотра
Пригласить эксперта
Ответы на вопрос 5
Если верно понял требования, то вот мои мысли.

Использовать Transparent Data Encryption (TDE)

Выполнить шифрование данных на уровне таблиц:
https://www.postgresql.org/docs/current/encryption...
https://dev.mysql.com/blog-archive/controlling-tab...

То есть расшифровывание будет происходить на уровне СУБД, а с точки зрения приложения - обычные запросы LIKE.
Ответ написан
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Хм, если вы можете его обратно расшифровать, то зачем эти телодвижения?
Алсо, мне кажется, в рамках вашего тз, реализовать такое малореально. Либо поиск, либо шифрование.

Мысль: Так как защита такого рода будет работать только с учетом того что код и базу будут ломать отдельно, а при взломе кода вся защита сразу пойдет по п... бороде, и база по разумению заказчика более уязвима, можно попробовать создать "типа индекс" средствами ЯП, файл например, и искать там, вытаскивать айди и уже тогда ломиться с ними в бд. По сути смысл - если код сольют, все пароли шифрования и доступ к бд и так будут у злоумышленника, так что хуже не будет.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Обходные пути есть. Если вы ищете like 'Ив%' чтобы найти всех ивановых то создайте виртуальную
колонку где первые две буквы от имени. И пускай она будет тоже шифрованная. Но для нее
поиск по совпадению и будет аналогом like.

Вобщем создайте столько шифрованных колонок сколько надо. Накладные расходы - обсудите с бизнесом.
Дескыть вы хотели GDPR - получите и распишитесь. Если не даете нам создавать колонки - тогда мы не знаем
как решать вопрсы вашего бизнеса. Эстимируйте в конце концов. Это все цена разработки и она должна
быть обсуждена.
Ответ написан
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
В Андроиде можно для этого использовать SqlCipher. База шифруется, но запросы внутри делать можно.
Но в целом надо понимать, что полноценно LIKE не может применяться к шифрованным данным без дешифровки. Соответственно, бэк, сервер, должен знать ключ для дешифрования.
Собственно, именно на этом факте и погорел Павел Дуров, который утверждал, что Телеграм полностью зашифрованный мессенджер.
Но в зашифрованном мессенджере невозможен быстрый поиск по сообщениям (на стороне сервера) без знания приватных ключей. Бинго!
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы