Комментарии 64
замену Google Authenticator
А импорт ключей из него при этом есть?
keepassxc умеет в TOTP
И к нему есть браузерный плагин, keepassxc-cli для консольщиков, автоэкспорт ключей SSH в SSH-агента... непонятно, чего людям не хватает.
Хотя, строго говоря, с точки зрения безопасности 2FA лучше хранить не с паролями, а на отдельном устройстве (чем и является телефон с его Google Authenticator, который при желании можно заменить на Aegis)
Полагаю, мало кто знает, что менеджеры паролей поддерживают TOTP. В том же keepassxc эту функцию нужно включать. Если не знать о ее существовании, то шансы случайно наткнуться ноль шансов.
По безопасности есть консёрны. Потерять телефон с TOTP несоизмеримо проще, чем лежащую в каком-нибудь дропбоксе базу keepassxc. Поэтому TOTP с телефона приходится бэкапить, и тогда это передстает отличаться от бекапа keepassxc.
Второй фактор хорошо защищает от ситуации передачи пароля по ненадежному каналу в ненадежное место (MITM с корневыми сертификатами, слив сайтом паролей в плейн тексте и все вот это). Насколько я понимаю, основная защита второго фактора - она для обычных пользователей с одним слабым паролем на все сайты. Если мы используем менеджер паролей - то у нас уже очень высокий уровень безопасности. Заморачиваться с разными бэкапами паролей и TOTP это, ИМХО, уже оверкилл.
Бэкапить нужно всё, так что это не аргумент.
Если вы не делаете бэкапы чего-то ценного под предлогом "да это сложно потерять" - по закону Мерфи именно это вы потеряете.
А раз так, то хранить лучше на телефоне, чтобы факторы были физически разнесены. Храня всё на ПК вы сознательно ослабляете второй фактор.
Потерять телефон с TOTP несоизмеримо проще
Поэтому у Aegis есть возможность сбэкапить и перенести всякое, да и Google Authentificator впроде вполне переносибельный между "своими" должен быть (но зачем, если есть Aegis). Вот хардверными ключами я так и не проникса.
И не помню чтобы прям включал ручками TOTP или сильно страдал, вопрос лишь в "поинтересоваться как сделать", вот SSH-ключи залить или сканер пальцев да, троху надо поковыряться... особенно если SSH-агента ещё прокидывать куда-нибудь внутрь WSL на фортках.
"высокий уровень" - понятие относительное. Любой залётный троян может утащить что нажимали на клаве и все найденные *.kbd(x). Троян чуть посложнее даже сможет пройтись по настройкам менеджера паролей и прихватить файл-пароль использованный вторым фактором к .kbd(x). Поэтому для ключевых учёток лучше перебздеть. Тем более что 2FA редко повторно спрашивается для сайтов с которыми работаешь регулярно.
нуу... если вам принципиально TUI, то и сделали бы его над keepassxc-cli. KeePassXC что-то да знают про безопасность, аудиты там какие-то проходили, а главное - всё уже сделано в лучшем виде.
С другой стороны я так и не понял откуда у вас в консоли постоянная необходимость дёргать муторный 2FA. Для браузеров обычно 2FA спрашивается крайне редко, при первой авторизации "с этого хоста на сайте". Для cli обычно генерятся токены. А 2FA прям в консоли я что-то и не припомню чтобы мне хоть раз был необходим. Это точно не история про tmux и vim)
ну почему история не про tmux и vim, если эти инструменты я использую постоянно, то почему бы не сделать в их системе и управлении. У меня много всяких TUI для работы с разными направленями, от теста, до работы с БД, докером
Мне приходится день начинать всегда с TOTP, и это примерно около 6-7 сайтов, плюс бывает приходится из разных браузеров. Нетривиальные задачки, когда под эмуляторами сидишь или в виртуализации и прям оттуда приходится вводить.
Вообще данная туишка появилась, когда мне в одном сервисе требовалось прикрутить 2Fa, что для дебага требуется постоянно добавлять новые секреты и удалять их. Понятно, что не каждый день прикручивается 2Fa, но спустя пол года пользования вижу только плюсы от использования в терминале - так как это основная моя среда пребывания :D
С другой стороны я так и не понял откуда у вас в консоли постоянная необходимость дёргать муторный 2FA.
Пример из жизни - у одного из клиентов был OpenVPN с TOTP и ограничением времени сессии.
Если мы используем менеджер паролей - то у нас уже очень высокий уровень безопасности.
Менеджер паролей надо уметь готовить использовать, вот я помню как-то поставил галочку "не спрашивать пароль при открытии окна" и через пару месяцев забыл мастер пароль... Как я задолбался потом восстанавливать пароли на каждом используемом сервисе!
в gopass вроде как тоже) проблематика не в этом стояла. Я хотел простую и легкую TUI под управлением vim, о чем писал в статье. keepassxc-cli - управлять именно командами, то есть их необходимо писать ручками, либо забивать алиасы, для быстрого доступа. keepassxc - gui, которое в моем случае только будет больше времени занимать.
Как и все возможные браузерные расширения - это все есть, кому-то удобно, но реализации TUI я нормальной не нашел
Bitwarden / Vaultwarden тоже умеет, и это будет свой сервер, что задачу синхронизации/бекапа решает оптимально.
Но для консоли там именно CLI, а не TUI, т.е. надо или помнить название конкретной записи, или сначала выполнять команду list и просматривать список, а потом get - и получать код.
Хотя вообще я с трудом представляю себе потребность в TOTP в консоли, по-моему, в 95% случаев оно надо в браузере - так браузерным плагином коды заполнять и удобнее всего.
Command + tab - go2fa уже открыт, дальше просто накликиваю клавиатурой hjkl и на Enter копирую и обратно Command + tab + Enter.
Тут все происходит без мышки и тачпада, что в моем случае очень удобно, так как не переключается контекст клавиатуры и мыши (тачпада)
У браузерных плагинов есть проблема - они ставятся в браузер, для работы я использую Safari, Chrome, Firefox и Firefox Dev - поэтому тут либо ставить и синхронить на все, а скорее всего под каждый браузер еще разное расширение будет, либо использовать мобилку, либо использовать GUI, что в данном случае звучит более логично.
Ну и опять же, мы делаем и подбираем софт под себя, чтобы было удобно, в моем случае использовании TUI обосновано привязкой к терминалу и вводу VIM, я не задумываюсь, когда использую такое управление и происходит это максимально быстро
У Bitwarden есть расширения под все перечисленные браузеры плюс мобильное приложение, надо всего лишь один раз их установить и залогиниться на свой сервер (ну или на сервер Bitwarden, если нам нечего скрывать :). После чего при автозаполнении логина и пароля (что в десктопных браузерах делается по хоткею) TOTP код для соответствующей записи автоматически копируется в буфер обмена. Или сразу автозаполняется, если поле для его ввода на той же форме, что и логин с паролем (но такое редко встречаю). Понимаю, что каждому привычнее своё, но тут по скорости вне конкуренции :)
с трудом представляю себе потребность в TOTP в консоли
teleport, который централизованная замена индивидуальных ssh, вполне себе консольный и умеет в 2FA. Для случая, когда надо дать доступ многим людям на сервера без ввода пароля и не раскладывая их ключи на сотни серверов — вполне.
В keepassXC создаём новую запись, сохраняем, кликаем правой кнопкой мыши
![](https://habrastorage.org/getpro/habr/upload_files/eae/ee4/3a7/eaeee43a7c0510b0b1fde44b17f063ff.png)
Выбираем TOTP/Set up TOTP... (оно не даёт себя скриншотить, так что только основная менюшка, без настройки)
Вводим секретный ключ. Ключ можно извлечь из аутификатора так https://habr.com/ru/articles/802953/comments/#comment_26655983
За инструкцию извлечения секретов спасибо, учту)
По поводу keepassXC писал выше, что мне не нужны GUI, я 90% времени нахожусь в терминале и требуется TUI, keepassXC-cli - это решение чисто под команды, что тоже не особо ускоряет процесс получения TOTP ключей
Вот мне кажется, что основная линия защиты в двухфакторной авторизации это как раз наличие двух различных устройств. Просто если злоумышленник таки получил доступ к устройству, то если на нём есть и второй фактор, то он не будет работать. Ну разве что задержит злоумышленника минут на 15.
Мне кажется, что путать "разные факторы" и "разные устройства" - очень популярное заблуждение. Разные факторы - это знание или владение. Пароль можно знать и узнав (подсмотрев, скачав из утечки и т.п.) использовать повторно. Код TOTP знать бесполезно, он каждый раз разный, надо владеть (иметь доступ) генератором этих кодов. А вот секрет TOTP - тот же фактор, что и пароль, но он более защищён от перехвата, т.к. в явном виде не отображается и не используется. А разные устройства - это дополнительный способ обезопасить себя, но совершенно параллельный наличию разных факторов.
А вот секрет TOTP - тот же фактор, что и пароль, но он более защищён от перехвата, т.к. в явном виде не отображается и не используется.
Так и пароли уже давным давно передаются по защищённым каналам, либо в защищённом виде. О массовых атаках MITM пока не особо слышно.
Главный канал их утечки - локальное и серверное хранилище. И вот не совсем понятно чем тут поможет TOTP, если секрет точно так же могут слямзить как и пароль/хеш. Пароль даже надёжнее если он рандомный и длинный - такой брутом по хешу фиг восстановишь. А вот секрет он ж прям в открытом виде должен лежать. Либо ключи его дешифрации точно где-то рядом.
Вообще менеджеры паролей изрядно спутали всю концепцию многофакторной аутентификации. И пароль стал не вполне фактором знания (никто его не вводит и не помнит, для его заполнения нужен доступ к менеджеру паролей), и TOTP - не вполне фактором владения (т.к. секрет можно перехватить, хоть и не так просто).
Без менеджера паролей главный канал утечки, мне кажется, - по-прежнему вне конкуренции стикер на мониторе :) Ну может утечки ещё для пользователей, у которых все пароли одинаковые, и во взломанном интернет-магазине игрушек он тот же, что и на корпоративную почту. И именно этот вектор атаки замечательно прикрывает TOTP.
А с менеджером паролей нет готовых рецептов, что вот тут такой фактор, тут такой, - надо индивидуально оценивать векторы атаки и риски.
Ну может утечки ещё для пользователей, у которых все пароли одинаковые, и во взломанном интернет-магазине игрушек он тот же, что и на корпоративную почту. И именно этот вектор атаки замечательно прикрывает TOTP.
Чем именно он прикрывает? Только тем что секрет обязан быть рандомным. Но с таким же успехом можно обойтись и без одноразовых TOTP, просто обязывать пароли быть рандомными.
Насколько я слышал историю, концепция HOTP иначально для того и создавалась чтобы вынудить юзера использовать спецжелезо/софт, чтобы юзер не мог сам придумывать и использовать всякие 1234 и приклеивать их на стикерах и хранить в текстовых файтах. Т.е. временный пароль не предназначался для предотвращения кражи или перехвата, он только для принуждения пользоваться спецсредством. А уж TOTP и использование как второй фактор - это "постольку поскольку".
Причем это должно быть устройство ключ из которого не скопировать даже получив доступ.
Конечно оно должно быть аппаратно отдельным.
К сожалению, удачных сходу найти не удалось. В целом народ не озабочен безопасностью совершенно. Энтузиасты делают всякие мультипассы, но они сыроваты.
раз: https://www.passwordstore.org/
два: https://github.com/tadfisher/pass-otp#readme
три: велосипед ?
не увидел тут TUI :)
а он там есть ! попугайские раскраски не обязательны.
и немного хулиганства: https://www.youtube.com/watch?v=xzb9anBoEtU
Круто, если бы не сидел на 1password family account (который идёт бесплатно к рабочему), то заюзал бы. Хотя наверное всё-таки нет, потому что до 1password был pass, скорее все таки туда бы добавил otp плагин.
Так-то круто, не желаете сделать ссылку на файл с инструкцией по использованию внутри?
Да и не особо я знаток шифрования, если есть полезная информация, поделитесь, изучу.
Читаю книгу по криптографии, так что немного подушню.
Здесь нет смысла использовать RSA. Во-первых, всё хранится локально, так что симметричного шифрования вполне достаточно. Во-вторых, асимметричное - это долго и ограниченно. Думаю, AES будет достаточно.
Возьму на заметку. Какую книгу читаешь?
Немного позанудствую.
В принципе любую, как с дистрибутивами линукса - лучшая книга та, к которой прилагается знакомый, разобравшийся в теме, или же самый дорогой фактор - время и тетрадка с ручкой.
Здесь или может быть в другом месте попадалась шпаргалка по криптографии.
Там коротко, без математики объяснялось различные методы - симметричное, ассиметричное, подпись, имитозащита...
Чуть глубже базовые методы. (S-block, ...)
Осознание что, как и насколько сложно/долго и т.д. - уже помогает при выборе в конечном счёте.
А за решение - большой плюс, натолкнул меня на решение другой моей задачи!
Bubbletea выглядит привлекательно, но при ближайшем рассмотрении не так уж очевиден. Кому как, а мне их примеры слабо помогли -- обходил либу стороной, пока не попался детальный разбор с советами, как строить приложение на Bubbletea: https://leg100.github.io/en/posts/building-bubbletea-programs/ -- тут все в одной статье и мне оно показалось более понятным, чем доки в проекте. Во всяком случае по этой статье получилось сделать что-то себе полезное и рабочее на этой либе.
Здесь в статье на хабре тоже часть нюансов работы с либой освещена, за что автору отдельное спасибо!
Использую Bitwarden. Нужно купить подписку, что-то вроде 10$ в год и тогда появится возможность добавлять TOTP коды к записям паролей.
У них также есть CLI, можно в консоли что-то получать (все) ну и автоподстановка на сайтах по горячим клавишам. После подстановки пароля TOTP код копируется в буфер чтобы сразу его вставить на следующем этапе.
А вообще TUI – топ!
Есть небольшой недостаток того, что с Google Authentificator нельзя экспортировать ключи в каком-либо формате, чтобы потом их адекватно перенести в go2fa
В смысле? Бутерброд – Transfer codes – Export codes. Правда, выдаст QR-код, но его перевести в текст несложно.
Крутая идея для любителей терминала! Но хотелось бы увидеть больше деталей по безопасности: как именно шифруется локальное хранилище, что делать в случае потери приватного ключа и как предотвратить утечку TOTP при копировании в буфер обмена? Интересно было бы узнать и о способах автоматической миграции с Google Authenticator, чтобы не пришлось вручную переоформлять все 2FA
Спасибо) не вижу смысла переживать из-за безопасности отечки TOTP в буфер обмена, так как его время жизни очень ограничено. В основном до 30секунд, но бывает окна в пару минут до и после. Плюс, если вы уже использовали TOTP, то обычно один и тот же нельзя использовать дважды. Когда вы копируете с Google Authenticator TOTP, то он так и будет висеть в буфере до момента, пока его не затрут.
В случае потери приватного ключа потеряете возможность расшифровки секретов, поэтому лучше такого не допускать.
Вот на счет автоматической миграции @aamonsterи @adrozhzhov писали, как можно получить ключи из Google Authenticator, что упрощает процесс переноса. Но я пока не ознакамливался, как руки дойдут, то смогу посмотреть и может получится сделать авто-импорт
Тоже стараюсь использовать TUI приложения в sway (console, tmux), если есть возможность. Но мне gopass + rofi вполне достаточно, и есть вроде для мобильных клиентов(на Аврору пока нет). Думаю, надо добавить в ваше приложение возможность безопасного расшаривания(переноса) секретов между хостами.
А stoken не подошёл бы?
Консольный, стабильный как кирпич :) Может чего-то не хватает конечно...
UPD: да, он похоже только RSA умеет, так что это не совсем то же самое
какого это создавать свои TUI приложения.
Каково! А какого - в данном контексте - может быть только х...я)
Много ли смысла во "втором факторе", который располагается на том же устройстве, что и "первый фактор" (т.е. пароль в каком-нибудь Keepass)?
Там где-то выше уже происходит по этому поводу дискуссия, можете присоединиться :D
Я считаю должна быть какая-то грань между безопасностью и удобством. Можно зашиться в безопасность, понаставить тройных мультифакторок и на каждый ввод TOTP еще добавлять пароль для подтверждения, что это вы, который будет меняться каждый час, в зависимости от времени суток. Как минимум, если вы по какой-либо случайности слили пароль или кто-то (имеется ввиду сервис) слил ваш пароль, то 2Fa, где бы хранилка не находилась, обеспечит эту безопасность.
А так, что устройство могут скомпрометировать, что файлы слить. Осторожность должна быть, но не уходить же в крайности. Тут уже лично решайте, как вы обеспечиваете себе безопасность, хранить это на разных устройствах или нет.
Внешнее устройство скомпрометировать можно, но при настоящем 2фа вам придется скомпрометировать и его и компьютер. А это уже совершенно другой уровень геммороя.
А так да. Или некоторые неудобства или относительное отсутствие безопасности.
Чтобы увеличить удобство, пожертвовав безопасностью, нужно использовать обычные пароли, безо всяких 2FA.
Чтобы увеличить безопасность, пожертвовав удобством, нужно использовать второе устройство (телефон с генератором TOTP, usb-ключ...), которое останется под контролем в случае взлома первого устройства (компа с менеджером паролей).
А Вы добавляете неудобство безо всякой пользы для безопасности: если злоумышленник получит доступ к первому и единственному устройству с паролями, то он получит и доступ к TOTP. Если на сервисе утекут основные пароли (хранящиеся обычно в виде криптокойских хешей), то и TOTP-ключи (которые необходимо хранить в открытом виде) тоже, скорее всего, утекут.
Точно такая же проблема у всех TOTP менеджеров и менеджеры паролей, которые поддерживаются TOTP на том же устройстве, Keepass, Bitwarden, Vaultwarden - если вы переживаете, что ваше устройство могут скомпроментировать и вы готовы пожертвовать удобством, ради безопасности, то ваш вариант не использовать все это, а раскидывать на другие устройства. Тоже самое относится ко всем расширениям в браузерах, которые автоматически подставляют totp и пароли.
На счет использования только паролей без 2fa я не согласен, ваш пароль могут скомпроментировать, не взламывая ваше устройство, и большинство учетек происходит по вине пользователя, а не устройства. Сейчас вы скорее зайдете на фишинговый сайт и оставите там свой пароль, чем вас взломают.
Да и Google Authenticator может попасть под ту-же проблему, многие используют сохранение паролей в браузерах, а это значит, что он доступен и с мобильного устройства, если у вас "увели" телефон, то тут точна такая же проблема в безопасности (опуская момент, что вам нужно разблокировать устройство, получить фейсайди, если он есть)
Все это - демагогия на тему безопасности не совсем под тематику этой статьи, она больше про удобство получения totp через терминал и TUI, а не про то, как это безопасно. У каждого разная потребность в уровне безопасности и удобства, так что я не могу согласиться с вашими словами, но ваше мнение вполне обосновано с вашей стороны
когда смотрел, думал что уже давно твоим https://github.com/eklairs/tlock пользуюсь, оказывается перепутал
Надоело постоянно пользоваться телефоном, поэтому написал замену Google Authenticator в виде TUI