Двухэтапная аутентификация в браузере с помощью USB-токена U2F

imageU2F — открытый протокол универсальной 2х факторной аутентификации, разработанный FIDO Alliance.В альянс входят компании Google, PayPal, Lenovo, MasterCard, Microsoft, NXP, Visa и другие.

Протокол поддерживается браузером Chrome с версии 38. Работает из коробки без драйверов в Windows/MacOS/Linux.

На текущий момент поддерживается сервисами Google, LastPass, Wordpress.

В статье описывается опыт использования токена Yubikey NEO с поддержкой NFC и OpenPGP card, недостатки двухфакторной аутентификации по SMS.

Почему двухэтапная аутентификация по SMS бывает опаснаСейчас очень популярна двухэтапная аутентификация при помощи SMS или звонка.Безусловно, это удобно и такая дополнительная проверка в большинстве случаев эффективна. Для защиты от автоматизированных атак, фишинга, подбора паролей, вирусов, восстановления утраченного доступа и прочего.

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

Узнать на кого оформлен номер в России не составляет большого труда. Достаточно почитать эксперимент ребят из Roem.ru.Получив персональные данные владельца номера, мошенники рисуют поддельную доверенность, водительские права или паспорт, и отправляются в ближайший филиал оператора сотовой связи.Полномочия перевыпустить SIM-карту имеет любой рядовой сотрудник самого захудалого салона мобильной связи.Забавно, что у большинства операторов в профиле абонента нет даже фотографии владельца номера, хотя паспорт они зачем-то ксерят. То есть достаточно нарисовать паспорт с совпадающими реквизитами и вклеить подходящую фотографию.

У операторов есть опция запрета перевыпуска 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 с тревогой. Рекомендую ;)

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

Устрашающие истории пострадавших в результате перевыпуска SIM-карт

U2F — FIDO Universal 2nd Factor По задумке U2F аутентификатором выступает аппаратный модуль: USB-токен, SIM-карта или NFC брелок, который хранит ключи и самостоятельно выполняет криптографические операции. При этом ключи предустановлены при производстве и никогда не покидают токен.

Принцип работы таков:

Пользователь авторизуется на веб-сайте/в приложении с помощью логина-пароля Сервер проверяет учетные данные и, если они верны, генерирует челендж для токена и отправляет его пользовательской программе, в данном случае браузеру Браузер передает челендж токену, который может затребовать на свое усмотрение действия от пользователя. В моем случае это прикосновение пальцем к контактной площадке. Но это может быть, например, ввод пинкода, биометрическая проверка, или вообще отсутствие таковых Токен возвращает программе ответ, который передается на сервер Аутентификация выполнена imageНа текущий момент поддержка 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.

image

Помимо U2F он умеет:

OpenPGP smartcard — определяется как ICCID ридер со вставленной OpenPGP картой версии 2.0 NFC — можно использовать со смартфонами и как ключ для СКУД. Может работать как карта Mifare Classic в режиме эмуляции OTP и TimeOTP — определяется как hid клавиатура и по нажатию вводит одноразовый пароль. Time Based OTP через программный апплет (замена google authenticator) PIV smartcard — (Personal Identity Verification) американский государственный стандарт смарткарт По дефолту устройство работает в режиме Yubico OTP (фирменный протокол одноразовых паролей), определяется только как HID-клавиатура и по нажатию на кнопку печатает одноразовые пароли на основе ID устройства.Включить режим U2F нужно через фирменную утилиту, которая есть под Windows/Mac/Linux.

image

Я предпочел включить режимы U2F и ICCID для работы в качестве OpenPGP карты.

image

На этом все. U2F сразу работает, никакие драйвера устанавливать не требуется.Проверить работу можно в демо-приложении demo.yubico.com/u2f

Привязка токена к Google-аккаунту происходит крайне просто:

image

После привязки токена он становится вторым фактором по умолчанию, при этом нельзя отключить альтернативный способ: либо SMS, либо TOTP.

image

Альтернативным вторым фактором я выбрал TOTP. Я использую программную реализацию TOTP через 1Password (то же, что и Google Authenticator, только на десктопе). Yubikey NEO тоже умеет TOTP, при этом ключ для генерации паролей сохраняется в токене и не может быть извлечен. Но, так как пароли генерируются на основании времени, нужно держать запущенным программный апплет для передачи времени в токен, что мне не понравилось.

Я также бегло исследовал другие функции устройства.

OpenPGP карта сразу заработала с GnuPG 2.0.27 из пакета gpgtools.org.

gpg --card-status Application ID …: F3427001240104000006010230340000 Version …: 2.0 Manufacturer …: Yubico Serial number …: 1023034 Name of cardholder: [not set] Language prefs …: [not set] Sex …: unspecified URL of public key: [not set] Login data …: [not set] Signature PIN …: forced Key attributes …: 2048R 2048R 2048R Max. PIN lengths .: 127 127 127 PIN retry counter: 3 3 3 Signature counter: 0 Signature key …: [none] Encryption key…: [none] Authentication key: [none] General key info…: [none] Карта версии 2.0, ключи только RSA и не длиннее 2048 бит.Работа с картой возможна и через NFC, например, на Android с помощью http://www.openkeychain.org/. Прелесть такой связки в том, что все операции с закрытым ключом выполняются на карте, ключ никогда не покидает карту и не может быть извлечен из нее.

К сожалению, на днях была найдена уязвимость в реализации OpenPGP в Yubikey NEO, позволяющая обойти ввод PIN кода и выполнить операцию с приватным ключом. И, так как обновление прошивки на устройствах запрещено из соображений безопасности, исправить баг нет возможности. Компания Yubico обещает заменить кривые железки всем желающим.У меня как раз оказалась уязвимая версия прошивки 1.0.8

Эмуляция Mifare Classic/DESFire — самая непонятная для меня функция. При попытке общаться с ней как с обычным Mifare Classic карта ведет себя странно.

вывод libnfc с попытками авторизоваться $ LIBNFC_LOG_LEVEL=3 ./readmifare1k.py -s 115200 -l /dev/tty.SLAB_USBtoUART

