Рейтинг:0

Сделай сам: инструмент для получения ключа пароля с использованием PBKDF2 / HMAC

флаг ru

Прежде всего, я не хочу изобретать велосипед, я просто хочу построить свою собственную машину. Непродуктовая среда; только для удовольствия и развлечения.

Цель состоит в том, чтобы использовать один частный (и никогда не публикуемый) мастер-пароль для создания уникальных паролей (жетон) для каждой учетной записи веб-сайта (twitter.com, reddit.com и т. д.)

Соответствует ли следующий подход этим целям?

Код:

HOST_HASH = SHA512 (ВХОД + СЕРВЕР)

USER_HASH = SHA512 (USER_NAME + HOST_HASH)

PWD_HASH = SHA512 (USER_PASSWORD)

КЛЮЧ = PBKDF2_SHA256 (USER_HASH, PWD_HASH, ITERATIONS_300000, LENGTH_512BITS)

ДАЙГЕСТ = HMAC_SHA512 (HOST_HASH, KEY)

TOKEN = BASE64( SHA1(DIGEST)) #-- просто для удобного вывода

Входы:

  • ИМЯ ПОЛЬЗОВАТЕЛЯ = полное имя пользователя (т.е.: Джонс Смит)
  • ПОЛЬЗОВАТЕЛЬСКИЙ ПАРОЛЬ = пользователь секрет мастер-пароль (или кодовая фраза)
  • АВТОРИЗОВАТЬСЯ = псевдоним пользователя или адрес электронной почты или то, что когда-либо использовалось для входа в систему (например: джсмит123)
  • СЕРВЕР = веб-сайт или доменное имя (например: stackoverflow.com)

Вывод:

  • ТОКЕН = надежный и уникальный пароль, который легко восстановить, но трудно угадать (?)
kelalaka avatar
флаг in
Какова ваша цель вместо создания единого случайного пароля?
swannty avatar
флаг ru
@kelalaka — помните только один хороший мастер-пароль, но используйте разные пароли для каждого веб-сайта, полученные из мастер-пароля.
Рейтинг:1
флаг kr

Вы используете хэши хэшей. В вашей схеме это безопасно. Видеть подробности здесь.

Вы используете PBKDF2 и тем самым защищаете производные пароли от перебора.

Но ваш подход может привести к проблемам с юзабилити. Предположим, у вас есть 100–200 учетных записей для веб-сайтов, почтовых служб, социальных сетей, видео- и аудиосервисов, интернет-магазинов, банков и т. д. Подумайте о следующих случаях:

  • Один веб-сайт требует, чтобы вы меняли свой пароль один раз в год, другой — каждые 3 месяца.
  • Один веб-сайт хранит пароли в простой форме. Их база паролей была скомпрометирована. Они требуют, чтобы вы изменили свои пароли в течение 3 дней.
  • По ошибке вы использовали пароль для другого сайта. После нескольких попыток ваш аккаунт был заблокирован. После разблокировки вас попросят ввести новый пароль.

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

  • Это может занять много времени.
  • Вы можете забыть некоторые веб-сайты, потому что, поскольку вы получаете пароли автоматически, возможно, вы не ведете список. Позже вы удивитесь, что такие забытые сайты не принимают пароль.
  • Некоторые веб-сайты могут быть недоступны в тот момент, когда вы хотите сменить пароль. Или у вас просто нет времени менять пароль сразу на все сайты и делать это блоками, 10 сайтов сегодня, 10 сайтов завтра и т.д. В дальнейшем вы будете не уверены, где вы уже меняли пароль и таким образом какой базовый пароль для какого веб-сайта вы должны использовать.

Вы сами решаете, приемлемо ли это для вас.

Но если вы используете некоторые менеджер паролей, вы получите надежно защищенные пароли, например. KeePass шифрует с помощью AES-256 и использует настраиваемое количество итераций для получения пароля, вам все равно нужно помнить один хороший пароль, например, на основе dicewire, но преимущество в том, что все ваши пароли к разным ресурсам остаются независимый друг на друга, и у вас не будет проблем с удобством использования, упомянутых выше.

swannty avatar
флаг ru
Да, изменение и обновление паролей может стать проблемой в долгосрочной перспективе. Я подумаю над этим вопросом. KeePass хорош, но пароли хранятся (даже в зашифрованном виде) где-то в файле или базе данных. Я ищу что-то более "дематериализованное". Большое спасибо за ответ.

Ответить или комментировать

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