image

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 брелок, который хранит ключи и самостоятельно выполняет криптографические операции. При этом ключи предустановлены при производстве и никогда не покидают токен.

Принцип работы таков:
  1. Пользователь авторизуется на веб-сайте/в приложении с помощью логина-пароля
  2. Сервер проверяет учетные данные и, если они верны, генерирует челендж для токена и отправляет его пользовательской программе, в данном случае, браузеру
  3. Браузер передает челендж токену, который может затребовать на свое усмотрение действия от пользователя. В моем случае это прикосновение пальцем к контактной площадке. Но это может быть, например, ввод пинкода, биометрическая проверка или вообще отсутствие таковых
  4. Токен возвращает программе ответ, который передается на сервер
  5. Аутентификация выполнена

FIDO U2F scheme animation

На текущий момент поддержка U2F есть в Google Chrome, начиная с 38 версии. Вероятно, в ближайшее время будет добавлена в FireFox.

Уже поддерживается для авторизации в аккаунтах Google и Lastpass, есть плагин для Wordpress, Django и библиотеки на разных языках.
Модули для Linux PAM, OpenSSH и прочего.

Таблица сервисов поддерживающих OTP/U2F авторизацию — www.dongleauth.info

Полезные ссылки
Примеры от Google github.com/google/u2f-ref-code
Библиотека для 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.

image

Помимо U2F он умеет:
  1. OpenPGP smartcard — определяется как ICCID ридер со вставленной OpenPGP картой версии 2.0
  2. NFC — можно использовать со смартфонами и как ключ для СКУД. Может работать как карта Mifare Classic в режиме эмуляции
  3. OTP и TimeOTP — определяется как hid клавиатура и по нажатию вводит одноразовый пароль. Time Based OTP через программный апплет (замена google authenticator)
  4. 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, позволяющая обойти ввод пин-кода и выполнить операцию с приватным ключом. И, так как обновление прошивки на устройствах запрещено из соображений безопасности, исправить баг нет возможности. Компания Yubico обещает заменить кривые железки всем желающим.
У меня как раз оказалась уязвимая версия прошивки 1.0.8

Эмуляция Mifare Classic — самая непонятная для меня функция. При попытке общаться с ней, как с обычным 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 к любым приложениям.

