Всем привет!

Хочу поделиться с народом своей идеей по поводу безопасного хранения паролей. Сторонние менеджеры паролей мне всегда не нравились. Хранение сокровенного у чужого дяди – идея ну очень так себе. Можно сколько угодно клясться, что все надежно, что утечки маловероятны и т.д. Но одна утечка – и все что нажито непосильным трудом погибнет.

Поэтому, я, руководствуясь принципом «хочешь, чтобы было сделано хорошо – сделай сам», решил создать свое решение этой проблемы.

Задачи стояли следующие:

  1. Я программист не настоящий, так что алгоритм должен быть простым в реализации.

  2. Он должен быть кроссплатформенным: Android/Linux/Windows.

  3. Пароли в принципе не должны храниться нигде и ни в каком виде – это и есть изюминка моей идеи.

  4. Если кто-то получит доступ к исходным кодам – это ничего ему дать не должно. Собственно, поэтому я и решил поделиться с народом своей идеей.

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

Алгоритм заворачивается в скрипт на питоне. Интерпретаторов под Android/Linux/Windows – вагон и маленькая тележка. Далее привожу код с пояснениями.

Импортируем нужные библиотеки:

import hashlib
from textwrap import wrap
import random

Подключаем список алгоритмов хэширования. Длина хэша у них разная, сделано это для сайтов с ограничением сверху по длине пароля.

