Блог
Коды двухфакторной авторизации рядом с профилем: что это меняет
Команда ARMANOS8 мин
Почему помощник ждёт вас каждый раз
Площадка просит шесть цифр при входе с незнакомого устройства, а рекламный кабинет часто просит их при каждом входе вообще. Цифры живут тридцать секунд и появляются там, где стоит приложение с ключом, то есть у вас в кармане.
Руки у помощника, а разрешение на работу выдаёте вы, и выдаёте вручную. На трёх аккаунтах это мелочь, на тридцати это ваш рабочий день целиком.
- 1
Пароль подошёл
Площадка просит второй шаг и ждёт шесть цифр.
- 2
Цифры живут полминуты
Окно короткое, и переслать их надо сразу.
- 3
Приложение стоит у вас
Ключ лежит на вашем телефоне, а работает помощник.
Ключ и код это разные вещи
Код это шесть цифр на тридцать секунд. Ключ это короткая строка, которую вы сняли с картинки QR один раз, когда включали защиту на площадке.
Код выходит из ключа и текущего времени, и обратной дороги нет: по десятку подсмотренных кодов ключ не вернуть. Поэтому отданный код стоит вам одной минуты, а отданный ключ стоит аккаунта, пока вы не привяжете второй шаг заново.
Приложение на телефоне делает ровно то же самое: держит ключ и показывает цифры по часам. Разница только в том, где ключ лежит и кто до него дотягивается рукой.
| Что вы отдаёте | Что это стоит |
|---|---|
| Один код | Одну минуту работы и одно сообщение |
| Ключ целиком | Вход в аккаунт, пока второй шаг не привязан заново |
| Пароль и ключ вместе | Аккаунт, которым пользуются без вас |
Три дороги и цена каждой
Дорог всего три, и две из них вы, скорее всего, уже прошли. Пересылать каждый код руками, отдать помощнику сам ключ в переписке или положить ключ туда, где открывается профиль.
Первая упирается в ваше время, вторая в то, что переписку не отозвать. Третья оставляет ключ на машине, а не в чужой переписке, и этим одним она от второй и отличается.
| Дорога | Чем платите |
|---|---|
| Пересылать каждый код | Своим вниманием весь рабочий день |
| Отдать ключ в переписке | Копией ключа, которую уже не отозвать |
| Положить ключ к профилю | Доступом того, кто открывает этот профиль |
Что меняется с ключом у профиля
Ключ и так лежит рядом с аккаунтом: в таблице, в заметке, в общем хранилище паролей. Рядом с профилем он оказывается на шаг ближе к тому окну, где этим аккаунтом и работают.
Тогда цифры появляются в том же окне, и телефон из работы выпадает вовсе. Программа считает код на этом компьютере, и в сеть за ним ничего не уходит.
Сам ключ окно обратно не показывает: в окне «Одноразовый код» из меню профиля видно цифры, остаток секунд и имя аккаунта, а на карточке стоит только метка 2FA. Вставили один раз, а дальше вы работаете только с цифрами.
- 1
Второе устройство не нужно
Цифры появляются в том же окне, где живёт профиль.
- 2
Искать нужную запись не надо
Ключ принадлежит профилю, сопоставлять по имени нечего.
- 3
Перепечатывать не надо
Код вы копируете кнопкой, а в форму его впишет сценарий.
- 4
Наружу ничего не идёт
Ключ и часы на этом компьютере, и сеть для кода не нужна.
Кому вы открываете аккаунт
Ключ у профиля означает ровно одно: кто открывает этот профиль, тот входит в аккаунт без вас. Это и есть цена, и назвать её вслух стоит до того, как вы отдадите первый профиль.
На macOS и Linux ваши ключи в этом файле читает только хозяин учётной записи компьютера, а на Windows их закрывает только папка пользователя. Соседу по машине и чужой программе это разные преграды, и вторая слабее.
Отозвать ключ, как пароль, нельзя: пароль вы смените за минуту, а второй шаг придётся привязывать на площадке заново. Поэтому решение отдать ключ это решение на весь срок работы с этим человеком.
Что не уезжает с вашей машины
Ключ не уходит на сервер: такого поля там нет вовсе. Войдя на другой машине, вы увидите профиль, а ключа рядом с ним не найдёте, и обратная синхронизация его тоже не стирает.
Куки и пару входа от профиля сервер тоже не принимает: тело с таким полем он отвергает целиком. ARMANOS держит ключ, куки и вход профиля на той машине, где вы их завели, и никуда не шлёт их сам. Общую папку для сессий вы указываете сами, и тогда куки и входы едут в неё.
- 1
Сервер без такого поля
Ключа на нём нет, и взять его оттуда неоткуда.
- 2
Вход на второй машине
Профиль приедет, а ключ останется на первой.
- 3
Перенос под паролем
Ключ везёт только архив профиля, и открывает его ваш пароль.
Как ключ попадает к помощнику
Общий доступ к профилю ключа не привозит: помощник откроет профиль со своей машины, а цифр там не будет. Ключ уезжает двумя дорогами: переносом профиля вместе с сессией, где файл открывает назначенный вами пароль, и экспортом профиля кнопкой «Экспорт», если вы сами нажали «Включить секреты». У второго файла пароля нет.
Копия профиля ключа тоже не берёт: копия это новый аккаунт, и чужой второй шаг ей ни к чему. Чужой пароль файл переноса не открывает вовсе, и вместо содержимого приходит честный отказ.
Вместе с профилем в архив уезжает и сессия: куки, входы и состояние сайтов. Помощник садится в разогретый профиль, а не заходит в тридцать аккаунтов заново с чистого листа.
Отчего верный ключ даёт неверный код
Чаще всего дело не в ключе, а в его настройках. Голый ключ несёт только сам секрет, а целая строка otpauth:// несёт ещё число знаков, шаг и алгоритм, и необычная площадка задаёт их по-своему.
Тот же ключ с восемью знаками, шагом в шестьдесят секунд и алгоритмом SHA256 даёт один код с этими настройками и совсем другой без них. Аккаунт после такого выглядит потерянным, хотя потерялись три поля.
Строку, которая считает входы, а не секунды, программа при вставке отвергает сразу: временных цифр из неё не выйдет никогда. А пробелы, дефисы, нижний регистр и знаки равенства в ключе помехой не будут.
| Что вы вставили | Что получите |
|---|---|
| Целую строку otpauth:// | Знаки, шаг и алгоритм той площадки, которая её выдала |
| Голый ключ | Шесть знаков, шаг тридцать секунд, SHA1 |
| Строку, считающую входы | Ключ не ляжет, и неверных цифр не будет |
| Строку с опечаткой | Отказ при сохранении, и на диск ничего не ляжет |
Совпадут ли цифры с чужим приложением
Помощник вводит цифры на той же площадке, где их ждут от телефона, и расхождению взяться неоткуда: шаг и способ задаёт стандарт RFC 6238, один на всех. Шесть эталонных образцов этого стандарта, включая самый дальний на времени 20000000000 секунд, дают ровно те же цифры, что и ваше приложение на телефоне.
Отдельная беда это часы: цифры идут по часам компьютера, и уехавшие часы дают то, чего площадка не ждёт. Несколько неверных попыток подряд площадка читает как подбор и дальше закрывает вход сама.
Приложение на телефоне при этом можно не выключать: два места с одним ключом друг другу не мешают и дают одни и те же цифры. Это же и способ проверить себя в первый день.
Ваш собственный вход стоит отдельно
Второй шаг на аккаунте площадки и второй шаг на вашей собственной учётной записи это две разные двери. Первую вы отдаёте помощнику вместе с профилем, вторую не отдаёте никому.
На вашем входе одно и то же число второй раз не подходит, десять промахов закрывают дверь на время, а при включении вы получаете десять запасных кодов, каждый на один раз. Потеряв телефон, вы войдёте запасным кодом, а помощник не войдёт ни тем, ни другим.
Какой порядок выбрать себе
Если помощник один и аккаунтов три, дешевле оставить как есть: ваше время на десять кодов в день стоит меньше, чем разбор при расставании. Если аккаунтов тридцать, пересылка кодов и есть та работа, ради которой вы нанимали человека.
Если аккаунт вы отдаёте насовсем, ключ едет вместе с профилем, и после расставания второй шаг надо привязать заново. Если аккаунт остаётся вашим, отдавайте доступ к профилю, а не ключ.
Есть и промежуточный порядок: доступ к профилю вы отдаёте, а ключ оставляете себе. Тогда помощник работает в профиле, на втором шаге всё равно пишет вам, и каждый вход остаётся вашим решением.
| Ваш случай | Что делать |
|---|---|
| Три аккаунта и один помощник | Оставить коды у себя и пересылать их |
| Тридцать аккаунтов и смены | Положить ключ к профилю на машине помощника |
| Аккаунт отдаёте насовсем | Перенести профиль под паролем и сменить пароль аккаунта |
| Аккаунт остаётся вашим | Дать доступ к профилю без ключа и держать цифры у себя |
Чего это не утверждает
- Это не утверждает, что ключ у профиля безопаснее телефона. Он удобнее, а доступ к аккаунту при этом получает каждый, кто открывает этот профиль.
- На диске ключ лежит незашифрованным. На macOS и Linux его закрывают права на файл, на Windows только папка пользователя, и обещать там больше нечего.
- Потерянный ключ потерян. На сервер он не уходит, и собрать его обратно по выданным цифрам нельзя, поэтому запасные коды площадки держите отдельно от профиля.
- Картинку QR программа не читает. Вы вставляете текст ключа или строку otpauth://, а снимок экрана телефона она не разберёт.
- Это не про вход в вашу собственную учётную запись. Тот второй шаг живёт на сервере, с запасными кодами, и помощнику он не достаётся ни при каком порядке.
Где это можно увидеть самому
Каждое число выше выходит из кода, который можно открыть и запустить.
- Коды сходятся со всеми шестью эталонными векторами стандарта, включая самый дальний
- apps/desktop/src/lib/totp.js · apps/desktop/test/totp.js
- Строка, считающая входы вместо секунд, за временную не принимается
- apps/desktop/test/totp.js
- Число знаков, шаг и алгоритм переживают восстановление профиля
- apps/desktop/src/main/main.js · apps/desktop/test/config-import-2fa.js
- Файл с ключами ложится с правами только для хозяина
- apps/desktop/src/lib/secureFile.js · apps/desktop/test/secrets-on-disk.js
- Ключ переживает вход на другой машине и не стирается синхронизацией
- apps/desktop/test/sync-preserves-local.js
- Копия профиля ключа и пары входа не берёт
- apps/desktop/src/lib/перенос-профиля.js · apps/desktop/test/profile-clone.js
- Архив профиля везёт ключ, а чужой пароль его не открывает
- apps/desktop/src/lib/bundle.js · apps/desktop/test/profile-bundle.js
- Код выдаётся только по своему токену и никогда странице из сети
- apps/desktop/src/lib/local-api.js · apps/desktop/test/local-api-gate.js
- Куки и пару входа сервер отвергает целиком
- apps/server/test/куки-и-входы-сервер-не-примет.js
- На вашем входе число не подходит дважды, а запасной код годится один раз
- apps/server/test/two-factor.js
Вопросы
- Помощник увидит мой ключ или только цифры?
- Окно «Одноразовый код» отдаёт цифры, остаток секунд и имя аккаунта, а сам ключ обратно не показывает. Но машина, на которой лежит профиль, хранит и ключ тоже, поэтому считайте его отданным вместе с машиной.
- Я дал доступ к профилю через команду. Ключ уехал?
- Нет. На сервере такого поля нет, и с общим профилем ключ не едет: помощник со своей машины увидит профиль и не увидит цифр.
- Как забрать доступ обратно?
- Сменить пароль мало: ключ останется рабочим и после этого. Заберите доступ к профилю и привяжите второй шаг на площадке заново, тогда старый ключ перестанет давать верные цифры.
- А если у аккаунта восемь знаков или шаг в минуту?
- Вставляйте целую строку otpauth://: она несёт эти настройки сама. У голого ключа их нет, поэтому программа возьмёт шесть знаков, тридцать секунд и SHA1.
- Может ли страница из сети вытащить мой код?
- Нет. Вызов, похожий на пришедший со страницы, программа отклонит при любом токене, и цифры на страницу не уйдут.
- Полсотни ключей вставлять по одному?
- Ключ приезжает столбцом таблицы вместе с профилями, и заголовок столбца подгонять не нужно. Негодный ключ просто не ляжет в профиль: неверных цифр не будет, но отдельной строки с причиной окно не покажет, профиль придёт без ключа.
Рядом с этим
Одноразовые коды в профиле
Куда вставить ключ и что после этого видно на карточке.
Двухфакторная авторизация
Что это за второй шаг и какими они бывают.
Перенос профиля
Что уезжает вместе с профилем и под каким паролем.
Бесплатная проверка отпечатка
12 значений, прочитанных в вашем браузере, и ни одного запроса наружу.
Посмотрите, что отвечает ваш браузер
Проверка читает 12 значений и никуда их не отправляет.