Перейти к содержимому

Блог

Коды двухфакторной авторизации рядом с профилем: что это меняет

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

Команда ARMANOS8 мин

Почему помощник ждёт вас каждый раз

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

Руки у помощника, а разрешение на работу выдаёте вы, и выдаёте вручную. На трёх аккаунтах это мелочь, на тридцати это ваш рабочий день целиком.

  1. 1

    Пароль подошёл

    Площадка просит второй шаг и ждёт шесть цифр.

  2. 2

    Цифры живут полминуты

    Окно короткое, и переслать их надо сразу.

  3. 3

    Приложение стоит у вас

    Ключ лежит на вашем телефоне, а работает помощник.

Ключ и код это разные вещи

Код это шесть цифр на тридцать секунд. Ключ это короткая строка, которую вы сняли с картинки QR один раз, когда включали защиту на площадке.

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

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

Что вы отдаётеЧто это стоит
Один кодОдну минуту работы и одно сообщение
Ключ целикомВход в аккаунт, пока второй шаг не привязан заново
Пароль и ключ вместеАккаунт, которым пользуются без вас

Три дороги и цена каждой

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

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

ДорогаЧем платите
Пересылать каждый кодСвоим вниманием весь рабочий день
Отдать ключ в перепискеКопией ключа, которую уже не отозвать
Положить ключ к профилюДоступом того, кто открывает этот профиль

Что меняется с ключом у профиля

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

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

Сам ключ окно обратно не показывает: в окне «Одноразовый код» из меню профиля видно цифры, остаток секунд и имя аккаунта, а на карточке стоит только метка 2FA. Вставили один раз, а дальше вы работаете только с цифрами.

  1. 1

    Второе устройство не нужно

    Цифры появляются в том же окне, где живёт профиль.

  2. 2

    Искать нужную запись не надо

    Ключ принадлежит профилю, сопоставлять по имени нечего.

  3. 3

    Перепечатывать не надо

    Код вы копируете кнопкой, а в форму его впишет сценарий.

  4. 4

    Наружу ничего не идёт

    Ключ и часы на этом компьютере, и сеть для кода не нужна.

Кому вы открываете аккаунт

Ключ у профиля означает ровно одно: кто открывает этот профиль, тот входит в аккаунт без вас. Это и есть цена, и назвать её вслух стоит до того, как вы отдадите первый профиль.

На macOS и Linux ваши ключи в этом файле читает только хозяин учётной записи компьютера, а на Windows их закрывает только папка пользователя. Соседу по машине и чужой программе это разные преграды, и вторая слабее.

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

Что не уезжает с вашей машины

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

Куки и пару входа от профиля сервер тоже не принимает: тело с таким полем он отвергает целиком. ARMANOS держит ключ, куки и вход профиля на той машине, где вы их завели, и никуда не шлёт их сам. Общую папку для сессий вы указываете сами, и тогда куки и входы едут в неё.

  1. 1

    Сервер без такого поля

    Ключа на нём нет, и взять его оттуда неоткуда.

  2. 2

    Вход на второй машине

    Профиль приедет, а ключ останется на первой.

  3. 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 значений и никуда их не отправляет.