Моя главная проблема заключается в том, что я хотел бы проверить, есть ли у кого-то с тем же SSN несколько учетных записей с нами. В настоящее время вся личная информация зашифрована, и расшифровка занимает нетривиальное количество времени.

Моя первоначальная идея состояла в том, чтобы добавить столбец ssn в пользовательский столбец в базе данных. Тогда я мог бы просто сделать запрос, где я получаю всех пользователей с ssn или пользователем A.

Я не хочу хранить ssn в открытом виде в базе данных. Я думал просто посолить и как-то перемешать.

Мой главный вопрос: это безопасно (или насколько это безопасно)? Что есть простой способ для соли и хэширования или шифрования и ssn с использованием python?

Изменить: SSN не должны отображаться.

Это использует базу данных MySQL.

2
Shatnerz 11 Янв 2017 в 22:35

3 ответа

Лучший ответ

Не шифруйте SSN, когда злоумышленник получит БД, он также получит ключ шифрования.

Недостаточно просто использовать хеш-функцию, а просто добавление соли мало что делает для повышения безопасности.

В основном, обрабатывать СЕЗОНЫ так же, как пароли.

Вместо этого добавьте в HMAC случайную соль в течение примерно 100 мс и сохраните соль с помощью хэша. Используйте такие функции, как PBKDF2 (он же Rfc2898DeriveBytes), password_hash / password_verify, Bcrypt и аналогичные функции. Смысл в том, чтобы заставить злоумышленника тратить много времени на поиск паролей грубой силой. Защита ваших пользователей важна, пожалуйста, используйте методы безопасного пароля.

3
zaph 11 Янв 2017 в 21:02

Согласно совету @zaph. Я решил использовать PBKDF2. Затем я могу создать столбец BIT и индексировать его.

Мое простое хеширование выглядит так

import os
import hashlib


def hash_function(input_str):
    """Run pbkdf2_hmac with a 20byte salt, and 120,000 round on the input."""
    salt = os.urandom(20)
    return hashlib.pbkdf2_hmac('sha256', input_str, salt, 120000)
1
Shatnerz 11 Янв 2017 в 20:52

Ваш вопрос не дает понять, нужно ли отображать эти SSN. Я собираюсь предположить, что вы не. Сохраните SSN в хеше SHA2. Затем вы можете выполнить SQL-запрос для поиска по этим хэшированным значениям. Храните только последние 4 цифры, зашифрованные для отображения.

-1
Nigel Feasey 11 Янв 2017 в 19:45