Задать вопрос
Steel_Balls
@Steel_Balls
0KLRiyDQv9C40LTQvtGALiDQmNC00Lgg0L3QsNGF0YPQuQ==

Как сделать быстрый поиск в шифрованной системе?

Есть система, в которую поступают текстовые сообщения. На клиенте с помощью публичных/приватных ключей они шифруются и отправляются на сервер.
На сервере они хранятся в шифрованном виде и никаких ключей для дешифрования на сервере нет принципиально.
У меня есть задача искать на сервере по каким-то запросам или ключевым словам текст в зашифрованных сообщениях.
Как это у меня работает сейчас. Я запрашиваю порции шифротекста с сервера, расшифровываю на клиенте приватными ключами. И уже в расшифрованном тексте на клиенте я делаю нужный мне поиск.
Недостаток очевиден - поиск производится крайне медленно и безо всякой оптимизации, никакой Sphynx тут не поможет.
Вопрос. Можно ли как-то ускорить поиск в шифрованном тексте?

P.S. Это, кстати, пинок в сторону Телеграма как доказательство, что там ничто не шифруется, поскольку поиск за огромный период времени там происходит моментально. И на сервере, а не на клиенте.

P.P.S. Кстати, я вспомнил, что когда-то на Андроиде работал с SqlCypher - версия для Sqlite, но с шифрованием. Вся база зашифрована, но обращение к ней шло да, чуть медленнее, но вполне быстро на тестах для больших объёмов. Как там это реализовано, интересно...
  • Вопрос задан
  • 1612 просмотров
Подписаться 4 Простой 8 комментариев
Решения вопроса 1
@Everything_is_bad
Например, продолжить твое "сейчас" и на клиенте хранить индекс всех сообщений (если такое возможно). А так гугли "searchable symmetric encryption" и "полностью гомоморфное шифрование"
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rPman
"Быстро" не получится.
Ваш подход максимально верный - поиск должен осуществляться на клиенте.

Есть гомоморфное шифрование, позволяет буквально проводить вычисления над зашифрованными данными без их расшифровки. Но это адский треш, вся база данных на каждую операцию должна проходить через вычисления. Помню был аддон для postgres (давно, маловероятно что поддерживается), так же помню была статья про компилятор типа C языка (без циклов)
Ответ написан
Комментировать
@Han7
Возможно стоит посмотреть в сторону поиска по изначально сохраненным хешам информации до шифрования в соответствие с шифрованными данными.
Тогда на клиенте вычислять хэш запроса, на сервере из бд отдавать шифрованные данные на основании хеша.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы