2014-12-12 2 views
0

У меня есть форма, которая берет номер социального страхования, и мне нужно написать код, который проверяет, введен ли он за последние два дня. Все это легко.Альтернатива хэшу и соли для социального обеспечения/правительственный идентификационный номер

Мой текущий план заключается в создании таблицы ssn_hash(id, ssn_hash, date) и хеш/соль ssn, затем INSERT их в базу данных. После этого создайте представление, которое отображает последние два дня. Соль - это некоторые другие пользовательские данные, взятые из формы.

Я хотел бы знать 2 вещи:

  1. Является ли это хороший подход? Или существует какая-то другая распространенная практика, которая обеспечит тот же результат.
  2. Под PHP, является единственным вариантом из библиотеки std функцией crypt()?
+0

Альтернатива крипте? команда sha? –

+0

PHP, похоже, не имеет команды 'sha()', а 'sha1()' не позволяет мне указать соль. Для других вещей это было бы хорошо, но я надеялся на соль пользователя. – nobrandheroes

ответ

1

crypt прекрасно подходит со следующими оговорками:

  • Если вы используете пользовательские данные в виде соли, вы серьезно ограничить его хаотичность. Вместо этого выберите что-то вроде openssl_random_pseudo_bytes.
  • Не бойтесь хранить соль в столе. Фактически attr_encrypted, популярный камень Ruby on Rails делает это. Просто убедитесь, что вы создаете уникальную соль для каждой записи. Никогда не используйте соль.
  • Убедитесь, что вы не используете сломанный метод шифрования, такой как DES или SHA-1. Вы можете указать CRYPT_BLOWFISH или CRYPT_SHA512.
+0

Не могли бы вы уточнить? Почему хранение соли в базе данных не является угрозой безопасности. – nobrandheroes

+1

Отличный вопрос, проверьте [этот отличный ответ] (http://security.stackexchange.com/questions/17421/how-to-store-salt) – Travis

+0

Это был действительно хороший пост. Благодарю. – nobrandheroes

1

Функции шифрования пароля здесь не помогут, если вам нужно быстро просмотреть, было ли это число использовано. Вместо этого вам придется идти с прямым хешем SHA1-типа, чтобы вы могли сделать обратный поиск.

Вы должны быть абсолютно уверены, что ваш сервер обеспечен должным образом. Вероятно, хорошая очистка данных из этой таблицы также является хорошей идеей.

+0

Я не уверен, что я понимаю, что шифрование не помогло бы. В этом случае только функция шифрования должна знать ssn и salt, я этого не делаю, и приложение не работает. Является ли плохая идея регенерировать хешированный номер каждый раз, когда я запрашиваю базу данных? – nobrandheroes

+0

Проблема с солью возникает каждый раз, когда она изменяется, поэтому определение того, является ли SSN * x * в базе данных, становится случаем сканирования каждой строки и тестирования по сравнению с данным параметром * x *. Если вы просто хеш, это быстрый поиск, совпадение или отсутствие соответствия. – tadman