Help us understand the problem. What is going on with this article?

CTAP2 お勉強メモ#1 - 環境構築(Build)

はじめに

これはメモであります。
以前Webauthnについて勉強したので、今回はCTAPについて軽く勉強します。

WebAuthn(ウェブオースン)ではなく、CTAP(シータップ)であります。

CTAPとは

Client to Authenticator Protocol.
FIDOの外部認証デバイスとPlatform(クライアントプログラム)との通信プロトコルです。
Webauthn+CTAP2=FIDO2.0ってかんじです。

Client to Authenticator Protocol (CTAP)で詳しく書かれていますが、チョット読むには重いです。
BluetoothとかNFCとかありますが、今回はUSBのところだけ。
CTAPはWeb情報があまりないです・・・

キャプチャ5.PNG

Yubico セキュリティキー

お勉強に際してこれを使います。
本家 → https://www.yubico.com/products/yubikey-hardware/
日本代理店 → https://yubikey.yubion.com/yubikey_lineup.html
Amazon → http://amzn.asia/d/5m88BSX
キャプチャ2.PNG

今回はこの青いやつを使います。
この青いYubikeyは「Yubicoセキュリティキー」というらしく Yubikeyという名前ではないようです。おそらく機能が少ない簡易版なのでYubikeyの仲間に入れてもらえないのでしょう。
ここではこれをYubikeyと記載します。
CTAPの検証するにはこれで十分。

参考

環境

こんな環境でお勉強しています。

  • OS=Windows10 1803
  • 開発環境=Visual Studio Pro 2017(15.8.5)
    • Microsoft Visual C++ 2017
  • git version 2.19.1.windows.1

サンプルソースをデバック実行する

英語の仕様書を読んでも何が何だかサッパリわかりませんね。
サンプルプログラムを実行して確認すればまだわかりそうな気がします。
なので、GitにあるYubico/libfido2のinfo.exeをデバック実行できるようにします。

  • Windowsでビルドするにはlibfido2\windows\build.batを実行すればよい。
  • batの中でgit cloneしているのでGitを入れときましょう。
  • build.batのMSBuild.exe,cmake.exeのパスを確認。set "PATH=%PATH%;C:\Program Files~のところを自分の環境に合わせて修正する。
    • 自分の環境では
    • MSBuild.exe = C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin
    • cmake.exe = C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin
    • に変更しました。
  • libfido2のパスがC:\projects\libfido2であることが前提となっているので自分の環境に合わせて修正する。
  • 無事ビルドが終わると\libfido2\build\libfido2.slnができるのでこれでVisual Studioで開く。
  • Visual Studioからinfoをデバック実行しようとすると、crypto-43.dll,hidapi.dllがない、と怒られるので以下のファイルをlibfido2\build\examples\Debugに持ってくる。
    • C:\hidapi-Win64\windows\x64\Debug\hidapi.dll
    • C:\libressl-2.7.4-Win64\bin\crypto-43.dll

2019/1/23:追記
ここで出来上がるcrypto-43.dllはデバックモードで、デバック用のVCRUNTIME140D.DLLなどとリンクされます。
リリース用のdllが欲しい場合はC:\libressl-2.7.4\build\LibreSSL.slnをVisual Studioで立ち上げて個別にRelease構成でビルドしましょう。

とりあえず、デバック実行できるようになるが、usage: info <device>とエラーになり引数で<device> を指定しろ、と言っているようだ。何を指定すればいいかは次([Yubikeyのパスの調べ方]wi(https://qiita.com/gebo/items/d2ffbd4fcf7d75e21b63#yubikey%E3%81%AE%E3%83%91%E3%82%B9%E3%81%AE%E8%AA%BF%E3%81%B9%E6%96%B9))で。

キャプチャ.PNG

info.exeを実行
C:\project\libfido2\build\examples\Debug>info.exe
usage: info <device>
  • ※build.batを実行すると、Cドライブ直下に以下のフォルダを作りっぱなしにするので、気に入らない場合 消しましょう。
    • hidapi-Win64
    • libcbor
    • libcbor-0.5.0-Win64
    • libfido2-Win64
    • libressl-2.7.4
    • libressl-2.7.4-Win64

HID通信の基本

  • YubikeyとプログラムはHIDプロトコルで通信する(専用のドライバなし)。
  • HIDプロトコルで通信するためhidapi.dllを使っている。
  • このAPIはHID_Open(),HID_Read(),HID_Write()という単純なもの。
  • HID_Open()の引数でYubikeyのパスを指定するが、これがinfo.exe のコマンドライン引数の<Device>で指定したもの。

Yubikeyのパスの調べ方

追記:よく見たらmanifest.exeというツールがあって、これで一発で分かることがわかりました:scream:
追記:manifest.exeだったら一発だったを参照ください。

Yubikeyのパスの調べ方(こういうやりかたはやめましょう)

この手順はネットで適当に検索して出てきた手順を試した結果なので一体なにが何なのか、細かいことを考えるのはやめています。

1.デバイスマネージャでYubikeyのデバイスを調べる

  • Yubikeyを挿すとデバイスマネージャでヒューマンインターフェースデバイスの『USB入力デバイス』で認識される
  • デバイスインスタンスIDを見てYubikeyのデバイスを特定する。Yubibeyを抜き挿しして特定する。

キャプチャ3.PNG
キャプチャ4.PNG

2.レジストリで検索

  • YubikeyデバイスインスタンスパスのVID_9999&PID_9999(上図ではVID_1050&PID_0120)でレジストリを検索する。
  • HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClassesあたりを検索してみる。
  • キーを検索する。(値ではない)
  • ##?#HID#VID_から始まるキーを検索する。
  • 見つかったキーの?の両側の#だけ¥に変える。これがYubikeyのデバイスパスとなる
    • みつかったレジストリキー=##?#HID#VID_1050&PID_0120#6&1b5e4874&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
    • Yubikeyのデバイスパス(¥は小文字)=¥¥?¥HID#VID_1050&PID_0120#6&1b5e4874&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}

追記:manifest.exeだったら一発だった:scream:

単にmanifest.exeを実行すれば一発でYubikeyのパスが取れました。

manifest.exeを実行
C:\project\libfido2\build\examples\Debug>exemanifest.exe
\\?\hid#vid_1050&pid_0120#6&1b5e4874&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}: vendor=0x1050, product=0x0120 (Yubico Security Key by Yubico)

3.info.exeを実行してみる

  • 引数に指定するdevice(Yubikeyのデバイスパス)は『"』で囲みましょう。
  • コンソールにいろいろ情報が出ればOK。
  • あとはVisual Studioでデバック実行すればすべて理解できる?
info.exeを実行
C:\project\libfido2\build\examples\Debug>info.exe "\\?\HID#VID_1050&PID_0120#6&1b5e4874&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
proto: 0x02
major: 0x05
minor: 0x00
build: 0x02
caps: 0x05 (wink, cbor, msg)
version strings: U2F_V2, FIDO_2_0
extension strings: hmac-secret
aaguid: f8a011f38c0a4d15800617111f9edc7d
options: rk, up, noplat, noclientPin
maxmsgsiz: 1200
pin protocols: 1

お疲れさまでした?

CTAPのことは全然わかっていないが、とりあえずここまで。

CTAP2 お勉強メモ#2

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした