Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4380
0
Помогите пожалуйста решить задачи
24th November, 23:53
6084
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Поиск по зашифрованной информации. Как реализовать?
Просмотров: 376
 
Ответов: 8
Приветствую!
Есть данные которые шифруются на стороне клиента алгоритмом AES. Далее данные сохраняются на сервере.
Хранить данные в открытом виде на сервере мы не можем, такая политика конфиденциальности.
Как можно организовать поиск по этим данным?
Брать хеш (ключевые слова/теги) и искать по нему?
Спасибо!
Разбейте задачу на подзадачи.
Есть данные. Есть ключи шифрования этих данных. Ключи только у клиента. Вычленить фрагмент текста из зашифрованного блока невозможно по определению.
Вам нужно, чтобы пользователь мог с использованием индекса найти ссылку на нужное место в выбранной структуре хранения.
Так как индекс должен быть зашифрован, то доступ к нему может быть только у клиента. Т.е. задача обновления индекса падает на пользовательскую часть софта.
Ну вот Вам и ответ — индекс является отдельным зашифрованным документом пользователя. Каждый раз, как он вносит новые данные или меняет существующие он должен внести изменения в индекс.
Плюс — модуль для полного сканирования имеющихся документов для первого раза или для восстановления поврежденного индекса. Опять-же — работает только и исключительно на стороне клиента, ибо ключи только у него.
Пробовал решить схожую задачу:
— данные хранятся на сервере, шифруются на клиенте, сервер даже об алгоритме шифрования не знает, хотя вообще алгоритм симметричный, ключ один и закрытый как следствие
— необходимо было реализовать автодополнение на AJAX (строки относительно короткие, ФИО в общем)
Выкрутился пока так:
— при сохранении поля клиент шифрует данные и помешает в основную таблицу
— дополнительно для каждой подстроки (первая буква, две первых буквы, три первых буквы, ..., всё ФИО) формируется хэш (с солью) и помещается в другую таблицу, связанную с основной (много хэшей для каждой записи в основной)
— при вводе новой записи пользователем клиент отправляет хэш введенных букв на сервер, тот выдаёт зашифрованные записи для которых этот хэш есть (например, все записи, которые начинаются с 'А')
— клиент расшифровывает записи, уникализирует (дубли есть даже на относительно небольшой базе, в теории полных тёзок очень много) и показывает пользователю часть из них (на начальных буквах все показать если и реально, но смысла нет)
Глобальный недостататок:
— большая нагрузка на клиента, когда надо расшифровывать порядка пары сотен записей (при базе в 3000 человек) после ввода первой буквы — на JavaScript это, мягко говоря, не быстро, генерация порядка 20-40 хэшей при сохранении на этом фоне мелочь, как и несколько лишних килобайт на запись в хэше. Что будет когда возвращаться будут тысячи записей для расшифровки — страшно подумать, надо думать над тем, как ограничивать и уникализировать записи на сервере и как из JS браузера вызывать нативные библиотеки шифрования типа mhash и mcrypt
Ну пусть клиент вместе с шифрованными данными сам создает и передает незашифрованный массив из слов для построения индекса для этого документа. Все конфиденциальные данные отбрасываются (ну номера, пароли, легко регэкспом), остаются только обессмысленный набор простых слов, отсортированных по алфавиту.
Хэшировать каждое слово бессмысленно, ибо это не повышает безопасность: легко взять хэши у большого произвольного набора слов и сравнить с записями в существующем индексе.
Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться