Хеширование SSNs и другой ограничено-доменной информации

Я в настоящее время работаю над приложением, где мы получаем частную медицинскую информацию. Одна из самых больших проблем с SSN. В настоящее время мы не используем SSN ни для чего, но в будущем мы хотели бы смочь использовать его для однозначного определения пациента через несколько средств. Единственный путь I видит, чтобы сделать, это надежно через SSN. Однако мы (в дополнение к нашим клиентам) ДЕЙСТВИТЕЛЬНО не хотим хранить SSN.

Так естественно я думал просто о SHA, хеширующем его, так как мы просто используем его для идентификации. Проблема с этим состоит в том что, если взломщик знает проблемную область (SSN), то они могут сфокусироваться на том домене. Таким образом, намного легче вычислить миллиард SSNs, а не фактически неограниченного количества паролей. Я знаю, что должен использовать соль сайта и соль на пациента, но являюсь там чем-либо еще, что я могу сделать, чтобы препятствовать тому, чтобы взломщик показал SSN? Вместо SHA я был планированием использования BCrypt, так как Ruby имеет хорошую библиотеку, и это обрабатывает масштабируемую сложность и солящий автоволшебно.

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

13
задан Preston Marshall 23 July 2010 в 18:57
поделиться

3 ответа

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

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

7
ответ дан 2 December 2019 в 01:20
поделиться

Во-первых, много аплодисментов и похвал за хранение хэша SSN.

Похоже, вы резервируете SSN как своего рода «резервное имя пользователя». В этом случае вам понадобится другая форма аутентификации, помимо имени пользователя - пароль, номер водительского удостоверения, номер паспорта, подтверждение места жительства и т. Д.

Кроме того, если вы обеспокоены тем, что злоумышленник собирается предсказать 10 000 основных номеров SSN для пациента, родившегося в 1984 году в Аризоне, и попытаться выполнить каждый из них, вы можете установить в свое приложение экспоненциально увеличивающийся ограничитель скорости. * Для дополнительной защиты создайте систему уведомлений, которая предупреждает системного администратора, когда появляется необычно большое количество неудачных попыток входа в систему. **

* Пример экспоненциально увеличивающегося ограничителя скорости: После каждого неудачного запроса задерживайте следующий запрос на (1,1 ^ N) секунд, где N - количество неудачных запросов с этого IP-адреса. Отслеживать IP и неудачные попытки входа в систему в таблице БД; не должен добавлять слишком большую нагрузку, в зависимости от аудитории вашего приложения (вы работаете в Google?).

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

0
ответ дан 2 December 2019 в 01:20
поделиться

Если вы серьезно хотите хэшировать номер социального страхования безопасным способом, сделайте следующее:

  1. Узнайте, сколько энтропии находится в SSN (подсказка: очень мало. Намного меньше, чем случайно выбранные 9 цифровой номер).
  2. Используйте любой алгоритм хеширования.
  3. Хранить меньше (половин?) Бит, чем в SSN есть энтропия.

Результат:

  • Pro: Безопасный хеш SSN из-за большое количество хеш-коллизий.
  • Pro: ваши хэши короткие, и их легко хранить.
  • Против: Хеш-коллизии.
  • Против: вы не можете использовать его для уникального идентификатор из-за Con # 1.
  • Pro: Это хорошо, потому что ты действительно действительно не нужно использовать SSN как идентификаторы, если вы не являетесь социальным Администрация безопасности.
3
ответ дан 2 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: