
U2F — открытый протокол универсальной 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 с тревогой. Рекомендую ;)
Существуют и другие способы обхода подтверждения через мобильный телефон, такие как установка переадресации, перехват голосовой почты и т.д. Но их описание выходит за рамки данной статьи.
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
Библиотека для PHP github.com/Yubico/php-u2flib-server
Библиотека для Ruby github.com/castle/ruby-u2f
Демо на Python github.com/Yubico/python-u2flib-server
PAM-модуль github.com/Yubico/pam-u2f
Личный опыт использования токена Yubikey NEO
Самые продвинутые U2F устройства производит компания Yubico.
Дистрибьютор в России — yubico.ru
Я купил самый навороченный на текущий момент брелок — Yubikey NEO.

Помимо 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.

Я предпочел включить режимы 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.
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, позволяющая обойти ввод пин-кода и выполнить операцию с приватным ключом. И, так как обновление прошивки на устройствах запрещено из соображений безопасности, исправить баг нет возможности. Компания Yubico обещает заменить кривые железки всем желающим.
У меня как раз оказалась уязвимая версия прошивки 1.0.8
Эмуляция Mifare Classic — самая непонятная для меня функция. При попытке общаться с ней, как с обычным Mifare Classic, карта ведет себя странно.
$ 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 к любым приложениям.
Комментарии (57)
- xforce27.04.2015 09:10- При этом ключи предустановлены при производстве и никогда не покидают токен 
 А каким образом убедиться, что там нормальные ключи теперь, а не 15 бит энтропии?- xforce27.04.2015 09:19- И даже более того — у производителя может лежать копия этого ключа. Поломают производителя, угонят базу ключей и абзац безопасности… 
  - zhovner Автор27.04.2015 09:21+1- Не знаю. Вот неплохой тред об этом security.stackexchange.com/questions/71316/how-secure-are-the-fido-u2f-tokens 
 Еще есть разговоры что в используемом алгоритме эллиптических кривых NIST есть закладка classic.slashdot.org/story/13/09/11/1224252 - Ivan_8327.04.2015 14:04+1- Тут нужно понимать что претензии не к эллиптическим кривым а конкретно к тем кривым которые используют американцы, и то не ко всем, а именно к тем, которые якобы рандомные. 
 В стандарте они называются secpXXXrY.
 К secpXXXkY вроде таких притензий нет, но их всего несколько: secp160k1, secp192k1, secp224k1, secp256k1.
 
 
 - RZimin27.04.2015 09:19- Правильно ли я прочитал, что U2F умеет только NEO?  - zhovner Автор27.04.2015 09:29+2- Нет, еще EDGE, EDGE-N, NEO-N и синий. Вот удобная таблица www.yubico.com/products/yubikey-hardware 
 По запросу «U2F» на amazon можно найти токены по 5 баксов.
 Мелкие удобно утапливаются в USB порту и не торчат
   - RZimin27.04.2015 09:45- Спасибо, просто не увидел на сайте дистрибьтора Edge. Вот он как раз кажется оптимальным вариантом. 
  - ErshoFF27.04.2015 10:00- Мелкие на амазоне (поиск по YubiKey,Nano, U2F и комбинации) показал минимальную цену 25 баксов. Дешевле не нашел.  - zhovner Автор27.04.2015 10:01+1- Ошибся, шесть баксов www.amazon.com/Plug-up-International-U2F-SK-01-FIDO-Security/dp/B00OGPO3ZS/ref=sr_1_3?ie=UTF8&qid=1430118083&sr=8-3&keywords=u2f 
 
  - ColorPrint28.04.2015 12:29- У меня такой, очень удобно пользоваться и носить ) 
 
 
 - gto27.04.2015 10:05- При выборе Юбикейа имейте в виду, что до версии 1.0.9: 
 
 developers.yubico.com/ykneo-openpgp/SecurityAdvisory%202015-04-14.html - zhovner Автор27.04.2015 10:06- Я об этом написал. Это касается только функционала openpgp.  - gto27.04.2015 10:10- Ага, поздно заметил. Стал искать по 1.0.9 и не нашёл. Пардоньте. Вы, кстати, свою заменили? Долгая процедура?  - zhovner Автор27.04.2015 10:13- В саппорте мне пообещали заменить, правда пока непонятно как, ведь в Украину они не шлют. 
 Тема на форуме об этом forum.yubico.com/viewtopic.php?f=26&t=1854
 
 
 
 - ProRunner27.04.2015 11:20- А какая процедура восстановления доступа ко всем сервисам при потере токена?  - zhovner Автор27.04.2015 11:23- Это зависит от конкретного сервиса, кто как хочет так и реализовывает. 
 Например гугл позволяет привязать сразу несколько токенов к одному аккаунту и обязательно требует активировать альтернативный способ авторизации, например OTP или по SMS. Еще есть одноразовые бекап-коды.
 
 - lSDriim27.04.2015 15:40- Здесь вон вообще целый компьютер на линукс предлагают за 49 баксов www.amazon.com/s?marketplaceID=ATVPDKIKX0DER&me=A3V6YOGK9LVOC6&merchant=A3V6YOGK9LVOC6&redirect=true тоже вроде U2F поддерживает 
 - ntfs198427.04.2015 18:17+1- Основной недостаток устройства в том, что его нужно приобретать дополнительно. 
 А в таком случае, лучше пользоваться старым проверенным динамическим RSA-токеном+в связке со статическим паролем.
 
 Плюс ко всему, USB не везде открыто. Сусурити. - zhovner Автор27.04.2015 18:57- проверенным динамическим RSA-токеном 
 Каким например? - ntfs198427.04.2015 19:21+1 - nochkin27.04.2015 19:47- Часто USB закрыт на запись только для USB flash mass media storage устройств. Клавиатура/мышка обычно сидят на USB в виде HID. Если HID разрешено, то токен в виде HID должен работать. 
 Я только один раз встречал (да и то по-наслышке), что заблокировали USB полностью физическим отключением на мамке, а клавиатура/мышка были на PS/2. - ntfs198427.04.2015 19:58- У меня в офисе просто блокируется USB. Как и в интернет-клубах. 
 На смартах подключить сей девайс вообще трудновато будет, если вообще возможно. - nochkin27.04.2015 22:44- Про интернет-клубы не подумал, так как не сталкивался. Я больше про корпоративные решения. 
 
 По поводу RSA на смартфонах есть такие приложения:
 Android
 iOS
 BlackBerry 10
 Можно добавить RSA токен и пользоваться вместо свеого без страха, что забыл дома (учитывая, что обычно телефон мы забываем намного реже). - zhovner Автор27.04.2015 22:56- TOTP намного более популярен, стандартизирован. Поддерживается Google, Github, Paypal, Dropbox, Evernote, Amazon, Heroku. Полно реализаций как аппаратных, так и софтовых. Зачем нужен этот secureID в таком случае?  - ntfs198427.04.2015 23:15- Первый мой комментарий был содержания «Если уж приходится приобретать что-то дополнительно — то лучше приобрести то что популярно, и удобно». 
 
 Способов аутентификации можно придумать миллион, включая вебку на ноуте и OpenCV с анализатором рисунка сетчатки на удаленном ресурсе.
 
 Вопрос в удобстве. - stansult28.04.2015 06:31- с анализатором рисунка сетчатк Почти по теме — я недавно купил себе ноутбук с какой-то странной прорезью на корпусе.
 Провёл по ней пальцем — оказалось, анализатор отпечатка пальца :)
 Всегда считал это каким-то нелепым неудобным пижонством.
 А теперь, попробовав, оценил: действительно, удобно!
 
 
 
 
 
 
  - gvozd198927.04.2015 18:50- Кто-нибудь в курсе, возможно ли проводить аутентификацию не нажимая кнопку, а автоматически?  - zhovner Автор27.04.2015 19:07- Токены без кнопки выключаются после авторизации и их нужно вытаскивать и включать заново для каждого раза. Вот этот например www.amazon.com/Plug-up-International-U2F-SK-01-FIDO-Security/dp/B00OGPO3ZS/ref=sr_1_3?ie=UTF8&qid=1430150377&sr=8-3&keywords=U2F 
  - ColorPrint28.04.2015 12:36- Мне кажется с кнопкой как раз удобнее. Особенно вон та миниатюрная модель выше, утапливаемая в корпус. 
 
  - istui27.04.2015 23:20- Насколько анонимна такая штука — можно ли связать несколько сервисов по использованию одного и того же ключа? 
 
 Насколько она надежна — каков шансы, что токен внезапно умрет (от чего, кстати? статика? наработка на отказ?)?
 Что делать с аккаунтом в таком случае, вроде бы, уже описали выше… - zhovner Автор28.04.2015 13:39- можно ли связать несколько сервисов по использованию одного и того же ключа? 
 Да
 
 - каков шансы, что токен внезапно умрет (от чего, кстати? статика? наработка на отказ?)? 
 Не знаю.
 
  - Iskin28.04.2015 02:47- А можно ли авторизоваться с телефона?  - zhovner Автор28.04.2015 13:43- Где именно? В приложении/сайте на телефоне можно авторизоваться брелком с помощью NFC. 
 Телефоном как U2F токеном на компьютере, вероятно можно, если сделают SIM-карты с U2F или программную эмуляцию на телефоне. - Iskin28.04.2015 14:47- А как выглядит авторизация в приложении/сайте?  - zhovner Автор28.04.2015 14:49- Точно так же, как и в десктопном браузере, правда насколько я знаю еще нет ни одной реализации U2F на смартфонах. 
 Но в теории достаточно будет просто поднести токен к телефону.
 
 Вот типа такого grepular.com/An_NFC_PGP_SmartCard_For_Android
 
 
 
 
 
 
           
 





ohm
Проверяет ли Google смену IMSI?
zhovner Автор
Насколько мне известно — нет. Но можно убрать телефон в способах восстановления утраченного доступа оставив его только в двухэтапной аутентификации, тогда нельзя будет угнать аккаунт при перевыпуске SIM-карты.
Точно проверяет IMSI Альфабанк и WebMoney.
intelligence
Вот самое интересное, что Альфабанк проверяет не всегда, за последнее время 3 раза менял сим карту (смена формата и переход на lte). И ни разу не было никаких проблем, хотя, до этого менял симку и пришлось обращаться в колл-центр.
zhovner Автор
Странно. Что по этому поводу скажут представители Альфабанка verybigman RockBee ZTamara denisx