Задать вопрос

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

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

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

P.P.S. Кстати, я вспомнил, что когда-то на Андроиде работал с SqlCypher - версия для Sqlite, но с шифрованием. Вся база зашифрована, но обращение к ней шло да, чуть медленнее, но вполне быстро на тестах для больших объёмов. Как там это реализовано, интересно...
  • Вопрос задан
  • 1670 просмотров
Подписаться 4 Простой 8 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    1C-программист: расширенный курс
    18 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия 1С-программист
    8 месяцев
    Далее
Решения вопроса 1
@rPman
"Быстро" не получится.
Ваш подход максимально верный - поиск должен осуществляться на клиенте.

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

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

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