algs = ['md5', 'sha1', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512']

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

abc_blocks = ['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', '!"$%&\'()+,-./:;<=>?@[]^_{|}~`', ' #*\\'] 
abc = ''

Принимаем на входе количество блоков. По умолчанию берем все три блока.

И задаем зерно для рандома. Это вышеупомянутое число из мнемонического идентификатора.

abc_colvo = int(input("Количество блоков (3): ") or 3)
s = int(input("Зерно для рандома: "))

 Склеиваем блоки алфавита и перемешиваем его.

for i in range(abc_colvo):
    abc += abc_blocks[i] 

abc = list(abc)
random.seed(s)
random.shuffle(abc)
abc = ''.join(abc)

Далее вводим фразу.

memory_phrase = input('Ключевая фраза: ')
memory_phrase = bytes(memory_phrase, encoding = 'utf-8')

Запускается вычисление паролей.

print()
print('-----------------------------')

for alg in algs:
    hash_key = getattr(hashlib, alg)(memory_phrase).hexdigest()
    password = [hash_key[x:x+2] for x in range(0, len(hash_key), 2)]
    password = list(map(lambda x: int(x, 16) % len(abc), password))
    password = list(abc[x] for x in password)
    password = ''.join(password)
    print(alg + ':', len(password), 'chars')
    print()
    print(password)
    print()

     for block in wrap(''.join(password), 4):
        print(block + '  ', end = '')

    print()
    print('-----------------------------')

И вуаля – вот ваши возможные пароли для сайта.

Ваши пароли
Ваши пароли

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

Комментарии (88)


  1. FilimoniC
    05.04.2022 08:26
    +12

    То есть для каждого сайта нужно помнить 3 параметра - количество блоков, зерно и мнемоническую фразу ? Не уверен что это лучше, чем использовать длинный пароль, соответствующий новым рекомендациям NIST

    Как по мне, менеджеры паролей (использую KeePass) хороши тем что в них я могу хранить не только сами пароли, но и имена "откуда они" к ним. Через год я не помню, есть у меня регистрация в "магазин рога и копыта" и под каким ником. А еще ключи SSH, описания, вложения, никнеймы, TimeOTP


    1. kraamis Автор
      05.04.2022 08:39
      +1

      А вы уверены, что там нет закладок? Или что в очередном обновлении они не добавятся по "политическим мотивам"?

      Если нужно хранить такой объем - можно самому написать криптоконтейнер по тому же принципу.


      1. xmcuz
        05.04.2022 08:58
        +2

        Если нужно хранить такой объем - можно самому написать криптоконтейнер по тому же принципу.

        С таким подходом проще взять фиксированную кодовую базу и самостоятельно провести аудит. Времени уйдет не меньше написания велосипеда.


        1. kraamis Автор
          05.04.2022 09:01

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


          1. pfffffffffffff
            05.04.2022 10:31

            консольной утилитой не очень удобно будет пользоваться


            1. kraamis Автор
              05.04.2022 10:32

              Почему? Консоль всегда под рукой.


              1. YaDr
                05.04.2022 10:35

                Особенно на телефоне, да...


                1. kraamis Автор
                  05.04.2022 10:35
                  +2

                  Termux


                  1. YaDr
                    05.04.2022 10:37

                    Можно, конечно, жить без автодополнения - которое предоставляют всякие ластпассы и битвардены - но это крайне неудобно. Каждый раз открываем термукс, вспоминаем магические числа... Проще уж десяток-другой паролей помнить :-)


                    1. kraamis Автор
                      05.04.2022 10:41

                      Ну в принципе да. Может конечно наиграюсь и брошу. Но за пару лет пока не надоело.


                      1. YaDr
                        05.04.2022 10:43

                        На вкус и цвет. Спасибо за статью :-)


              1. snaiper04ek
                05.04.2022 10:40

                Менеджеры паролей подкупают удобством.

                Пару лет назад я бы и не подумал что у меня будет куплен один из них.

                Но они автоматически предлагают записать, автоматически предлагают вставить один из 10 логинов/паролей именно для этого сайта, автоматически предлагают обновить пароль при изменении, удобство на телефоне - вообще сказка.

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


      1. mm3
        05.04.2022 09:14

        Во первых в отличии от различных сервисов в KeePass база хранится локально, это файл сохранность которого ложится на плечи пользователя.
        Во вторых это Open source а значит ты как пользователь можешь, а для параноиков должен, провести свой независимый аудит кода. Код должен быть более или менее читаемым, для понимания того что он делает, а значит закладки с отправкой данных должны быть видны. Ну а стойкость алгоритмов шифрования порой даже эксперты оценить не берутся.
        В третьих не стоит бездумно ставить любые обновления, без проверки того что в эти обновления включено. Особенно если уже проведён аудит всего кода, то дополнительно проверить внесённые изменения не составит большого туда. И в случае любых обнаруженных проблем, как минимум сообщить о них сообществу, как максимум сделать форк и контролировать изменения самому.


        1. kraamis Автор
          05.04.2022 09:34

          Штука в том, что аудит кода, это задача для неспециалиста, коим я являюсь, штука довольно сложная.


          1. xmcuz
            05.04.2022 09:54
            +2

            Самая простая проверка: фиксировать весь исходящий трафик за какой-то промежуток активного использования ПО.

            В идеале он должен отсутствовать.

            В KeePassXC запросы могут появиться только при вызове определенных функций пользователя (загрузка значков и частичной проверки хешей через haveibeenpwned.com).


        1. NTDLL
          05.04.2022 11:31

          база хранится локально, это файл сохранность которого ложится на плечи пользователя.

          Сохранность файла, тем более зашифрованного и ещё неизвестного формата, это большая проблема.

          Я придумывал свою систему хранения паролей именно из за этого. Сделал так, чтобы все пароли хранились в MFT. Учитывая то, что эта MFT дублируется дважды в разделе с NTFS и не фрагментируется. Плюс, у меня CRC для каждого пароля.

          Меня уже всё это один раз крупно спасло. Я вытащил флешку без программного извлечения и у меня флешка стала нечитаемой. Восстанавливал через HEX-редактор, чтобы не затереть данные окончательно какой нибудь кривой прогой. Правда, MFT долго искал, я не знаю где хранится её адрес.


      1. MonkAlex
        05.04.2022 09:23
        +5

        Запретите keepass доступ в интернет (он ему не нужен) и пользуйтесь спокойно даже с закладками.


        1. pfffffffffffff
          05.04.2022 10:32

          Придет вирус и воспользуется закладкой)


        1. Inine
          05.04.2022 11:04

          А если при переносе базы забыть настроить правило?
          А не может ли одна программа отправлять запросы, вызывая другую, например curl?


      1. Tr_1986
        05.04.2022 09:29
        +2

        А чем плох bitwarden на своём сервере? Это реально вопрос. Наткнулся на него буквально 3 дня назад, раздумываю. Может есть какой-то изначальный косяк, который перекрывает все плюхи?


        1. kraamis Автор
          05.04.2022 09:34

          У меня нет своего сервера.


          1. Tr_1986
            05.04.2022 09:43

            Даже NAS или VPS, RBi?


            1. kraamis Автор
              05.04.2022 09:44

              Нет. Как то не было необходимости в жизни.


        1. Rim13
          06.04.2022 10:12
          +1

          Использую дома vaultwarden, сервер на rust для bitwarden, есть докер для него. Не нужна email регистрация в bitwarden.

          Все ок. Проблем не испытываю.


          1. Anton_Kazantsev
            06.04.2022 11:11

            Можно инструктаж как его поставить?


          1. ASD2003ru
            06.04.2022 23:16

            Тоже самое. До этого был Keepass с синхронизацией через webdav но keepass под linux и macos нет (в нормальном виде да еще и с синхронизацией), еще пробовал SafeInCloud но его тоже нет под linux. vaultwarden конечно не так крут как keepass но со своими фишками + возможность вебморды.


      1. Serge78rus
        05.04.2022 13:03
        +2

        А вы уверены, что там нет закладок?
        А Вы уверенны, что закладок нет в браузере (или в другом софте, куда Вы собираетесь вводить пароль)? Если следовать Вашей логике, то самому надо писать не только менеджер паролей, а и весь софт, работающий с чувствительной информацией.


        1. kraamis Автор
          05.04.2022 15:53

          Браузер-то я сам не напишу, к сожалению.


          1. Serge78rus
            05.04.2022 16:04
            +1

            В том то и дело, и даже аудит вряд ли проведете. А ведь ему Вы доверяете не только пароли, но и данные банковских карт, персональные данные, и т.д.


      1. Buzzzzer
        07.04.2022 04:07

        Можно взять Bitwarden, развернуть на своём сервере и ограничить ему доступ, чтоб исключить утечку данных.


  1. vvovas
    05.04.2022 08:30
    +3

    Цель нигде ничего не хранить разбивается о потребность хранить мнемонические фразы с сидом.

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


    1. kraamis Автор
      05.04.2022 08:36

      А хранить их можно в голове. Смысл мнемоники - в легком запоминании.


      1. mavir
        05.04.2022 09:13
        +2

        Например, у меня сейчас в KeePass 301 запись. Некоторые создавались чуть ли не 10 лет назад. Как для такого количества запомнить все мнемоники?


        1. kraamis Автор
          05.04.2022 09:35

          Это да, проблема. У меня их штук 25 - их я могу запомнить.


          1. berez
            05.04.2022 09:58
            +2

            Одна из радостей хранилки паролей — в том, что новые пароли добавляются легко и их не надо держать в голове. В результате можно для каждого ресурса использовать уникальный рандомный пароль.
            А вот когда пароли генерятся по мнемонической фразе или каким-то другим параметрам, приходится эту фразу как-то запоминать. Уникальных фраз не напридумываешься, поэтому люди обычно вырабатывают некую универсальную схему и следуют ей. Например, можно везде использовать одну и ту же фразу, просто добавить в нее имя ресурса: «лошадьсоскрепкойдляхабра».
            Устойчивость этой схемы довольно низкая. Стороннему наблюдателю достаточно один раз увидеть фразу и понять принцип ее составления — и все. У него есть доступ ко всем ресурсам, где использовалась эта фраза.


            1. kraamis Автор
              05.04.2022 10:02

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


              1. berez
                05.04.2022 10:26

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

                Но возьмем обычного ленивого пользователя. Без суровой дисциплины с его стороны то, что вы предлагаете, будет довольно хлипкой защитой. Еще и неудобной.


                1. kraamis Автор
                  05.04.2022 10:31

                  Такой пользователь будет и пароли везде одинаковые использовать. Тут, на Хабре, таких меньшинство.

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


                  1. berez
                    05.04.2022 10:47
                    +1

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

                    Это если нет менеджеров паролей.
                    Если менеджер паролей таки есть (а их уже придумано множество), то все сразу меняется: пользователю ничто не мешает для каждого ресурса использовать свой уникальный пароль.
                    Кстати, накалякать свой менеджер паролей не так уж и сложно. Не за полчасика, конечно, но за пару дней — вполне. Зато будет свой, гарантированно без закладок.


                    1. polearnik
                      05.04.2022 11:18
                      +2

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


              1. ClearAirTurbulence
                06.04.2022 11:20

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

                Когда мне было лет 15, в один прекрасный день я не смог вспомнить, как будет "вишня" по-английски. И не мог вспомнить это где-то пару часов. Потом коррекция ошибок сработала, и слово вспомнилось.

                После такой наглядной демонстрации потенциальных глюков мозга хранить в нем пароли или схемы их получения мне как-то не хочется.


      1. thedrnic
        05.04.2022 09:17

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


        1. kraamis Автор
          05.04.2022 09:36

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


      1. man55
        05.04.2022 12:41

        как Вы считаете, что более криптостойкое, пароль вида "этотпарольдлясайтаяндекс" или пароль, сгенеренный Вашей утилитой вида "8s(e[2&" ?

        если речь идет не о хранении паролей, а об их генерации по ключевой фразе, то сильно проще придумать себе правило (правила) формирования паролей из "имени-собаки-фамилии-матери-задом-наперед-соли-из-доменного-имени"

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


  1. DirectoriX
    05.04.2022 08:36

    8 лет назад делал нечто похожее на Java: указывается код алгоритма (тоже хеш-функции), максимальная длина пароля, зерно-число и какая-то строка, предполагал, что это будет что-то хитрое типа "username@example.com"

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


    1. kraamis Автор
      05.04.2022 09:02
      +1

      Удобство и безопасность - это антонимы.


      1. berez
        05.04.2022 09:39
        +4

        Все так.
        Но это не значит, что неудобство — это безопасность. :)
        Неудобно вам сделать удалось. Но насколько ваша схема безопасна?

        Допустим, мы знаем, что Вася использует ваш скрипт, и знаем его мнемоническую фразу для некого сайта. Задача: подобрать пароль к сайту Х.
        Что-то мне подсказывает, что количество вариантов для перебора будет сильно меньше, чем при тупом брутфорсе.


        1. kraamis Автор
          05.04.2022 09:43

          Ну если вызнаете фразу, то можно также знать и пароль. В чем разница?


          1. berez
            05.04.2022 10:12

            Разница в том, что знание Васиного пароля для сайта А не дает нам информации о пароле для сайта Б (ну, если Вася не совсем обалдуй, конечно). А вот знание мнемонической фразы может дать ключ вообще ко всей схеме создания паролей.

            Поясню: у пароля и у мнемонической фразы разные цели. Цель пароля — чтоб не подобрали (т.е. он максимально рандомный и, соответственно, труднозапоминаемый). Цель мнемонической фразы — чтоб ее полегче запомнить. И вот тут люди склонны запоминать не набор разных фраз (своя для каждого ресурса), а придумывают некую схему генерации таких фраз. Что и понятно: если бы человек легко запоминал рандомные уникальные фразы, то почему бы ему сразу пароли не запоминать?


            1. kraamis Автор
              05.04.2022 10:20

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


              1. berez
                05.04.2022 10:30
                +1

                Ну так а смысл тогда городить огород с хэшированием? Генерируем мнемоническую фразу для ресурса, берем первые две-три буквы от каждого слова и вбиваем их в качестве пароля:
                лошадь со скрепкой — лошсоскр — kjicjcrh


                1. kraamis Автор
                  05.04.2022 10:32

                  Это короткий пароль. На 64 символа вы так не сделаете.


                  1. berez
                    05.04.2022 10:57

                    На 64 символа можно всю мнемоническую фразу написать.
                    Собственно, это одна из рекомендаций по созданию сильных паролей. Например, Avast такое рекомендует (раздел «The revised passphrase method»).


      1. DirectoriX
        05.04.2022 09:56

        Это, конечно, так, но при почти такой же (недоказанной криптоаналитиками) безопасности можно получить на порядок больше удобства, если, например, шифровать файл с паролями с помощью стандартного AES-256 (на Python, с помощью OpenSSL, или вовсе создавать запароленный 7Zip-архив) - тогда достаточно запомнить всего одну мнемонику и безопасно хранить любые тексты в любом виде, а не только абстрактные пароли. KeePass примерно так и работает, кстати. Да, появится проблема синхронизации файла, но пока он зашифрован - его хоть на PasteBin можно выкладывать.
        А если вы боитесь, что ваш файл кто-то расшифрует... Уж поверьте, если кто-то научится расшифровывать AES-256 на практике - у всего мира будет гораздо больше проблем, чем лично у вас


        1. kraamis Автор
          05.04.2022 10:03

          А это еще менее удобно. Хранить где-то этот файл и каждый раз расшифровывать.


          1. polearnik
            05.04.2022 11:22

            поэтому придумали keepass котоыре делает это удобно и что самое главное безопасно. кстати можете заценить keepassxc чуть более продвинутый форк


      1. iregv
        05.04.2022 10:21

        Не всегда.

        pass + browserpass


  1. Admaer
    05.04.2022 08:58
    +1

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


    1. kraamis Автор
      05.04.2022 09:03

      Ее можно потерять, нужно руками водить пароль т.д.


      1. Admaer
        05.04.2022 09:14

        Можно несколько копий сделать и хранить в разных местах. Ручной ввод тоже можно обойти, создав копию этой карты в виде текстового файла. Правда тут встаёт вопрос безопасности хранения пароля в оперативной памяти, хотя я мало беспокоюсь о таких вещах. В этом вопросе я прибегаю к дуализму МОССАД/неМОССАД и если уж кто-то читает мои пароли из RAM, то пора сушить сухари.


        1. kraamis Автор
          05.04.2022 09:37

          И копировать по одному символу? Тут ошибиться как нефиг делать. Я одно время этим развлекался, но потом понял что это число в шпионов поиграть.


  1. aamonster
    05.04.2022 09:15
    +1

    https://www.opennet.ru/man.shtml?topic=otp-md5&category=1&russian=1 – примерно то же, что вы сделали, но стандартное и на линуксах вроде вообще есть из коробки. Бонус – может выдавать пароль в виде пяти слов, лично мне запомнить на минуту и вбить проще, чем кучу мусора. Я когда-то пользовался для нескольких ресурсов, поставив подсказки пароля вида "example.com 100 пароль".
    Но вообще менеджеры с хранением (с шифрованием на стороне клиента, чтобы совсем уж дурную утечку исключить) поудобнее. Хотя бы из-за того, что на некоторых сайтах свои требования к паролям ("Ваш пароль должен содержать цифры, буквы, завязку, развитие, кульминацию и неожиданный финал"), да и при необходимости менять пароль конкретного сайта проще (ну и менять мастер-пароль в принципе возможно – хотя при утечке это так себе утешение).


    1. kraamis Автор
      05.04.2022 09:39
      -1

      Про утечку и речь. У меня и утекать-то нечему. А если дело дойдет до паяльника, то тут уже ничто не поможет.


      1. aamonster
        05.04.2022 10:01

        В смысле – нечему? Утёк мастер-пароль (троян на вашей машине, к примеру) – утекли все пароли, алгоритм-то известен.

        В случае "классического" пм с шифрованием на клиенте – должен утечь не только мастер-пароль (опять же только с вашей машины), но и база с зашифрованными паролями (либо тоже с вашей машины, либо из места хранения). Ближайший аналог: представьте себе вашу систему, но seed и что там ещё хранится не локально, а где-то.

        У варианта без хранилища другой плюс: вы не потеряете свои пароли, если не будет доступа к хранилищу.


        1. kraamis Автор
          05.04.2022 10:08
          -1

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


          1. polearnik
            05.04.2022 11:25

            думаете троян будет заточен именно под базу парольного менеджера и кто-то будет копатся в набранном тексте чтоб отыскать пароль? вы настолько круты и инетресны что у вас буедт таргетированная атака? боюсь тут ваш метод хранения паролей найменьшая ваша проблема


  1. Vaitek
    05.04.2022 09:34

    Сделал скрипт на питоне, который генерирует пароль по псевдослучайному алгоритму. на вход подаётся: user name, service name, pin code. На выходе - пароль. Пин код хранится только у меня в голове)

    Скрипт завернул в брайтон в виде простейшей веб странички, и положил в телефон. Генератор паролей всегда с собой) Ну или на гитхабе, от него пароль пришлось выучить наизусть)


    1. ash_lm
      05.04.2022 09:40

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


      1. Vaitek
        05.04.2022 09:54

        Да, тут есть проблема, пока что реестр логинов хранится в голове. Но сервисы часто сами предсказывают. Логин в большинстве случаев это электронная почта, у меня выбор не велик)


    1. kraamis Автор
      05.04.2022 09:45
      +1

      Ну у меня примерно то же самое.


    1. xmcuz
      05.04.2022 10:05

      Есть готовое похожее расширение для браузера (для хрома и edge тоже есть): https://addons.mozilla.org/ru/firefox/addon/masterpassword-firefox/


      1. kraamis Автор
        05.04.2022 10:21

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


      1. krylov_sn
        05.04.2022 11:20

        немного потерялся - не понял почему тогда просто не использовать пароль который генерирует тот же firefox из коробки? зачем какое-то непроверенное расширение?

        хотя слышал, что к менеджеру паролей firefox были вопросы, но вроде проблемы пофиксили. Недавно завезли синхронизацию и автозаполнение в android


  1. kipar
    05.04.2022 09:52

    С тем же успехом в качестве пароля можно использовать мнемоническую фразу+число. Потому что взятие от нее хеша повышает стойкость только пока этим методом никто не пользуется. Если мы представим что этот метод вдруг стал известным и популярным - просто для подбора паролей начнут использовать не только словарь распостраненных фраз, но и хеши от элементов этого словаря и тогда стойкость будет обеспечиваться только стойкостью исходной фразы(+числа).

    Ну хорошо, один плюс у взятия хеша есть - если мнемоники имеют вид "<имя сайта> лошадьсоскрепкой" и список паролей одного из сайтов утечет, то если паролем было "<имя сайта> лошадьсоскрепкой" - придется беспокоится о том что кто угодно может увидеть этот пароль и понять каков пароль к остальным сайтам. А если брать хеш такой проблемы не будет. Но нормальный менеджер паролей (для параноиков - написать свой \ собрать из исходников предварительно проверив код) все равно надежнее.


  1. akalend
    05.04.2022 09:59

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


  1. vGimly
    05.04.2022 10:31
    +2

    Облачное хранение! Пароли, которые вы никогда не забудете и не потеряете!
    Вам надо только помнить один свой пароль! Говорили они.

    Реальность: 1password перестаёт принимать оплату и создавать новые аккаунты в России (а могли бы и заблокировать если могли бы).

    Но это лирика.

    Если серьёзно - то вы изобретаете HMAC. Всё уже придумано, до нас :)

    Логичное продолжение солёных хешей. В качестве части соли ведь можно использовать название сайта, в который собираетесь входить.

    То есть соль будет включать: 1.фиксированную парольную фразу, привязанную к сервису "генерации" паролей, 2. парольную фразу, которую будете вводить для разблокировки/активации вашей системы генерации паролей, 3. название сайта, где пароль потребуется.

    HMAC ещё включает двойное хеширование и "расширение" коротких ключей заполняющими байтами... H((PASS1 XOR PAD1) APPEND H((PASS2 XOR PAD2) APPEND DATA))

    PAD1 и PAD2 кроме наложения на пароли ещё и "расширяют" их длину. Если приглядеться к формуле, это фактически солёные хеши: Хеш(Соль+данные).

    HMAC применяют для относительно быстрого "подписания" данных. Для паролей - просто повторяют хеширование много-много раз, чтобы практически полностью исключить брутфорс. Так, например, работает парольная защита в криптоконтейнерах PFX/P12. Количество повторов - десятки-сотни тысяч раз. Вас же не будет напрягать, если ваш i7 ноутбук после ввода пароля выдаст результат не сразу, а через 2-3 секунды? А для брутфорсера это будет принципиально.

    H(соль+H(соль+H(соль+.....H(соль+данные))).. Количество таких циклов легко посчитать экспериментально - просто запустите на "рабочей" машине расчёт таких вложенных хешей - и остановите, когда время ожидания вас удовлетворит.

    Только не надо забывать, что может быть и такой вариант, когда вместо i7 ноутбука через несколько лет у вас будет слабенький arm из проекта "OLPC: 100$ PC for Africa Child". И там расчёт такого количества хешей займёт уже... пару минут...


    1. kraamis Автор
      05.04.2022 10:34

      Понятно, что люди поумнее меня до таких вещей уже додумались. Но я-то дилетант-любитель.


      1. vGimly
        05.04.2022 11:00

        Вместо фиксированной соли для каждой итерации можно использовать генератор псевдослучайных чисел, который инициализируется солью. Например довольно легко реализующиеся AES + CBC/CFB/OFB :) Причём соль можно запихать и в IV, и в KEY и в DATA...


  1. LordDarklight
    05.04.2022 10:56

    Идея не хранить пароли мне понравилась - но ожидал другую реализацию. Данная реализация мне совсем не понравилась. Подумаю на досуге над своей


    1. kraamis Автор
      05.04.2022 11:11

      Если здесь выложите - с удовольствием почитаю.


      1. LordDarklight
        05.04.2022 12:00

        Правильные идеи выше vGimly  уже изложил (ну и выше в коментах тоже обсуждали)


  1. hiddenman
    05.04.2022 12:47

    А вот есть такое простое расширение для Gnome: https://extensions.gnome.org/extension/825/password-calculator/ Делает, похоже, именно это?


  1. kahi4
    05.04.2022 13:11

    У менеджеров паролей есть преимущество, которое нужно в быту чаще, чем гипотетическая угроза угона keepass - они не будут подставлять пароли если домен не совпадает, что заставит вас задуматься почему на paypaI.com не подставился пароль, посмотреть сертификат и обнаружить заглавную i на конце.

    Ну а ещё если ваша схема будет скомпрометирована раз, то все, приехали.

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

    Правда с отказоустойчивой цепочкой восстановления доступа в случае чего да, пришлось повозиться, но это больше про бэкапы и доступ к ним удаленно.


  1. aborouhin
    05.04.2022 15:35
    +1

    Тут уже достаточно накидали доводов, почему менеджер паролей выигрывает у предложенной схемы. Добавлю ещё одну. Менеджер паролей - это ещё и элемент Вашего цифрового завещания. Если мне завтра упадёт на голову кирпич - то моя супруга знает, где найти мастер-пароль и, соответственно, получить доступ ко всем остальным 843 паролям, которые у меня в self-hosted Bitwarden'е лежат. Конечно, не все из них ей понадобятся, но довольно многие. А многие понадобятся другим людям, которым придётся дальше тянуть на себе ту IT-инфраструктуру, которую я администрировал.


  1. QuAzI
    05.04.2022 15:56
    +1

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

    Есть совершенно открытый, бесплатный, локальный, кроссплатформенный KeePassXC, консольную версию которого параноики могут запускать в совершенно изолированном контексте (да и не консольную тоже, тут уж кому как больше нравится усложнять себе жизнь). Его тащат в десятки дистрибутивов и проверяет антивирями, файрволами, всякими virustotal овердофига людей. Он решает проблемы паролей на раз и без всяких извращений. KeePass уже сам по себе стандарт в мире защиты, поэтому его же использует, например, JetBrains для хранения кредов в своих продуктах. До кучи KeePassXC умеет в TOTP, всякие хардверные штуки, прятать в себя SSH-ключи (в т.ч. есть интеграция с ssh-agent). Есть плагины для пользования в компании (KeeShare, в т.ч. для NextCloud). Есть интеграция в браузер. Синхронизировать можно любым удобным инструментом. Если вы не доверяете облаку - можно файл-ключ не ложить в облако и тогда даже если пароль как-то умыкнут (например встроенный в форточку OneDrive и синк буфера обмена уедут тварищу майору с подачи MS) - всё равно не расшифруют ничего.
    И для пущей переносимости KeePassDroid на телефоне.
    Запомнил один нормальный пароль, сгенерил файл-ключ и ВСЁ. Не нужно дурить вот этими костылями себе голову и обманывать себя и окружающих. Куда более прошаренные в защите ребята уже не раз нагрелись на такой "безопасности".
    Для остальных есть аппаратные менеджеры паролей.


  1. SquareRootOfZero
    05.04.2022 16:48

    Не уверен, что правильно понял идею автора, потому что он как-то слишком внезапно перешёл от её объяснения к рассказу о том, какие библиотеки надо импортировать на Питоне. Но, вроде, тут уже несколько лет назад был пост с описанием подобной схемы: вместо хранения паролей каждый раз генерировать пароль из адреса ресурса, юзернейма и мастер-пароля. Понятно преимущество подобной схемы: не надо таскать с собой парольную базу, обновлять её и синхронизировать — даже если внезапно придётся сбежать в Африку в одних трусах и без гаджетов, всё равно любой из своих паролей заново сгенерируешь (а один мастер-пароль уж как-нибудь запомнишь, тем более его и для обычных парольных менеджеров надо помнить по-любому). С другой стороны, понятны и недостатки: надо либо использовать заодно везде один и тот же логин, либо помнить все логины, либо таки где-то хранить и таскать с собой хотя бы эту базу логинов — тем более, если у тебя по несколько аккаунтов на ресурсе. А менять такие пароли как? Только сменой мастер-пароля и сменой всех паролей сразу везде? А если ресурс сперва назывался habrahabr.com, потом habr.com, а то еще geektimes.com, или как там его? А если для доступа к ресурсу надо задать что-то ещё кроме пары «логин/пароль»?


  1. xotta6bl4
    07.04.2022 11:09

    1. NTDLL
      07.04.2022 13:43

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

      Первое, существует некоторая зависимость каждой парольной фразы друг от друга. Второе - известный алгоритм (для совместимости это обязательно). И, конечно же, количество вариаций мастер пароля ограничено. Мы можем предсказать будущие пароли, вынудив пользователя алгоритма сменить мастер. И заодно все пароли, генерируемые от него.

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