#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, насколько я знаю, предназначен только для производительности, поэтому тот же ввод и тот же вывод, но я действительно мало что знаю об этом.