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)
xforce
27.04.2015 09:10При этом ключи предустановлены при производстве и никогда не покидают токен
А каким образом убедиться, что там нормальные ключи теперь, а не 15 бит энтропии?xforce
27.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/1224252Ivan_83
27.04.2015 14:04+1Тут нужно понимать что претензии не к эллиптическим кривым а конкретно к тем кривым которые используют американцы, и то не ко всем, а именно к тем, которые якобы рандомные.
В стандарте они называются secpXXXrY.
К secpXXXkY вроде таких притензий нет, но их всего несколько: secp160k1, secp192k1, secp224k1, secp256k1.
RZimin
27.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 порту и не торчат
RZimin
27.04.2015 09:45Спасибо, просто не увидел на сайте дистрибьтора Edge. Вот он как раз кажется оптимальным вариантом.
ErshoFF
27.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
ColorPrint
28.04.2015 12:29У меня такой, очень удобно пользоваться и носить )
gto
27.04.2015 10:05При выборе Юбикейа имейте в виду, что до версии 1.0.9:
developers.yubico.com/ykneo-openpgp/SecurityAdvisory%202015-04-14.htmlzhovner Автор
27.04.2015 10:06Я об этом написал. Это касается только функционала openpgp.
gto
27.04.2015 10:10Ага, поздно заметил. Стал искать по 1.0.9 и не нашёл. Пардоньте. Вы, кстати, свою заменили? Долгая процедура?
zhovner Автор
27.04.2015 10:13В саппорте мне пообещали заменить, правда пока непонятно как, ведь в Украину они не шлют.
Тема на форуме об этом forum.yubico.com/viewtopic.php?f=26&t=1854
ProRunner
27.04.2015 11:20А какая процедура восстановления доступа ко всем сервисам при потере токена?
zhovner Автор
27.04.2015 11:23Это зависит от конкретного сервиса, кто как хочет так и реализовывает.
Например гугл позволяет привязать сразу несколько токенов к одному аккаунту и обязательно требует активировать альтернативный способ авторизации, например OTP или по SMS. Еще есть одноразовые бекап-коды.
lSDriim
27.04.2015 15:40Здесь вон вообще целый компьютер на линукс предлагают за 49 баксов www.amazon.com/s?marketplaceID=ATVPDKIKX0DER&me=A3V6YOGK9LVOC6&merchant=A3V6YOGK9LVOC6&redirect=true тоже вроде U2F поддерживает
ntfs1984
27.04.2015 18:17+1Основной недостаток устройства в том, что его нужно приобретать дополнительно.
А в таком случае, лучше пользоваться старым проверенным динамическим RSA-токеном+в связке со статическим паролем.
Плюс ко всему, USB не везде открыто. Сусурити.zhovner Автор
27.04.2015 18:57проверенным динамическим RSA-токеном
Каким например?ntfs1984
27.04.2015 19:21+1nochkin
27.04.2015 19:47Часто USB закрыт на запись только для USB flash mass media storage устройств. Клавиатура/мышка обычно сидят на USB в виде HID. Если HID разрешено, то токен в виде HID должен работать.
Я только один раз встречал (да и то по-наслышке), что заблокировали USB полностью физическим отключением на мамке, а клавиатура/мышка были на PS/2.ntfs1984
27.04.2015 19:58У меня в офисе просто блокируется USB. Как и в интернет-клубах.
На смартах подключить сей девайс вообще трудновато будет, если вообще возможно.nochkin
27.04.2015 22:44Про интернет-клубы не подумал, так как не сталкивался. Я больше про корпоративные решения.
По поводу RSA на смартфонах есть такие приложения:
Android
iOS
BlackBerry 10
Можно добавить RSA токен и пользоваться вместо свеого без страха, что забыл дома (учитывая, что обычно телефон мы забываем намного реже).zhovner Автор
27.04.2015 22:56TOTP намного более популярен, стандартизирован. Поддерживается Google, Github, Paypal, Dropbox, Evernote, Amazon, Heroku. Полно реализаций как аппаратных, так и софтовых. Зачем нужен этот secureID в таком случае?
ntfs1984
27.04.2015 23:15Первый мой комментарий был содержания «Если уж приходится приобретать что-то дополнительно — то лучше приобрести то что популярно, и удобно».
Способов аутентификации можно придумать миллион, включая вебку на ноуте и OpenCV с анализатором рисунка сетчатки на удаленном ресурсе.
Вопрос в удобстве.stansult
28.04.2015 06:31с анализатором рисунка сетчатк
Почти по теме — я недавно купил себе ноутбук с какой-то странной прорезью на корпусе.
Провёл по ней пальцем — оказалось, анализатор отпечатка пальца :)
Всегда считал это каким-то нелепым неудобным пижонством.
А теперь, попробовав, оценил: действительно, удобно!
gvozd1989
27.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
ColorPrint
28.04.2015 12:36Мне кажется с кнопкой как раз удобнее. Особенно вон та миниатюрная модель выше, утапливаемая в корпус.
istui
27.04.2015 23:20Насколько анонимна такая штука — можно ли связать несколько сервисов по использованию одного и того же ключа?
Насколько она надежна — каков шансы, что токен внезапно умрет (от чего, кстати? статика? наработка на отказ?)?
Что делать с аккаунтом в таком случае, вроде бы, уже описали выше…zhovner Автор
28.04.2015 13:39можно ли связать несколько сервисов по использованию одного и того же ключа?
Да
каков шансы, что токен внезапно умрет (от чего, кстати? статика? наработка на отказ?)?
Не знаю.
Iskin
28.04.2015 02:47А можно ли авторизоваться с телефона?
zhovner Автор
28.04.2015 13:43Где именно? В приложении/сайте на телефоне можно авторизоваться брелком с помощью NFC.
Телефоном как U2F токеном на компьютере, вероятно можно, если сделают SIM-карты с U2F или программную эмуляцию на телефоне.Iskin
28.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