Рейтинг:1

идея генератора детерминированных паролей

флаг ru

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

У меня возникла идея написать для себя детерминированный генератор паролей, который берет кортеж:

  • основной пароль
  • заголовок для exp. просто слово "пинтерест"

и генерирует пароль заданной длины, всегда одинаковый.

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

Реализация:

  1. Обработка мастер-пароля и заголовка с помощью хеш-функции пароля, такой как хеширование воздушного шара или argon2 (я считаю, что это требует некоторых вычислительных усилий и затрудняет получение мастер-пароля из нескольких сгенерированных паролей).
  2. Используйте результат 1. в качестве начального значения для Fortuna DRNG для генерации пароля.

Верны ли мои предположения о пункте 1.? Не могли бы вы предложить еще несколько операций?

Как мне обрабатывать мастер-пароль и заголовок? Могу ли я просто объединить их и хэшировать, или XOR их хэшей, или составить?

DannyNiu avatar
флаг vu
SSL/TLS делает почти то, что вы описываете - получение рабочих ключей из главного ключа, полученного в результате рукопожатия; за исключением того, что они работают с двоичными ключами вместо текстовых паролей. В противном случае этот вопрос (как я понимаю) является запросом на анализ схемы, поэтому не по теме.
флаг kr
На самом деле это дубликат [этого вопроса] (https://crypto.stackexchange.com/questions/98173/diy-password-key-derivation-tool-using-pbkdf2-hmac). Посмотрите там проблемы, с которыми вы можете столкнуться. Кратко: Что делать, если вам нужно изменить пароль для одного из 100 веб-сайтов? Один генератор работать не будет.
kelalaka avatar
флаг in
Использовать менеджер паролей?
флаг kr
@kelalaka: Да, использование менеджера паролей — самый разумный подход. Но OP, а также связанный вопрос надеется, что может быть хорошая функция, которая дает вам пароли для всех ваших веб-сайтов, так что вам нужно помнить только * один пароль. В связанном ответе я объясню, почему это невозможно в долгосрочной перспективе И да, если кто-то хочет запомнить только *один* пароль, следует использовать менеджер паролей.
флаг kr
Если вас не волнует сброс пароля, то ваш подход почти прекрасен. Я не вижу причин для шага 2, DRNG. Хэш уже имеет высокую энтропию. Зачем нужен ДРНГ? Это не ухудшит результат, но усложнит, не дав никаких преимуществ.
kebabdubaj avatar
флаг ru
Я думал, что DRNG позволит мне генерировать пароли произвольной длины.
Рейтинг:-2
флаг cn

Я бы предложил меньше операций :-)

Использовать Аргон2 прямо как это то, для чего это. Итак, вы бы сделали что-то вроде этого: -

эхо "мастер_пароль" | argon2 header_needs_to_be_longer -t 1000 -p 10 -k 10000

в мире *nix.

Затем это производит: -

Тип: Аргон2и
Итерации: 1000
Память: 10000 КиБ
Параллельность: 10
Хэш: 16e4848c0274617768dac792518fd60d74df6233c0f7d4b90df22f009ae177fd
Закодировано:    $аргон2i$v=19$m=10000,t=1000,p=10$AGVhZGVyX25lZWRzX3RvX2JlX2xvbmdlcg$FuSEjAJ0YXdo2seSUY/WDXTfYjPA99S5DfIvAJrhd/0
6,435 секунды
Проверка прошла успешно

Хеш составляет 256 бит, чего должно быть достаточно, и он всегда воспроизводим и безопасен.

флаг kr
С точки зрения безопасности, да, это нормально. Но как насчет удобства использования? Если у вас есть 100 веб-сайтов и вам нужно сменить пароль для одного из них, зайдете ли вы на каждый из этих 100 веб-сайтов и смените пароль только для того, чтобы иметь один и тот же генератор?
Paul Uszak avatar
флаг cn
@mentallurg Эээ, не совсем уверен, что вы имеете в виду под одним генератором, но я пытался сосредоточиться на использовании аргона для объединения мастер-пароля и соли.
флаг kr
Вопрос НЕ в том, как безопасно генерировать пароли. Вопрос заключается в создании функции, которая имеет имя веб-сайта в качестве входных данных и создает для него пароль. Например, *пароль = генератор(имя_сайта)*. Наличие безопасного алгоритма хеширования — это только *часть* этого. Конечно, мы можем взять Argon или другой безопасный алгоритм. Но *фундаментальная* проблема в том, что этот подход работает только в том случае, если вы не меняли пароль ни на одном из веб-сайтов. Если вам нужно сменить пароль, вам нужен *другой* генератор.
флаг kr
... Таким образом, вам понадобится 2 генератора. Если вы меняете пароль для некоторых веб-сайтов 3 раза, вам понадобится 3 генератора. Кроме того, вам нужно будет хранить некоторую информацию о том, какие генераторы должны быть пользовательскими для того или иного сайта. Таким образом, со временем вы придете к необходимости хранить разную информацию для генерации паролей для каждого веб-сайта. Таким образом, иметь один генератор для нескольких веб-сайтов в долгосрочной перспективе невозможно.
kebabdubaj avatar
флаг ru
Давайте немного уточним, мой генератор паролей имеет очень специфический вариант использования для редко используемых, не столь важных паролей, которые все же было бы неплохо иметь уникальными (например, для сервера Minecraft). Также я думаю, что ваши опасения по поводу смены пароля можно решить, добавив беззнаковое целое число I, которое может участвовать в генерации пароля.
kebabdubaj avatar
флаг ru
@PaulUszak Вы предлагаете использовать заголовок в качестве соли для аргона2?
kebabdubaj avatar
флаг ru
@mentallurg Я прочитал ваш связанный вопрос, я согласен с вами, но все же я верю в свой подход для моего личного варианта использования, и этот неподписанный int, который я добавил в функцию, решит для меня проблему смены пароля.
kebabdubaj avatar
флаг ru
Мой главный вопрос остается правильным ли моя реализация?
Paul Uszak avatar
флаг cn
@kebabdubaj Да, знаю. Кажется очевидным способ объединить их :-) Включая любые (int) номера версий.
kebabdubaj avatar
флаг ru
@PaulUszak Хорошо, это имеет смысл, согласен

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

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