Пароли являются старейшим методом аутентификации в информационных технологиях и до сих пор широко используются.
Увы, запомнить пароли ко всем интернет-ресурсам просто невозможно, при условии, что они все разные и сложные! Здесь на помощь человеку приходят менеджеры паролей, взяв на себя эту задачу: человек запоминает только один мастер-пароль, который дает доступ ко всем остальным.
Существующие менеджеры паролей мне не понравились: неудобно синхронизировать базу паролей между разными устройствами и операционными системами, к тому же программы-менеджеры часто откровенно плохо защищен .
Однажды я читал статьи по криптографии, и мне пришла в голову мысль: а почему бы не сделать менеджер паролей, который вместо хранения паролей будет их вычислять? Первая реализация этой идеи, которая приходит на ум, — это криптографические хэш-функции.
На первый взгляд все круто: выбираем надежную функцию (скажем, SHA-3 в 224-битной версии), даем ей на вход мастер-пароль qwerty и тип счета вк , на выходе мы моментально получаем 56 символов из набора 0123456789abcdef. Я сразу нашел два похожих проекта: взломан И потенциально взломанный .
В таком подходе есть большая проблема: криптографические хеш-функции созданы, помимо прочего, максимально быстрыми и нетребовательными к ресурсам, а потому можно устроить словарь или полный перебор мастер-пароля с помощью перехваченного пароля.
для одного сайта на CPU (относительно медленно), GPU, FPGA (гораздо быстрее), ASIC (очень быстро).
Для проведения таких атак на популярные алгоритмы хеширования без использования соли также можно использовать радужные таблицы, которые значительно ускоряют процесс взлома ЦП.
К счастью, есть еще один вариант реализации — функции извлечения ключей.
Если в двух словах, то они выполняют хеширование, но сравнительно медленно (скажем, одну секунду на обычном процессоре) и с относительно большим потреблением ресурсов (скажем, 16 мегабайт ОЗУ), чтобы максимально затруднить брутфорс и атаки по словарю.
Среди современных функций, знакомых мне ПБКДФ2 , bcrypt И сценарий scrypt выглядел лучше всего: создан с учетом опыта первых двух, успешно противостоит вычислениям на графических процессорах и микросхемах (как FPGA, так и ASIC) и рассчитан на гибкость при настройке под любые задачи.
Я думал о реализации этого проекта, но по каким-то причинам отложил его в долгий ящик.
И зря.
Криптограф Надим Кобейси сделал вот так менеджер паролей npwd на JavaScript (работает как настольное приложение через Node.JS).
Я установил утилиту на компьютер под управлением Linux и Windows, а также на ноутбук под управлением Linux, начал использовать её в бою, и она мне очень понравилась.
Вы вводите в приложение единый мастер-пароль и тип аккаунта (например, «твиттер»), и через пару секунд в вашем буфере обмена уже есть рассчитанный сложный пароль специально для этого аккаунта, и взламываете свой мастер-пароль (читай: все ваши пароли) подобрать пароль для одного аккаунта будет очень и очень сложно.
Но была и проблема.
Версия для Windows действительно выдавала пароль через пару секунд, а вот под Linux (в том числе и на том же компьютере!) на расчеты уходило около 15 секунд, что раздражало.
Сначала я просто уменьшил одну константу, сделав мастер-пароль менее безопасным, но потом подумал — а почему бы не переписать приложение на C, оно, наверное, будет работать гораздо быстрее! Особенно меня прельщала мысль, что у меня уже давно был план по этому проекту, но я затормозил, и кто-то реализовал его раньше меня.
После нескольких дней неторопливой работы я сделал свой cpwd менеджер паролей , полностью совместим с оригиналом.
Это было весело! После небольшой оптимизации мне удалось добиться желаемой высокой скорости.
Я не пробовал портировать cpwd в Windows, но это должно быть легко.
На странице проекта на GitHub я собрал коллекцию ссылок на подобные проекты в академическом мире и за его пределами — оказалось, что идея на самом деле довольно старая.
Конечно, это не панацея, но мне помогает. При использовании столкнулся с проблемой: на некоторых сайтах есть интересные требования к паролям типа «не более 20 символов», «должна быть заглавная буква, строчная буква, цифра и спецсимвол», в итоге , сгенерированный пароль npwd/cpwd иногда требует изменения вручную перед вводом .
К счастью, таких сайтов немного.
Оригинал опубликован в моем блоге 07.08.15. Прошло 5 лет, а я до сих пор пользуюсь этой утилитой.
Теги: #информационная безопасность #Криптография #менеджер паролей #хеширование #функции получения ключей
-
Hadoop: Решение Реальных Проблем
19 Oct, 24 -
Пять Причин Неудачи Windows Vista
19 Oct, 24 -
Список «Оправданий» За Отказ От Вашего Блога
19 Oct, 24 -
Netbsd: Что Не Так С Консерваторией
19 Oct, 24