Как получить открытый и закрытый ключи токена U2F (например, Yubikey Neo) в Java

Я пытаюсь создать приложение, которое может извлекать открытый и закрытый ключ из токена U2F, например Yubikey Neo на языке Java. Я попытался использовать простой сканер в консоли, чтобы получить что-нибудь от Yubikey Neo, но это не сработало, так как не было напечатано (вероятно, из-за формата), в отличие от OTP, который будет распечатан в Блокноте, чтобы его можно было распечатать. захвачено читателем.

Я знаю, что, как и Yubico, он предлагает только реализацию на Javascript, которая может извлекать открытый ключ, когда пользователь касается кнопки токена U2F, но до сих пор я не нашел в Java библиотеки, которая могла бы это сделать. Могу ли я каким-то образом получить открытый и закрытый ключ из токена U2F?


person Ihsan Haikal    schedule 22.08.2016    source источник


Ответы (1)


Краткий ответ: вы не можете извлечь приватные ключи.

U2F основан на криптографии с открытым ключом (также известной как асимметричная криптография). Закрытые ключи никогда не покидают токены U2F и используются только внутри токенов (внутренним процессором, обычно встроенной смарт-картой) для подписи случайных вызовов сервера.

См. упрощенную схему аутентификации U2F здесь

Используя криптографию с открытым ключом, FIDO U2F намного безопаснее, чем OTP / TOTP.

Подробнее о FIDO U2F:

http://www.slideshare.net/CloudIDSummit/cis-2015b-fido-u2-f-in-10-minutes-cis-2015

person Frederic MARTIN    schedule 23.08.2016
comment
Могу ли я получить открытый ключ вместо этого, нажав кнопку на моем Yubikey Neo? - person Ihsan Haikal; 23.08.2016
comment
Для каждой личности есть пара ключей (публичный и частный). Каждый открытый ключ отправляется на сервер во время регистрации (каждое создание идентификатора), это единственный раз, когда вы можете увидеть, как он перемещается между токенами U2F и серверами (через SSL, поскольку https является обязательным). Открытые ключи затем хранятся на стороне сервера и больше не отправляются во время следующих аутентификаций. - person Frederic MARTIN; 23.08.2016
comment
Если вы хотите увидеть, как выглядит открытый ключ токена U2F (и его сертификат), вы можете перейти на demo.yubico.com/u2f?tab=register и после регистрации нажмите кнопку с техническими данными. - person Frederic MARTIN; 23.08.2016
comment
Я пробовал этот веб-сайт, и в основном этот веб-сайт контролируется javascript u2f, но я не смог найти точный метод в реализации Java для получения открытого ключа или открытого ключа, когда сервер отправляет запрос и когда пользователь нажимает кнопку Юбикей Нео будет подписан. - person Ihsan Haikal; 23.08.2016
comment
Насколько мне известно, на стороне клиента нет существующей Java-реализации Java FIDO U2F (что не невозможно, просто это еще не было сделано). - person Frederic MARTIN; 23.08.2016
comment
На стороне сервера вы можете использовать это на своем собственном сервере developers.yubico.com/java- u2flib-server Кстати, я не совсем понимаю, в чем заключалась ваша основная цель :) - person Frederic MARTIN; 23.08.2016
comment
Моя главная цель - иметь возможность аутентификации U2F в Java-приложении, которое я создаю. Я заметил, что когда сервер отправляет запрос клиенту, клиент коснется кнопки Yubikey Neo, и он сгенерирует подпись на основе запроса. Моя проблема в том, что я не знаю, как реализовать это в моем Java-приложении, особенно когда пользователь нажимает кнопку, и он подписывает вызов. - person Ihsan Haikal; 23.08.2016
comment
Итак ... :( для вас непростое решение, поскольку (AFAIK) нет существующего Java-клиента для FIDO U2F. Вам придется подождать, попросить его у альянса FIDO ... или реализовать свой собственный. fidoalliance.org/specifications/download Удачи! :) - person Frederic MARTIN; 24.08.2016