Yubico otp что это
Нажималка для YubiKey
Если вы работаете в сфере информационных технологий, то у вас, возможно, есть аппаратный ключ безопасности YubiKey. У меня такой имеется. Это — YubiKey 5C Nano, показанный на следующем снимке.
Если вы работаете в области, не связанной с компьютерами, но при этом, в основном, пользуетесь ноутбуком, то вам, возможно, стоило бы обзавестись YubiKey. А если вы участвуете в политической кампании, или работаете журналистом, то вам, определённо, нужен YubiKey (или нечто подобное). Обсудите это с вашим отделом безопасности. Правда, этот материал будет кое о чём таком, о чём специалистам вашего отдела безопасности лучше не знать. Поэтому не говорите им об этой статье.
Ключ YubiKey используется в механизмах двухфакторной аутентификации. Это означает, что после того, как вы вошли в некую систему с помощью имени пользователя и пароля, система предложит вам авторизоваться с помощью ещё одного механизма. В результате, если ваши имя пользователя и пароль украдут, злоумышленнику придётся украсть ещё и второе средство аутентификации, что усложняет его задачу.
Существуют разные способы двухфакторной аутентификации. Например, часто встречается такая схема работы: веб-сайт предлагает вам отсканировать QR-код с помощью приложения вроде Google Authenticator, установленного на телефоне, генерирующего 6-значные коды. Работа этого механизма основана на том, что у сервера и у приложения имеется один и тот же секретный ключ. Телефон генерирует коды, основываясь на этом ключе и на текущей отметке времени. Такие же коды генерирует и сервер. Когда серверу предоставляют код, созданный в приложении, он проверяет, совпадает ли он с кодом, который сгенерировал он.
Шестизначный код, сгенерированный приложением
Ещё один способ двухфакторной аутентификации основан на SMS-сообщениях. Он, правда, считается небезопасным. В данном случае сервер генерирует код и отправляет его на телефон в SMS-сообщении. Причина, по которой этот механизм считается небезопасным, заключается в том, что существует атака, известная как «SIM-джекинг», в ходе проведения которой некто обманом переносит интересующий его номер на новую SIM-карту, что приводит к тому, что он начинает получать SMS-сообщения, адресованные первоначальному владельцу номера.
SMS-сообщение с кодом
Ключи YubiKey — это маленькие устройства, подключаемые к USB-портам компьютеров и эмулирующие клавиатуру. Когда нажимают кнопку YubiKey (или, скорее, касаются её), устройство генерирует одноразовый пароль (One-Time password, OTP), который может быть проверен специальным сервером. На устройстве имеется секретный ключ, используемый для подписывания информации, но этот ключ никогда не выходит за пределы устройства, так как он сохранён в особом окружении, защищённом от несанкционированного доступа.
Мой YubiKey рассчитан на постоянное подключение к USB-порту. Поэтому я, когда, например, беру ноутбук с рабочего стола и переношу его в конференц-зал, забираю с собой и YubiKey. Но теперь мой ноутбук, как и ноутбуки многих «новообращённых» удалённых работников, никогда не покидает мой рабочий стол. Я подключил его к внешнему монитору, а чтобы сэкономить на столе немного места, я установил его вертикально, в сложенном состоянии, на специальной стойке.
Это усложнило задачу активации YubiKey. Особенно — если ноутбук находится далеко от внешней клавиатуры и мыши. Я решил эту проблему, купив USB-C-удлинитель, благодаря которому смог разместить YubiKey поближе к клавиатуре.
Да, я ещё не рассказал об одной особенности YubiKey 5C Nano. Дело в том, что кнопку устройства довольно тяжело «нажимать», и это — даже если не учитывать проблему большого расстояния до ключа. Область устройства, которой надо коснуться для активации ключа, очень мала.
На то, чтобы ключ нельзя было бы активировать программно, было потрачено много сил и времени.
Прежде чем мы пойдём дальше, мне хотелось бы остановиться на причинах подобного состояния дел. Если хакер сможет взломать компьютер и сумеет программно активировать YubiKey, это полностью лишит смысла использование данного ключа. Но я полагаю, что мы всегда идём на компромиссы между безопасностью и удобством. Например, часто бывает так, что YubiKey-пароль не нужно вводить каждый раз, подключаясь к некоей системе. Некоторые системы, после ввода такого пароля, позволяют, при следующих входах в них, некоторое время не вводить его снова. Или, например, когда система с двухфакторной аутентификацией выдаёт вам резервные коды доступа — часто ли вы их распечатываете на принтере и убираете в надёжное место? Каждый сам для себя находит устраивающий его баланс безопасности и удобства.
Учитывая вышесказанное, давайте поговорим о том, как можно программно активировать YubiKey.
Я называю этот механизм The Finger
Аппаратная часть системы
Для начала нам нужен какой-то способ для организации взаимодействия компьютера и The Finger. У меня есть куча макетных плат IZOKEE D1 Mini, которые представляют собой уменьшенную версию плат, использующих знаменитый чип ESP8266, применяемый во многих IoT-устройствах.
Плата с чипом ESP8266
Этот модуль можно подключить к ноутбуку по USB, но так как он поддерживает WiFi, на нём можно просто запустить веб-сервер и отправлять ему команды по беспроводной сети.
Далее, нам нужно нечто, способное перемещать The Finger в направлении YubiKey. После непродолжительных поисков в интернете я узнал о том, что с платой D1 Mini хорошо стыкуется шаговый двигатель 28BYJ-48.
Шаговый двигатель преобразует электрические импульсы во вращательные движения, у D1 Mini есть пины, способные выдавать подобные импульсы.
Схема работы двигателя
Но шаговый двигатель имеет вращающийся якорь, а нам нужно перемещать движущуюся часть The Finger по прямой. Я поискал по слову 28BYJ-48 на Thingiverse и обнаружил соответствующий механизм.
Механизм для преобразования вращательного движения в прямолинейное
Тут к двигателю крепится шестерня, которая перемещает вперёд-назад длинный стержень с зубцами. А если мы собираемся перемещать в направлении YubiKey длинную пластиковую штуковину, то она вполне может выглядеть как обычный палец. Я опять пошёл на Thingiverse, поискал там по слову «finger» и нашёл модель пальца, которую кто-то сделал для Хэллоуина.
Я открыл файлы моделей в Fusion 360, и, пользуясь продвинутыми CAD-инструментами, сделал то, модель чего показана ниже.
Результат объединения моделей пальца и стержня
Потом я экспортировал модель в формат STL и напечатал её на 3D-принтере. В тот момент в принтер был заряжен пластик Prusament PLA Lipstick Red. Он и пошёл в дело. Когда пластиковый палец был готов, я взял его и коснулся им сенсора YubiKey. Ничего не произошло. Тогда я нашёл у себя на столе металлический винт и коснулся YubiKey на этот раз им. Ключ мгновенно выдал одноразовый пароль. Я прикрепил пластиковый палец к столу струбциной, просверлил в нём небольшое отверстие и вкрутил туда винт. Потом я коснулся сенсора винтом, вкрученным в пластиковый палец, но на этот раз устройство снова не отреагировало на прикосновение.
Обработка пластиковой модели
Именно тогда я понял, что я — идиот, и что когда я касался YubiKey металлическим винтом, металл просто передавал электрический заряд с моего тела на ёмкостный датчик касания YubiKey. Как же мне обмануть датчик и заставить его поверить в то, что пластиковая модель — это настоящий палец?
Я предположил, что принцип работы ёмкостных датчиков заключается в том, что они измеряют ёмкость человеческого тела по отношению к «земле». Поэтому, если подключить датчик прямо к «земле», то он решит, что тело коснувшегося его человека просто является очень хорошим проводником. Поэтому я взял изолированный провод, немного открутил винт, обмотал концом провода винт и опять его закрутил. Потом я подключил другой конец провода к выходу GND платы D1 Mini и снова коснулся YubiKey. На этот раз всё заработало!
К плате управления двигателем уже были подключены выходы 5V и GND платы D1 Mini. Поэтому я подумал, что мне может понадобиться подключить к GND и плату управления двигателем, и винт. Но неожиданно для себя я понял, что могу просто воткнуть другой конец провода, идущего от винта, между и металлическим корпусом двигателя (по-видимому — заземлённым) и пластиковой стенкой отсека для двигателя. И так всё тоже работало!
Провод, соединяющий корпус двигателя и винт, вкрученный в пластиковый палец
После того, как я убедился в том, что The Finger способен активировать YubiKey, я начал думать о том, как закрепить YubiKey рядом с пластиковым пальцем. Этот вопрос я решил, измерив цифровым штангенциркулем размеры USB-C-удлинителя и создав держатель для двигателя, пальца и удлинителя с YubiKey в Fusion 360.
Удлинитель входит в отверстие держателя, расположенное слева, а двигатель монтируется справа.
На этом этапе работы мне понадобилось подключить плату управления двигателем к D1 Mini. Это можно сделать, припаяв несколько выводов к D1 Mini и подключив к ним соединительные провода Dupont, идущие к плате двигателя.
Подключение платы управления двигателем к плате D1 Mini
В следующей таблице показана схема подключения платы управления двигателем к плате D1 Mini.
D1 Mini | Плата управления 28BYJ-48 |
5V | 5V |
GND | GND |
D1 | IN1 |
D2 | IN2 |
D3 | IN3 |
D4 | IN4 |
После того, как все части системы оказались собранными воедино, у меня получилось то, что показано на следующем рисунке.
Программная часть системы
После предварительных настроек я, чтобы проверить работоспособность системы, запустил скетч, который мигает светодиодом.
Потом я обнаружил этот скетч, демонстрирующий пример управления шаговым двигателем 28BYJ-48 по WiFi.
Вот та часть кода, которая отвечает за управление двигателем:
Вот как всё это устроено. Веб-сервер выдаёт страницу с двумя кнопками. Одна из них, CCW, включает вращение вала двигателя против часовой стрелки, другая, CW — включает вращение по часовой стрелке. Если нажимают кнопку CCW, значение переменной dirStatus меняется на 1, если нажимают кнопку CW — значение этой переменной меняется на 2. Повторные нажатия на уже нажатые кнопки переводит переменную dirStatus в значение 3 и двигатель выключается.
Нам нужна единственная HTTP-конечная точка, которая позволит запустить вращение вала двигателя против часовой стрелки, выполняемое до тех пор, пока пластиковый палец не коснётся YubiKey. После этого двигатель должен вращаться в обратном направлении до тех пор, пока палец не примет исходную позицию. Потом двигатель выключается.
Она включит вращение вала двигателя против часовой стрелки при обращении к конечной точке.
Запуск The Finger
Нажимать на сенсорную кнопку YubiKey не так уж и удобно, а вот нажатие на клавишу механической клавиатуры — это уже совсем другое дело. Я полагал, что будет очень здорово, если я смогу активировать YubiKey с клавиатуры.
Настроить клавиатуру мне помогла программа Karabiner-Elements. Эта программа, как и аппаратная часть моего проекта, немного напоминает машину Голдберга.
Потом я перешёл на её вкладку Misc и щёлкнул по кнопке Open config folder (
/bin/yubikey.scpt можно написать Applescript-код, вызывающий shell-скрипт:
/bin/yubikey.sh имеется следующий код:
А вот как выглядит работа готовой системы.
Нажатие на клавишу клавиатуры активирует YubiKey
Я, чтобы проверить работу системы, выполнил тестовый запрос на получение данных с YubiKey, но я могу гарантировать вам то, что The Finger делает своё дело и в ситуации, когда YubiKey нужен в реальных условиях. Вот код, позволяющий самостоятельно выполнить запрос ключа с YubiKey. Может, вам он зачем-то понадобится:
Мы, имея этот shell-скрипт, можем запустить процесс активации YubiKey вообще не нажимая ни на какие кнопки. А именно, в терминале iTerm2 есть возможность, называемая Triggers (триггеры). Она позволяет выполнять какие-то действия, основываясь на анализе текстов в терминале. Можно создать регулярное выражение, которое ожидает появления текста «Yubikey for» и запускает скрипт активации YubiKey. В результате для запуска The Finger не нужно нажимать на особую кнопку.
Итоги
Я показал The Finger одному человеку, а он говорит: «Итак… ты, по сути, сделал кнопку, которую ты нажимаешь для того чтобы нажать другую кнопку? Почему бы просто не нажать нужную кнопку?». Меня этот вопрос немного разозлил. Получается, что тот, кому я показывал проект, ничего не понял. «Неужели не ясно? Это — плохая кнопка. А это — кнопка хорошая. Я хочу нажимать на хорошую кнопку».
Работайте над тем, что для вас важно.
Были ли у вас проекты, которые казались кому-то из окружающих бессмысленными?
What is Yubico OTP?
Yubico OTP is a simple yet strong authentication mechanism that is supported by the YubiKey 5 Series and YubiKey FIPS Series out-of-the-box. Yubico OTP can be used as the second factor in a 2-factor authentication scheme or on its own providing strong single factor authentication.
How does Yubico verify Yubico OTPs?
In order for Yubico OTP to work with YubiCloud (Yubico’s validation service) the information programmed into the YubiKey must also be uploaded to the YubiCloud. As part of the process of manufacturing every YubiKey, a Yubico OTP credential is programmed into slot 1, and its information is also transferred to YubiCloud, meaning this functionality should work out of the box with any new YubiKey.
What happens if I accidentally delete my YubiOTP?
If you delete or overwrite your Yubico OTP credential from your YubiKey, the information needed for the YubiKey to be able to generate Yubico OTPs will be lost. In order to restore this functionality, you will need to program and upload a new credential, which can be accomplished by following this guide.
What are the advantages to Yubico OTP?
No client software needed
The OTP is just a string. If you can send a password, you can send an OTP.
YubiKey ID embedded in OTP
This allows for self-provisioning, as well as authenticating without a username.
Easy to implement
Using YubiCloud, supporting Yubico OTP is not much harder than supporting regular passwords.
Learn More
Developer Resources
We use cookies to ensure that you get the best experience on our site and to present relevant content and advertising. By browsing this site without restricting the use of cookies, you consent to our and third party use of cookies as set out in our Cookie Notice.
Privacy Overview
Yubico.com uses cookies to improve your experience while navigating through the website. When you visit any website, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually identify you, but it can give you a more personalized web experience.
Because we respect your right to privacy, you can choose not to allow some types of cookies.
Click on the different category headings to find out more and change our default settings.
However, blocking some types of cookies may impact your experience on our site and the services we are able to offer.
These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms. You can set your browser to block or alert you about these cookies, but some parts of the site will not then work. These cookies do not store any personally identifiable information.
These cookies enable the website to provide enhanced functionality and personalization. They may set by us or by third party providers whose services we have added to our pages. If you do not allow these cookies then some or all of these services may not function properly.
These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our site. They help us to know which pages are the most and least popular and see how visitors move around the site. All information these cookies collect is aggregated and therefore anonymous. If you do not allow these cookies we will not know when you have visited our site, and will not be able to monitor its performance.
These cookies may be set through our site by our advertising partners. They may be used by those companies to build a profile of your interests and show you relevant adverts on other sites. They do not store directly personal information, but are based on uniquely identifying your browser and internet device. If you do not allow these cookies, you will experience less targeted advertising.
Undefined cookies are those that are being analyzed and have not been classified into a category as yet.
What is Yubico OTP?
The most common pattern is to use Yubico OTP in combination with a username and password:
YubiCloud
YubiCloud is the name of Yubico’s web service for verifying OTPs. Before using YubiCloud, you need to get an API key from here — it’s quick, free and helps us preventing misuse of YubiCloud.
If you prefer to not use YubiCloud, you can instead host a verification server yourself.
Advantages
Apart from the general advantages of 2-factor authentication, Yubico OTP has the following characteristics:
No client software needed. The OTP is just a string. If you can send a password, you can send an OTP.
YubiKey ID embedded in OTP. This allows for self-provisioning, as well as authenticating without a username.
Easy to implement. Using YubiCloud, supporting Yubico OTP is not much harder than supporting regular passwords.
Implementing
We provide two alternatives:
Integration plugins for software such as WordPress, phpBB and PAM. This should be the easiest alternative if you are using supported software.
Libraries for programming languages used to create your own integration.
Understanding
While not required, it can be interesting and useful to know how a Yubico OTP is generated. This is explained in OTPs explained.
Двухэтапная аутентификация в браузере с помощью USB-токена U2F
Протокол поддерживается браузером Chrome с версии 38. Работает из коробки без драйверов в Windows/MacOS/Linux.
На текущий момент поддерживается сервисами Google, LastPass, WordPress.
В статье описывается опыт использования токена Yubikey NEO с поддержкой NFC и OpenPGP card, недостатки двухфакторной аутентификации по SMS.
Почему двухэтапная аутентификация по SMS бывает опасна
Сейчас очень популярна двухэтапная аутентификация при помощи SMS или звонка.
Безусловно, это удобно, и такая дополнительная проверка в большинстве случаев эффективна. Для защиты от автоматизированных атак, фишинга, подбора паролей, вирусов, восстановления утраченного доступа и прочего.
Но в случае, если ваша персона стала мишенью профессиональных мошенников, привязанный телефон может сыграть роковую роль. Чаще всего телефонный номер, к которому привязан аккаунт не является секретом, обычно это основной контактный номер. Почти все сервисы сообщают его первые или последние цифры любому желающему, если попытаться восстановить доступ к аккаунту. Поэтому выяснить номер связанный с аккаунтом несложно.
У операторов есть опция запрета перевыпуска SIM-карты по доверенности, однако это иллюзорная защита, потому как номера успешно перевыпускаются по поддельным водительским правам и паспортам.
Мегафон:
moscow.megafon.ru/help/servic. sti.html#21123
Для подключения услуги наберите на телефоне команду *105*508#.
Отключить услугу может только владелец номера при личном визите в салон «МегаФона» с документом, удостоверяющим личность.
Билайн
moskva.beeline.ru/customers/help/safe-beeline/ugrozy-mobilnykh-moshennikov/zapret-deystvyi-po-doverenosti
Для установки запрета необходимо обратиться в один из офисов «Билайн» с паспортом или позвонив по номеру 0611.
МТС
При личном визите в офис попросить, чтобы в комментариях к номеру указали, что все действия имеет право совершать только владелец с паспортом.
В Украине ситуация еще хуже, так как большинство номеров анонимны.
У оператора Kyivstar для перевыпуска SIM-карты требуется показать чек последнего пополнения счета и назвать три номера, на которые совершались звонки.
Хорошие сервисы, например, многие банки, сохраняют вместе с телефонным номером еще и IMSI (International Mobile Subscriber Identity) — уникальный идентификатор SIM-карты. В случае, если IMSI изменился, то привязка номера считается аннулированной и процедуру привязки нужно пройти заново.
К сожалению, таких сервисов не очень много.
Проверить IMSI любого номера можно с помощью HLR-запроса smsc.ru/testhlr
Рецепт для параноиков: у smsc.ru есть удобные библиотеки для Python, PHP, Perl, Ruby, Java, C#, Delphi, C++, позволяющие, в том числе, посылать HLR-запросы. Можно проверять IMSI своих номеров, например, два раза в сутки, и в случае его изменения бить тревогу. При самом дорогом тарифе один запрос стоит 0.2 рубля, выходит примерно 150 рублей в год за один номер. Через эту же библиотеку можно послать SMS с тревогой. Рекомендую 😉
Существуют и другие способы обхода подтверждения через мобильный телефон, такие как установка переадресации, перехват голосовой почты и т.д. Но их описание выходит за рамки данной статьи.
U2F — FIDO Universal 2nd Factor
По задумке U2F аутентификатором выступает аппаратный модуль: USB-токен, SIM-карта или NFC брелок, который хранит ключи и самостоятельно выполняет криптографические операции. При этом ключи предустановлены при производстве и никогда не покидают токен.
На текущий момент поддержка U2F есть в Google Chrome, начиная с 38 версии. Вероятно, в ближайшее время будет добавлена в FireFox.
Уже поддерживается для авторизации в аккаунтах Google и Lastpass, есть плагин для WordPress, Django и библиотеки на разных языках.
Модули для Linux PAM, OpenSSH и прочего.
Таблица сервисов поддерживающих OTP/U2F авторизацию — www.dongleauth.info
Личный опыт использования токена Yubikey NEO
Самые продвинутые U2F устройства производит компания Yubico.
Дистрибьютор в России — yubico.ru
Я купил самый навороченный на текущий момент брелок — Yubikey NEO.
По дефолту устройство работает в режиме Yubico OTP (фирменный протокол одноразовых паролей), определяется только как HID-клавиатура и по нажатию на кнопку печатает одноразовые пароли на основе ID устройства.
Включить режим U2F нужно через фирменную утилиту, которая есть под Windows/Mac/Linux.
Я предпочел включить режимы U2F и ICCID для работы в качестве OpenPGP карты.
На этом все. U2F сразу работает, никакие драйвера устанавливать не требуется.
Проверить работу можно в демо-приложении demo.yubico.com/u2f
Привязка токена к Google-аккаунту происходит крайне просто:
После привязки токена он становится вторым фактором по умолчанию, при этом нельзя отключить альтернативный способ: либо SMS, либо TOTP.
Альтернативным вторым фактором я выбрал TOTP. Я использую программную реализацию TOTP через 1Password (то же, что и Google Authenticator, только на десктопе). Yubikey NEO тоже умеет TOTP, при этом ключ для генерации паролей сохраняется в токене и не может быть извлечен. Но так как пароли генерируются на основании времени, нужно держать запущенным программный апплет для передачи времени в токен, что мне не понравилось.
Я также бегло исследовал другие функции устройства.
OpenPGP карта сразу заработала с GnuPG 2.0.27 из пакета gpgtools.org.
Карта версии 2.0, ключи только RSA и не длиннее 2048 бит.
Работа с картой возможна и через NFC, например, на Android с помощью http://www.openkeychain.org/. Прелесть такой связки в том, что все операции с закрытым ключом выполняются на карте, ключ никогда не покидает карту и не может быть извлечен из нее.
К сожалению, на днях была найдена уязвимость в реализации OpenPGP в Yubikey NEO, позволяющая обойти ввод пин-кода и выполнить операцию с приватным ключом. И, так как обновление прошивки на устройствах запрещено из соображений безопасности, исправить баг нет возможности. Компания Yubico обещает заменить кривые железки всем желающим.
У меня как раз оказалась уязвимая версия прошивки 1.0.8
Эмуляция Mifare Classic — самая непонятная для меня функция. При попытке общаться с ней, как с обычным Mifare Classic, карта ведет себя странно.
Карта имеет 7-байтный UID
Физически RFID-метка работает довольно хорошо, несмотря на маленькую антенну, ридер в метро «схватывает» с 3 сантиметров.
Заключение
По сравнению со всеми аппаратными токенами, которыми мне доводилось пользоваться, технология U2F — это крайне удобно. Не нужно возиться с импортом сертификатов, установкой драйверов, никаких Java-апплетов и прочего.
Я протестировал работу на Windows 7, Mac OS 10.10 и Ubuntu 14.0.4. Во всех системах Chrome сразу подхватывал токен без установки драйверов. В целом, развертывание видится настолько простым и понятным, что справится даже ребенок.
А наличие полностью открытых спецификаций, плагинов и библиотек позволит прикручивать U2F к любым приложениям.