debug libnfc.config key: [allow_autoscan], value: [false] debug libnfc.config key: [allow_intrusive_scan], value: [false] debug libnfc.config key: [log_level], value: [1] debug libnfc.config key: [device.name], value: [microBuilder.eu] debug libnfc.config key: [device.connstring], value: [pn532_uart:/dev/tty.SLAB_USBtoUART] debug libnfc.config Unable to open directory: /usr/local/etc/nfc/devices.d debug libnfc.general log_level is set to 3 debug libnfc.general allow_autoscan is set to false debug libnfc.general allow_intrusive_scan is set to false debug libnfc.general 1 device (s) defined by user debug libnfc.general #0 name: «microBuilder.eu», connstring: «pn532_uart:/dev/tty.SLAB_USBtoUART» debug libnfc.driver.pn532_uart Attempt to open: /dev/tty.SLAB_USBtoUART at 115200 baud. debug libnfc.bus.uart Serial port speed requested to be set to 115200 baud. debug libnfc.chip.pn53x Diagnose debug libnfc.chip.pn53x Timeout value: 500 debug libnfc.bus.uart TX: 55 55 00 00 00 00 00 00 00 00 00 00 00 00 00 00 debug libnfc.chip.pn53x SAMConfiguration debug libnfc.chip.pn53x Timeout value: 1000 debug libnfc.bus.uart TX: 00 00 ff 03 fd d4 14 01 17 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 15 debug libnfc.bus.uart RX: 16 00 debug libnfc.bus.uart TX: 00 00 ff 09 f7 d4 00 00 6c 69 62 6e 66 63 be 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 09 f7 debug libnfc.bus.uart RX: d5 01 debug libnfc.bus.uart RX: 00 6c 69 62 6e 66 63 debug libnfc.bus.uart RX: bc 00 debug libnfc.chip.pn53x GetFirmwareVersion debug libnfc.bus.uart TX: 00 00 ff 02 fe d4 02 2a 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 06 fa debug libnfc.bus.uart RX: d5 03 debug libnfc.bus.uart RX: 32 01 06 07 debug libnfc.bus.uart RX: e8 00 debug libnfc.chip.pn53x SetParameters debug libnfc.bus.uart TX: 00 00 ff 03 fd d4 12 14 06 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 13 debug libnfc.bus.uart RX: 18 00 debug libnfc.general «pn532_uart:/dev/tty.SLAB_USBtoUART» (pn532_uart:/dev/tty.SLAB_USBtoUART) has been claimed. debug libnfc.chip.pn53x ReadRegister debug libnfc.bus.uart TX: 00 00 ff 0c f4 d4 06 63 02 63 03 63 0d 63 38 63 3d b0 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 07 f9 debug libnfc.bus.uart RX: d5 07 debug libnfc.bus.uart RX: 00 00 00 00 00 debug libnfc.bus.uart RX: 24 00 debug libnfc.chip.pn53x PN53X_REG_CIU_TxMode (Defines the transmission data rate and framing during transmission) debug libnfc.chip.pn53x PN53X_REG_CIU_RxMode (Defines the transmission data rate and framing during receiving) debug libnfc.chip.pn53x WriteRegister debug libnfc.bus.uart TX: 00 00 ff 08 f8 d4 08 63 02 80 63 03 80 59 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 09 debug libnfc.bus.uart RX: 22 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 32 01 00 f9 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 32 01 01 f8 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 06 fa d4 32 05 ff ff ff f8 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x ReadRegister debug libnfc.bus.uart TX: 00 00 ff 0e f2 d4 06 63 02 63 03 63 05 63 38 63 3c 63 3d 19 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 08 f8 debug libnfc.bus.uart RX: d5 07 debug libnfc.bus.uart RX: 80 80 00 00 00 00 debug libnfc.bus.uart RX: 24 00 debug libnfc.chip.pn53x PN53X_REG_CIU_TxAuto (Controls the settings of the antenna driver) debug libnfc.chip.pn53x PN53X_REG_CIU_Control (Contains miscellaneous control bits) debug libnfc.chip.pn53x WriteRegister debug libnfc.bus.uart TX: 00 00 ff 08 f8 d4 08 63 05 40 63 3c 10 cd 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 09 debug libnfc.bus.uart RX: 22 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 32 01 00 f9 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 06 fa d4 32 05 00 01 02 f2 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x ReadRegister debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 06 63 03 c0 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 03 fd debug libnfc.bus.uart RX: d5 07 debug libnfc.bus.uart RX: 80 debug libnfc.bus.uart RX: a4 00 debug libnfc.chip.pn53x PN53X_REG_CIU_RxMode (Defines the transmission data rate and framing during receiving) debug libnfc.chip.pn53x WriteRegister debug libnfc.bus.uart TX: 00 00 ff 05 fb d4 08 63 03 88 36 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 09 debug libnfc.bus.uart RX: 22 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 32 01 01 f8 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 32 01 00 f9 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 32 01 01 f8 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 32 01 00 f9 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 32 01 01 f8 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 06 fa d4 32 05 00 01 02 f2 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x InListPassiveTarget debug libnfc.chip.pn53x No timeout debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 4a 01 00 e1 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 20 e0 debug libnfc.bus.uart RX: d5 4b debug libnfc.bus.uart RX: 01 01 00 44 28 07 04 1b 15 4a 0e 35 80 11 78 f7 b1 02 59 75 62 69 6b 65 79 4e 45 4f 72 33 debug libnfc.bus.uart RX: 8e 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 32 01 00 f9 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 32 01 01 f8 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 06 fa d4 32 05 00 01 02 f2 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x InListPassiveTarget debug libnfc.chip.pn53x No timeout debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 4a 01 00 e1 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 20 e0 debug libnfc.bus.uart RX: d5 4b debug libnfc.bus.uart RX: 01 01 00 44 28 07 04 1b 15 4a 0e 35 80 11 78 f7 b1 02 59 75 62 69 6b 65 79 4e 45 4f 72 33 debug libnfc.bus.uart RX: 8e 00 debug libnfc.chip.pn53x SetParameters debug libnfc.bus.uart TX: 00 00 ff 03 fd d4 12 04 16 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 13 debug libnfc.bus.uart RX: 18 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 32 01 00 f9 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 32 01 01 f8 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x RFConfiguration debug libnfc.bus.uart TX: 00 00 ff 06 fa d4 32 05 00 01 02 f2 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 02 fe debug libnfc.bus.uart RX: d5 33 debug libnfc.bus.uart RX: f8 00 debug libnfc.chip.pn53x InListPassiveTarget debug libnfc.chip.pn53x No timeout debug libnfc.bus.uart TX: 00 00 ff 04 fc d4 4a 01 00 e1 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 0f f1 debug libnfc.bus.uart RX: d5 4b debug libnfc.bus.uart RX: 01 01 00 44 28 07 04 1b 15 4a 0e 35 80 debug libnfc.bus.uart RX: 2a 00 debug libnfc.chip.pn53x InDataExchange debug libnfc.bus.uart TX: 00 00 ff 12 ee d4 40 01 60 00 a0 a1 a2 a3 a4 a5 04 1b 15 4a 0e 35 80 7b 00 debug libnfc.bus.uart RX: 00 00 ff 00 ff 00 debug libnfc.chip.pn53x PN53x ACKed debug libnfc.bus.uart RX: 00 00 ff 01 ff debug libnfc.bus.uart RX: 7f 81 00 error libnfc.driver.pn532_uart Application level error detected Карта имеет 7-байтный UID ATQA (SENS_RES): 00 44 UID (NFCID1): 04 1b b1 4e f7 00 f1 SAK (SEL_RES): 28 ATS: 78 f7 b1 02 59 75 62 69 6b 65 79 4e 45 4f 72 33 Физически RFID-метка работает довольно хорошо, несмотря на маленькую антенну, ридер в московском метро «схватывает» с 3 сантиметров.Заключение По сравнению со всеми аппаратными токенами, которыми мне доводилось пользоваться, технология U2F это крайне удобно. Не нужно возиться с импортом сертификатов, установкой драйверов, никаких Java-апплетов и прочего.Я протестировал работу на Windows 7, Mac OS 10.10 и Ubuntu 14.0.4. Во всех системах Chrome сразу подхватывал токен без установки драйверов. В целом, развертывание видится настолько простым и понятным, что справится даже ребенок.А наличие полностью открытых спецификаций, плагинов и библиотек позволит прикручивать U2F к любым приложениям.

© Habrahabr.ru