Шифрование имени пользователя - PullRequest
0 голосов
/ 28 ноября 2018

Мне нужно зашифровать имена пользователей, которые я получаю от внешних партнеров SSO.Это необходимо сделать, потому что имена пользователей назначены школьникам.Но мы все еще должны иметь возможность отслеживать каждого человека, чтобы предотвратить злоупотребление нашими системами, поэтому мы решили зашифровать имена пользователей в наших журналах и т. Д. Таким образом, нарушение наших систем не поставит под угрозу личность детей.

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

Я думал об использовании асимметричного алгоритма, такого как PGP, и отбрасывании одного из ключей, чтобы мы моглиневозможно расшифровать имя пользователя.

Мои вопросы:

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

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Если вам нужна односторонняя функция, вам не нужно шифрование.Вы хотите хеширования.Самое простое, что можно сделать - это использовать хеш, такой как SHA-256.Я рекомендую солить имя пользователя перед хэшированием.В этом случае я бы, вероятно, выбрал статическую соль, такую ​​как edu.myschoolname:, и поставил ее перед именем пользователя.Затем выполните это через SHA-256.Преобразуйте результат в Base-64 или в шестнадцатеричное кодирование и используйте полученную строку в качестве «имени пользователя».

Из командной строки unix это будет выглядеть следующим образом:

$ echo -n "edu.myschoolname:robnapier@myschoolname.edu" | shasum -a 256
09356cf6df6aea20717a346668a1aad986966b192ff2d54244802ecc78f964e3  -

Этот выводуникален для этой входной строки (технически это не «уникально», но вы никогда не найдете столкновения, случайно или в результате поиска).И этот вывод стабилен, так как он всегда будет одинаковым для данного ввода.(Я считаю, что PGP включает некоторую рандомизацию; если нет, то должен.)


(Относительно комментариев ниже)

Криптографические алгоритмы хеширования чрезвычайно безопасны для своих целей.Некриптографические алгоритмы хеширования небезопасны (но также и не предназначены).Я не знаю каких-либо серьезных атак на SHA-2 (включая SHA-256 и SHA-512).

Вы правы, что ваша система должна быть устойчивой против кого-то, имеющего доступ к коду.Однако, если они знают, какой ИД пользователя ищут, ни одна система не сможет противостоять им, обнаружив замаскированную версию этого идентификатора.Если вы шифруете, злоумышленник, имеющий доступ к ключу, может просто зашифровать само значение, чтобы выяснить, что это такое.

Но если вы защищаете от обратного: не позволяете злоумышленникам определить идентификатор, когда они этого не делают.Уже известно, какой идентификатор они ищут, правильное решение - криптографический хеш, в частности SHA-256 или SHA-512.Использование PGP для создания односторонней функции - это использование криптографического примитива для чего-то, для чего он не создан, и это всегда ошибка.Если вам нужна односторонняя функция, вам нужен хеш.

0 голосов
/ 28 ноября 2018

Я думаю, что PGP - хорошая идея, но есть риск сделать имена пользователей трудными для запоминания, почему бы просто не составить список имен пользователей, состоящий из user + OrderedNumbers, где пользователь может быть тем словом, которое вы хотите, а порядковый номер - 4-5цифровой номер, упорядоченный по дате рождения детей?
После того, как вы это сделали, вам нужно только сохранить список, в котором имена пользователей связаны с соответствующим дочерним элементом, и затем вы можете зашифровать этот список «приятно иметь» только с ключом.знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...