Разработчик jaseg с сайта Github опубликовал элегантный алгоритм генерации уникальных паролей для каждого сайта, и на первый взгляд этот алгоритм выглядит вполне надёжным. Автор даже предложил тому, кто первым найдёт уязвимость, назвать алгоритм в его честь.
Итак, суть в том, что уникальный пароль генерируется командой в шелле:
(sha512sum ~/.salt -<<<www.example.com;sha512sum -)|cut -d\ -f1|sha512sum|cut -c-32
Первые 32 символа из результата sha512sum и являются уникальным паролем, который генерируется на основе трёх исходных данных: файл с солью, URL сайта и мастер-пароль.
Самое замечательное, что каждый раз, когда вы вводите эту команду, она возвращает одинаковый пароль, при условии, что файл с солью остаётся неизменным, URL остаётся тем же самым, и вы не забыли мастер-пароль. Таким образом, главное преимущество алгоритма в том, что пароли нигде физически не хранятся, они постоянно регенерируются. Если вам нужно ввести пароль для определённого сайта, то просто заново запускаете эту команду с указанием нужного URL.
В качестве соли можно использовать любой файл, или сгенерировать отдельный файл с использованием случайных данных:
(dmesg;env;head -c16 /dev/random)|sha512sum>>~/.salt; chmod 400 ~/.salt
Получатся, что если злоумышленник получит доступ к вашему компьютеру, то он получит доступ только к файлу с солью. Конечно, зная соль и зная несколько паролей с разных сайтов, злоумышленник получает в распоряжение две из трёх частей «головоломки». Теоретически он может восстановить мастер-пароль по этой информации, но на практике функция SHA-512 обеспечивает вполне достаточную защиту против такого брутфорса (кстати говоря, кто сказал, что все менеджеры паролей используют разную соль для каждого пароля?). Кроме того, для начала злоумышленник должен получить пароли с нескольких сайтов, что само по себе нетривиальная задача.
Кстати, похожим способом генерирует пароли стэнфордская программа PwdHash, реализованная в виде плагина к браузеру.