Существует ли способ фильтрации данных в зашифрованной базе данных aes 256 gcm?

#mysql #node.js #search #encryption #mariadb

Вопрос:

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

Пример:

ID электронная почта(не зашифрована) имя(зашифрованное)
1 qwerty@qwerty.com DPTR0zNqreWoZUwajRcJJtMlgji7TrSuzcuPbDfIsqvc6g=
2 qwerty@qwerty1.com DCAvCh1JewOIJl3EQprmgnfy9VT5r6BGFGuyqkBpicNM

Если 1 имя пользователя-Патрик, а 2 имя пользователя-Джо, как мне получить всех пользователей с помощью SQL-запроса с именем, начинающимся с Пэт…

Комментарии:

1. Используете ли вы один и тот же ключ для каждой строки? как генерируются капельницы? Шифрование с возможностью поиска может быть выполнено, однако вы должны хорошо определить свою схему и запросы, чтобы они действительно могли вам помочь. В ответе предлагается отправить ключ на сервер базы данных. Представляет ли это для вас угрозу безопасности? Если нет, то зачем вообще шифрование?

2. Я не использую один и тот же ключ для каждой строки. IV генерируется с использованием node.js криптографическая функция crypto.randomBytes(12).

3. Если вы не используете один и тот же ключ, вам нужно расшифровать все строки, чтобы увидеть, что одна совпадает. Какая-либо конкретная причина не использовать AES-GCM-SIV? SIV защищает использование от проблемы повторного использования IV режима GCM, унаследованного от внутреннего режима CTR.

Ответ №1:

ВЫБЕРИТЕ * ИЗ имени таблицы, ГДЕ AES_DECRYPT(имя,[КЛЮЧ])=’Pat%’

Это должно сработать, оно расшифровывает каждое имя и сравнивает его с заданной строкой. Имейте в виду, что вы отправляете ключ шифрования по соединению, если sql-сервер находится на той же машине, что и Клиент, это безопасно, в противном случае вы могли бы использовать, например, SSL/TLS

Комментарии:

1. Способен ли он расшифровать 256-битный шифр в режиме gcm ? Кроме того, я забыл упомянуть, что данные зашифрованы несколькими ключами. Мы меняем секретный ключ каждый месяц.

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