Хеширование SSN и другой информации ограниченного домена - PullRequest
13 голосов
/ 23 июля 2010

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

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

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

Ответы [ 3 ]

7 голосов
/ 23 июля 2010

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

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

3 голосов
/ 30 июля 2010

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

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

Результат:

  • Pro: безопасный хэш SSN из-за большое количество коллизий хешей.
  • Pro: Ваши хеши короткие и их легко хранить.
  • Con: хэш-столкновения.
  • Con: Вы не можете использовать его для уникального идентификатор из-за Con # 1.
  • Pro: Это хорошо, потому что ты действительно действительно нужно не использовать SSN как идентификаторы, если вы не являетесь социальным Администрация безопасности.
0 голосов
/ 23 июля 2010

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

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

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

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

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

...