Как известно, пароль — только первый этап аутентификации, причём наименее надёжный. Пароль можно перехватить во время ввода (с клавиатуры или экрана), в процессе передачи на сервер, подобрать брутфорсом, скопировать из места хранения (в том числе с сервера компании, безопасность которого нам не подконтрольна) или узнать у человека. Даже наличие парольного менеджера не слишком улучшает ситуацию.

Двухфакторная аутентификация (2FA) сегодня обязательна, потому что второй фактор и на порядок увеличивает усилия для взлома. Стандартный второй фактор — это телефон, куда приходит дополнительный код. Ещё один дополнительный фактор — аппаратный ключ безопасности, который невозможно скопировать. Такой ключ может защищать доступ к вашему парольному менеджеру.

Давайте посмотрим, как сделаны такие ключи, кто их выпускает. И самое главное — как их сделать ещё лучше.

Стандарт U2F


Стандартом открытой аутентификации сейчас считается U2F (Universal 2nd Factor), его продвижением занимается альянс FIDO.

U2F — это открытый, бездрайверный протокол 2FA, позволяющий интернет-пользователям использовать U2F-устройство как второй фактор для аутентификации на большом количестве онлайн-сервисов.

Используется вызов-ответная схема аутентификации:

  1. Проверяющая сторона отправляет некоторые данные (то есть генерирует вызов) и дескриптор ключа для подписи браузеру.
  2. Браузер добавляет к этому URI, с которого был произведён запрос на подпись и ID канала TLS и отправляет на U2F устройство.
  3. Используя дескриптор ключа, устройство выбирает соответствующий ему закрытый ключ для подписи.
  4. Для предотвращения клонирования устройства, внутри него находится счётчик, который при каждой аутентификации увеличивает своё значение. Его значение тоже подписывается и отправляется проверяющей стороне.




Для подписи используется алгоритм ECDSA над кривой P-256, для хеширования — SHA-256.

Производители


Ключи для U2F выпускает несколько компаний, в том числе:

  • Yubico: Security Key, Security Key NFC, Security Key C NFC, YubiKey 5C, 5C NFC, 5Ci, 5 NFC)
  • Google: линейка ключей Titan (USB-A/NFC, USB-C/NFC);
  • Thetis (FIDO U2F и BLE U2F)
  • SoloKeys (Solo USB-C, Solo USB-A, Solo Tap USB-C, Solo Tap USB-A)



На практике использование такого ключа интуитивно понятно и просто:



Собственные ключи безопасности


Но ничто не останавливает инженеров от того, чтобы искать лучшие решения вместо существующих.

Например, шведская компания Multivad, которая занимается программными решениями в области информационной безопасности, недавно решила спроектировать и изготовить собственный ключ безопасности на платформе RISC-V со 128 КБ RAM. Для этого была зарегистрирована отдельная дочерняя фирма Tillitis AB. Первым её продуктом станет Tillitis Key — ключ безопасности нового типа, созданный с применением технологий DICE и Measured Boot.

Для справки, Measured Boot — это функция проверки аппаратной прошивки во время каждой загрузки, с сохранением информации в Trusted Platform Module (TPM), впервые представленная в Windows 8.

DICE (Device Identifier Composition Engine) aka RIoT (Robust | Resilient | Recoverable — IoT) — промышленный стандарт Trusted Computing Group для микроконтроллеров на базе TPM.


Ключ Tillitis

Tillitis Key предполагает функцию программирования пользователем и использования произвольных пользовательских приложений (на 128 КБ RAM). Как сказано в описании, во время использования микропрограмма на Tillitis Key извлекает уникальный ключ для каждого запускаемого приложения, проверяя его перед выполнением:

Это делается путём комбинирования хеш-значения приложения с уникальным секретом для каждого устройства. Приложения загружаются на устройство с главного компьютера во время использования и не хранятся на устройстве постоянно.

Секрет, предоставляемый пользователем или хостом, также может быть подмешан в функцию генерации нового ключа (key derivation function), что обеспечивает дополнительную защиту. Предполагается, что продвинутый аппаратный взломщик знает хеш целевого приложения и, скорее всего, в конечном итоге сумеет извлечь UDS из аппаратного обеспечения. При добавлении секрета, предоставляемого хостом, знания используемого приложения, а также UDS ключа безопасности будет недостаточно для получения секрета приложения. Таким образом, влияние потери или кражи ключа Tillitis Key на безопасность меньше, чем в случае обычных ключей безопасности.

Приложения устройства могут быть загружены по цепочке, когда первый этап приложения передаёт свой секрет второму этапу. Это повышает удобство работы пользователей, поскольку позволяет сохранить секрет приложения (и его открытый ключ) неизменным даже при обновлении приложения на устройстве. Это также позволяет разработчикам определять собственные политики доверия к обновлению ПО. Простое приложение первого этапа может выполнять проверку подписи кода на втором этапе, в то время как более продвинутое приложение потребует m-из-n подписей кода или доказательство включения Sigsum с учётом встроенных сценариев использования.

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