Комментарии (57)


  1. ohm
    27.04.2015 09:02
    +2

    Проверяет ли Google смену IMSI?


    1. zhovner Автор
      27.04.2015 09:06
      +3

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

      Точно проверяет IMSI Альфабанк и WebMoney.


      1. intelligence
        27.04.2015 10:57
        +2

        Вот самое интересное, что Альфабанк проверяет не всегда, за последнее время 3 раза менял сим карту (смена формата и переход на lte). И ни разу не было никаких проблем, хотя, до этого менял симку и пришлось обращаться в колл-центр.


        1. zhovner Автор
          27.04.2015 11:01
          +1

          Странно. Что по этому поводу скажут представители Альфабанка verybigman RockBee ZTamara denisx


  1. xforce
    27.04.2015 09:10

    При этом ключи предустановлены при производстве и никогда не покидают токен

    А каким образом убедиться, что там нормальные ключи теперь, а не 15 бит энтропии?


    1. xforce
      27.04.2015 09:19

      И даже более того — у производителя может лежать копия этого ключа. Поломают производителя, угонят базу ключей и абзац безопасности…


    1. 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


      1. Ivan_83
        27.04.2015 14:04
        +1

        Тут нужно понимать что претензии не к эллиптическим кривым а конкретно к тем кривым которые используют американцы, и то не ко всем, а именно к тем, которые якобы рандомные.
        В стандарте они называются secpXXXrY.
        К secpXXXkY вроде таких притензий нет, но их всего несколько: secp160k1, secp192k1, secp224k1, secp256k1.


  1. RZimin
    27.04.2015 09:19

    Правильно ли я прочитал, что U2F умеет только NEO?


    1. zhovner Автор
      27.04.2015 09:29
      +2

      Нет, еще EDGE, EDGE-N, NEO-N и синий. Вот удобная таблица www.yubico.com/products/yubikey-hardware
      По запросу «U2F» на amazon можно найти токены по 5 баксов.
      Мелкие удобно утапливаются в USB порту и не торчат
      image


      1. RZimin
        27.04.2015 09:45

        Спасибо, просто не увидел на сайте дистрибьтора Edge. Вот он как раз кажется оптимальным вариантом.


      1. ErshoFF
        27.04.2015 10:00

        Мелкие на амазоне (поиск по YubiKey,Nano, U2F и комбинации) показал минимальную цену 25 баксов. Дешевле не нашел.


        1. zhovner Автор
          27.04.2015 10:01
          +1

          1. ErshoFF
            27.04.2015 10:04

            Хотелось именно скрыть в порту USB, как на вашей картинке.
            Этот будет торчать.


            1. CAJAX
              27.04.2015 11:21

              Plug-up можно обрезать ножницами или обточить напильником. Схема спрятана непосрественно под контактной площадкой.


      1. intnzy
        27.04.2015 10:54
        +7

        Отличный вариант потерять все и сразу вместе с буком!


      1. ColorPrint
        28.04.2015 12:29

        У меня такой, очень удобно пользоваться и носить )


        1. zhovner Автор
          28.04.2015 13:37

          А openPGP тоже уязвим?


          1. ColorPrint
            28.04.2015 14:29

            Не проверял, не использую openPGP


  1. la0
    27.04.2015 09:46

    del


  1. gto
    27.04.2015 10:05

    При выборе Юбикейа имейте в виду, что до версии 1.0.9:

    developers.yubico.com/ykneo-openpgp/SecurityAdvisory%202015-04-14.html


    1. zhovner Автор
      27.04.2015 10:06

      Я об этом написал. Это касается только функционала openpgp.


      1. gto
        27.04.2015 10:10

        Ага, поздно заметил. Стал искать по 1.0.9 и не нашёл. Пардоньте. Вы, кстати, свою заменили? Долгая процедура?


        1. zhovner Автор
          27.04.2015 10:13

          В саппорте мне пообещали заменить, правда пока непонятно как, ведь в Украину они не шлют.
          Тема на форуме об этом forum.yubico.com/viewtopic.php?f=26&t=1854


  1. ProRunner
    27.04.2015 11:20

    А какая процедура восстановления доступа ко всем сервисам при потере токена?


    1. CAJAX
      27.04.2015 11:22

      Это зависит от сервиса. Гугл выдает десяток запасных кодов.


    1. zhovner Автор
      27.04.2015 11:23

      Это зависит от конкретного сервиса, кто как хочет так и реализовывает.
      Например гугл позволяет привязать сразу несколько токенов к одному аккаунту и обязательно требует активировать альтернативный способ авторизации, например OTP или по SMS. Еще есть одноразовые бекап-коды.


      1. ProRunner
        27.04.2015 11:30

        Тогда не вижу преимуществ над двухэтапной аутентификацией по смс, если через смс же можно восстановить доступ.


        1. zhovner Автор
          27.04.2015 11:31

          SMS можно полностью отключить и отвязать телефон если выбрать альтернативным вторым фактором OTP, он же Google Authenticatior.


  1. as1an
    27.04.2015 15:23

    del


  1. lSDriim
    27.04.2015 15:40

    Здесь вон вообще целый компьютер на линукс предлагают за 49 баксов www.amazon.com/s?marketplaceID=ATVPDKIKX0DER&me=A3V6YOGK9LVOC6&merchant=A3V6YOGK9LVOC6&redirect=true тоже вроде U2F поддерживает


  1. ntfs1984
    27.04.2015 18:17
    +1

    Основной недостаток устройства в том, что его нужно приобретать дополнительно.
    А в таком случае, лучше пользоваться старым проверенным динамическим RSA-токеном+в связке со статическим паролем.

    Плюс ко всему, USB не везде открыто. Сусурити.


    1. zhovner Автор
      27.04.2015 18:57

      проверенным динамическим RSA-токеном

      Каким например?


      1. ntfs1984
        27.04.2015 19:21
        +1

        Например, таким


        1. nochkin
          27.04.2015 19:49

          Но ведь RSA token надо тоже покупать дополнительно.
          Кстати, если есть от него ключ, то можно установить приложение на тот же смартфон и не таскать с собой токен.


          1. ntfs1984
            27.04.2015 19:59

            При том, что он не привязан к наличию USB-порта, и клиентскому ПО.


    1. nochkin
      27.04.2015 19:47

      Часто USB закрыт на запись только для USB flash mass media storage устройств. Клавиатура/мышка обычно сидят на USB в виде HID. Если HID разрешено, то токен в виде HID должен работать.
      Я только один раз встречал (да и то по-наслышке), что заблокировали USB полностью физическим отключением на мамке, а клавиатура/мышка были на PS/2.


      1. ntfs1984
        27.04.2015 19:58

        У меня в офисе просто блокируется USB. Как и в интернет-клубах.
        На смартах подключить сей девайс вообще трудновато будет, если вообще возможно.


        1. nochkin
          27.04.2015 22:44

          Про интернет-клубы не подумал, так как не сталкивался. Я больше про корпоративные решения.

          По поводу RSA на смартфонах есть такие приложения:
          Android
          iOS
          BlackBerry 10
          Можно добавить RSA токен и пользоваться вместо свеого без страха, что забыл дома (учитывая, что обычно телефон мы забываем намного реже).


          1. zhovner Автор
            27.04.2015 22:56

            TOTP намного более популярен, стандартизирован. Поддерживается Google, Github, Paypal, Dropbox, Evernote, Amazon, Heroku. Полно реализаций как аппаратных, так и софтовых. Зачем нужен этот secureID в таком случае?


            1. nochkin
              27.04.2015 23:07

              Как я понял, преимущество проприетарного RSA SecurID в том, что он уже есть на руках у ntfs1984. Это и обсуждается.
              RSA SecurID является достаточно популярным токеном в корпоративном мире.


            1. ntfs1984
              27.04.2015 23:15

              Первый мой комментарий был содержания «Если уж приходится приобретать что-то дополнительно — то лучше приобрести то что популярно, и удобно».

              Способов аутентификации можно придумать миллион, включая вебку на ноуте и OpenCV с анализатором рисунка сетчатки на удаленном ресурсе.

              Вопрос в удобстве.


              1. zhovner Автор
                27.04.2015 23:16

                >то что популярно

                Где используется SecureID?


                1. ntfs1984
                  27.04.2015 23:19

                  В системах авторизации.


              1. stansult
                28.04.2015 06:31

                с анализатором рисунка сетчатк
                Почти по теме — я недавно купил себе ноутбук с какой-то странной прорезью на корпусе.
                Провёл по ней пальцем — оказалось, анализатор отпечатка пальца :)
                Всегда считал это каким-то нелепым неудобным пижонством.
                А теперь, попробовав, оценил: действительно, удобно!


  1. gvozd1989
    27.04.2015 18:50

    Кто-нибудь в курсе, возможно ли проводить аутентификацию не нажимая кнопку, а автоматически?


    1. 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


    1. ColorPrint
      28.04.2015 12:36

      Мне кажется с кнопкой как раз удобнее. Особенно вон та миниатюрная модель выше, утапливаемая в корпус.


  1. volnov
    27.04.2015 21:08

    Есть ли смысл юзать LastPass с таким ключиком?


    1. zhovner Автор
      27.04.2015 22:35

      Зависит от уровня паранойи, LastPass умеет OTP, так что можно ограничиться им.


  1. istui
    27.04.2015 23:20

    Насколько анонимна такая штука — можно ли связать несколько сервисов по использованию одного и того же ключа?

    Насколько она надежна — каков шансы, что токен внезапно умрет (от чего, кстати? статика? наработка на отказ?)?
    Что делать с аккаунтом в таком случае, вроде бы, уже описали выше…


    1. zhovner Автор
      28.04.2015 13:39

      можно ли связать несколько сервисов по использованию одного и того же ключа?

      Да

      каков шансы, что токен внезапно умрет (от чего, кстати? статика? наработка на отказ?)?

      Не знаю.


  1. Iskin
    28.04.2015 02:47

    А можно ли авторизоваться с телефона?


    1. zhovner Автор
      28.04.2015 13:43

      Где именно? В приложении/сайте на телефоне можно авторизоваться брелком с помощью NFC.
      Телефоном как U2F токеном на компьютере, вероятно можно, если сделают SIM-карты с U2F или программную эмуляцию на телефоне.


      1. Iskin
        28.04.2015 14:47

        А как выглядит авторизация в приложении/сайте?


        1. zhovner Автор
          28.04.2015 14:49

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

          Вот типа такого grepular.com/An_NFC_PGP_SmartCard_For_Android


  1. elfuegobiz
    28.04.2015 20:39

    Спасибо большое за сообщение о баге и замене!