Самое главное, что Tillitis Key разрабатывается на открытом дизайне, то есть схемы и материалы/компоненты для изготовления аппаратного ключа публикуются в открытом доступе. С одной стороны, это гарантирует отсутствие в нём аппаратных закладок и повышает доверие к продукту. С другой стороны, любой желающий теоретически может заказать производство точно таких же изделий или даже собрать нечто подобное в единственном экземпляре конкретно для себя.

Можно вспомнить ещё одну попытку спроектировать ключ безопасности с открытым дизайном и применением надёжной криптографии — ключи Solo V2 от компании SoloKeys, которые в 2021 году успешно собрали финансирование на Кикстартере и сейчас запущены в производство.





Ключи Solo V2 изготавливаются на опенсорсном фреймворке Trussed для современных криптографических приложений. Идея в том, что все криптографические примитивы собраны в прошивку. Исходный код опубликован на GitHub.

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

Открытая экосистема


В целом, разработчики Trussed хотели бы сформировать большую открытую экосистему «доверенных приложений безопасности», куда войдут WireGuard, менеджеры паролей, GPG, карманные HSM и другое оборудование и софт на открытом стеке. «Всё это в итоге заменит JavaCard и перенесёт встроенные криптографические прошивки в современную эпоху», — рассчитывают они.

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


  1. MedicusAmicus
    09.01.2023 22:28

    У меня тут недавно после обновления телефон выразил желание стать FIDO ключом.
    Было бы здорово, если бы вы осветили эту функцию тоже. Любопытно же.


    1. makkarpov
      09.01.2023 23:46

      Это по сути то же самое, просто реализованное в ОС в телефоне. С точки зрения сайта это один и тот же тип устройств, и взаимодействия ничем не отличаются.

      С фичей можно поиграться, например, здесь - https://webauthn.io/.


    1. Kenya-West
      10.01.2023 10:16

      У меня Windows на каждом устройстве (ноутбуки и ПК) стала своего рода FIDO-ключом. Авторизуюсь в GitHub, на сайтах MS и, прости Г-споди, Mail.ru через отпечаток пальца по технологии Windows Hello (купил на AliExpress грамм 400 сенсоров, ссылка затерялась, они тогда наразвес продавались).

      Дошло даже до казуса года два назад:

      Появилось окошко с подтверждением биометрии на ПК, мол, прислоните пальчик
      Я чисто на рефлексах приложил палец, не зная, откуда оно появилось и чтО будет после этого
      В итоге только через десять минут понял, что веб-приложение Azure зашло в мой аккаунт Microsoft и с Paypal автоматом списало последние 53₽ в свою пользу. Вкладок браузера было открыто немеряно, проверять все было лень.

      Киберпунк, который мы заслужили


  1. Uris
    10.01.2023 06:23
    +2

    Ключи для U2F выпускает несколько компаний, в том числе:

    • Yubico: Security Key, Security Key NFC, Security Key C NFC, YubiKey 5C, 5C NFC, 5Ci, 5 NFC)

    • Google: линейка ключей Titan (USB-A/NFC, USB-C/NFC);

    • Thetis (FIDO U2F и BLE U2F)

    • SoloKeys (Solo USB-C, Solo USB-A, Solo Tap USB-C, Solo Tap USB-A)

    Аналогичную функцию содержит всем известный Flipper Zero, о котором много писали на Хабре. Проверено - работает)


    1. 13werwolf13
      10.01.2023 07:53

      а на чём проверено? у меня давно чешутся руки прикрутить U2F к grub чтобы он разблокировал LUKS раздел, но всё время что-то мешает..


      1. DaemonGloom
        10.01.2023 20:54

        Скорее всего — на чём-нибудь типа гитхаба. Аутентификацию в Windows через U2F с помощью Флиппера не пройти.


        1. 13werwolf13
          11.01.2023 08:17

          а что не так с windows? я как-бы не очень интересуюсь этой ОС, но вроде бы где-то читал что U2F она поддерживает.


          1. DaemonGloom
            11.01.2023 08:47

            Windows требует сертифицированные ключи, а флиппер таковым не является.


            1. 13werwolf13
              11.01.2023 13:01

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


    1. dartraiden
      10.01.2023 23:21

      Ещё KEY-ID выпускает. И они даже есть на Alexpress в районе 1800р. Вообще, если там вбить в поиск «FIDO2», то можно найти всякие разные ключи.


  1. scruff
    10.01.2023 12:24

    неплохо бы увидеть полный процесс установки/настройки от и до.


  1. VadimProfii
    11.01.2023 14:25

    Хотелось бы узнать, есть ли чисто программные решения для домашнего пользования? Поделки от криптопро не предлагать)) Поделки только под "венду"-тоже.