=kthrtty/(+blog)

最近旅してないフルスタックサラリーマンジャーマネの旅行の記録

U2F/FIDO2/WebAuthnのセキュリティキーのファームウェアをnRF52840-MDM USB Dongleに焼いてオレオレセキュリティキーを作って遊ぶ

これはなに

以下をします。

  • OpenSKというRustで書かれたFIDO2/WebAuthnのGithubプロジェクトがあります。
  • nRF52840というWiFi/Bluetooth/NFCに対応したUSBメモリサイズのお手軽マイコン開発キットがあります。
  • DFUモードでUSB経由でOpenSKを書き込むことで、お手製FIDO2/WebAuthn USBドングルが出来上がります。
  • システムを破壊してしまいDFUで書き込みができなくなったら、OpenOCD + Buspirateという安価な組み合わせでJTAG経由でnRF52840にメモリマップされる不揮発に直接書き込むことで復活させます。(未記載)

なぜそれをするの

  • 私が、10年ほどの間、Digital Identity(SAML/OpenID2.0/OAuth1.0a/OAuth2/OIDC/NIST SP800-63-Bなどなど)に関わる仕事をしていたのでそういうのが好きだからです。
  • 最近は、自動車セキュリティもとい、IoT/Hardware/Connected Serviceにまたがるセキュリティを仕事にしているので好きだからです。

OpenSK

https://github.com/google/OpenSK

Rustで書かれているらしいです。現時点で私はさっぱりRustは知りませんが、難しいと後輩が言っていました。もともと制的型付け言語が好きで、動的な型の言語は不安になるタイプなので、相性は良さそうな気がします。

nRF52840

あまり詳しくは知りませんが、要するに安いマイコンです。 Arduino界隈ではSTM32が激安で流行っていますが、そういうものの1種と考えておけばよいでしょう。

f:id:kthrtty:20200608000720p:plain

どこで購入するの

DigiKey、マルツオンライン、Mouser、Amazon、AliExpressあたりで購入できます。 基本的には国内在庫はなく海外発送となるため、2週間程度の時間がかかるでしょう。

私は"makerdiary"から発売されている"nRF52840-MDK USB Dongle"を買いました。送料込みで2000円ぐらいだったと記憶しています。

皆様は、公式でリストされている以下を買うのが良いと思います。

一応私が購入したnRF52840-MDKも動作実績あり、ということのようですが、末尾で記載している不具合が機種依存という可能性も捨てきれません。

OpenSKを導入する

Rustの環境を導入する

Ubuntuなのでapt search rustして適当なパッケージ入れる、だとうまくいかなそうなので素直に公式のInstructionに従います。

rustupを入れるそうです。 https://qiita.com/yoshiyasu1111/items/0c3d08658560d4b91431 を参考にしました。ありがとうございました。

一般ユーザの環境にランタイムを導入できるようなので、一般ユーザで作業します。

kthrtty@ubuntu:~/$ curl https://sh.rustup.rs -sSf | sh
info: downloading installer

Welcome to Rust!

This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.

It will add the cargo, rustc, rustup and other commands to
Cargo's bin directory, located at:

  /home/kthrtty/.cargo/bin

This can be modified with the CARGO_HOME environment variable.

Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:

  /home/kthrtty/.rustup

This can be modified with the RUSTUP_HOME environment variable.

This path will then be added to your PATH environment variable by
modifying the profile file located at:

  /home/kthrtty/.profile

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>
・・・
  stable installed - rustc 1.44.0 (49cae5576 2020-06-01)


Rust is installed now. Great!

To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH
environment variable. Next time you log in this will be done
automatically.

To configure your current shell run source $HOME/.cargo/env

導入されたようです。

OpenSKのsetupスクリプトを動かして必要なツールチェインを導入する

叩いて待つべし。

スクリプトの実行中にバージョン依存関係のエラーとか出たりしますが、ログを見ると自動的にリカバってくれているようで、最終的には問題なく終了したようです。

kthrtty@ubuntu:~/OpenSK/github/OpenSK$ ./setup.sh 
Submodule 'third_party/libtock-rs' (https://github.com/tock/libtock-rs) registered for path 'third_party/libtock-rs'
Submodule 'third_party/tock' (https://github.com/tock/tock) registered for path 'third_party/tock'
Cloning into '/home/kthrtty/OpenSK/github/OpenSK/third_party/libtock-rs'...
Cloning into '/home/kthrtty/OpenSK/github/OpenSK/third_party/tock'...
Submodule path 'third_party/libtock-rs': checked out 'ab2c945184b98ecae3e70ac678e9f5231deef73b'
Submodule path 'third_party/tock': checked out 'f1f9d717a4d9b5ae934a3b50ce6a18e6dff3e7c7'
[-] Copying additional boards to Tock... DONE.
[-] Applying patch "01-persistent-storage.patch"... DONE.
[-] Applying patch "02-usb.patch"... DONE.
[-] Applying patch "03-usb-debugging.patch"... DONE.
[-] Applying patch "04-additional-boards.patch"... DONE.
[-] Applying patch "01-linked_list_allocator.patch"... DONE.
[-] Applying patch "02-panic_console.patch"... DONE.
[-] Applying patch "03-timer.patch"... DONE.
[-] Applying patch "04-public_syscalls.patch"... DONE.
[-] Applying patch "05-bigger_heap.patch"... DONE.
[-] Applying patch "06-no_spin_allocator.patch"... DONE.
[-] Applying patch "07-debug_allocations.patch"... DONE.
Can't load /home/kthrtty/.rnd into RNG
139707493216704:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/home/kthrtty/.rnd
Signature ok
subject=CN = Google OpenSK CA
Getting Private key
Can't load /home/kthrtty/.rnd into RNG
140406427599296:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/home/kthrtty/.rnd
Signature ok
subject=CN = Google OpenSK Hacker Edition
Getting CA Private Key
info: syncing channel updates for 'nightly-2020-02-03-x86_64-unknown-linux-gnu'
info: latest update on 2020-02-03, rust version 1.42.0-nightly (f43c34a13 2020-02-02)
・・・
  Installing /home/kthrtty/.cargo/bin/elf2tab
   Installed package `elf2tab v0.5.0` (executable `elf2tab`)

FIDO2/WebAuthnのAttestation用の鍵が自動生成されているようですが、とりあえず動作確認したいだけなので、差し替えることもなくそのまま先へ進みます

kthrtty@ubuntu:~/OpenSK/github/OpenSK$ ls -l ./crypto_data/
合計 28
-rw------- 1 kthrtty kthrtty 302  6月  7 17:46 opensk.key
-rw-r--r-- 1 kthrtty kthrtty 363  6月  7 17:46 opensk_ca.csr
-rw------- 1 kthrtty kthrtty 302  6月  7 17:46 opensk_ca.key
-rw-r--r-- 1 kthrtty kthrtty 489  6月  7 17:46 opensk_ca.pem
-rw-r--r-- 1 kthrtty kthrtty  41  6月  7 17:46 opensk_ca.srl
-rw-r--r-- 1 kthrtty kthrtty 379  6月  7 17:46 opensk_cert.csr
-rw-r--r-- 1 kthrtty kthrtty 489  6月  7 17:46 opensk_cert.pem

DFUモードで起動してUSB経由で焼く

都合の良いことにnRF52840-MDK USB Dongleは出荷時にDFUモードに対応しているBootloaderを焼いた状態で出荷してくれているようです。

Bootloaderに関する記述は以下を参考に。 https://wiki.makerdiary.com/nrf52840-mdk-usb-dongle/opensk/getting-started/ https://wiki.makerdiary.com/nrf52840-mdk-usb-dongle/programming/

公式を見ると、Advanced Installationに"Nordic DFU"があるじゃないですか。 https://github.com/google/OpenSK/blob/master/docs/install.md#advanced-installation

./deploy.pyを眺めると以下のような記述があります。 なるほどnrfutilというのが必要となるようです。

        return subprocess.run(
            [
                "nrfutil", "dfu", "usb-serial",
                "--package={}".format(dfu_pkg_file),
                "--serial-number={}".format(serial_number[0])
            ],
            check=False,
            timeout=None,
        ).returncode

ということで、次は"nRF Util"をインストールします。

nRF Utilのインストール

詳細は以下に書いてあります。

https://github.com/NordicSemiconductor/pc-nrfutil

環境次第ですが、Python3で入れましょう。 (公式でOpenSK自体がPython3依存っぽい感じで書いてあったので。)

kthrtty@ubuntu:~/OpenSK/github/OpenSK$ pip3 install nrfutil

※エラー出たら--user指定で解決するかもしれない。

DFUモードで認識させる

各種ドキュメントを読むと、出荷時のBootloaderはDFUボタンを押しながら給電(USBポートに挿す)で、DFUモードとして認識されるようです。

lsusbの認識の差で把握できますね。

"Nordic Semiconductor ASA"(VID:PID=1915:cafe)と認識されているのは通常状態。

root@ubuntu:~# lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 006: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 004: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 021: ID 1915:cafe Nordic Semiconductor ASA 
Bus 003 Device 005: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 003 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

"Nordic Semiconductor ASA"と認識されなくなればDFUモード(VID:PID=239a:0029)。

root@ubuntu:~# lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 006: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 004: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 022: ID 239a:0029  
Bus 003 Device 005: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 003 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

OpenSKをビルドする

リポジトリからソースコードをとってきます。

kthrtty@ubuntu:~/OpenSK/github$ git clone https://github.com/google/OpenSK.git
Cloning into 'OpenSK'...
remote: Enumerating objects: 62, done.
remote: Counting objects: 100% (62/62), done.
remote: Compressing objects: 100% (47/47), done.
remote: Total 1323 (delta 31), reused 37 (delta 15), pack-reused 1261
Receiving objects: 100% (1323/1323), 3.55 MiB | 276.00 KiB/s, done.
Resolving deltas: 100% (774/774), done.

ビルドします。

kthrtty@ubuntu:~/OpenSK/github/OpenSK$ ./deploy.py --board=nrf52840_mdk_dfu --opensk --programmer=nordicdfu
・・・
info: Creating DFU package
Traceback (most recent call last):
  File "/home/kthrtty/.local/bin/nrfutil", line 6, in <module>
    from nordicsemi.__main__ import cli
  File "/home/kthrtty/.local/lib/python3.6/site-packages/nordicsemi/__main__.py", line 49, in <module>
    from nordicsemi.dfu.bl_dfu_sett import BLDFUSettings
  File "/home/kthrtty/.local/lib/python3.6/site-packages/nordicsemi/dfu/bl_dfu_sett.py", line 51, in <module>
    from nordicsemi.dfu.package import Package
  File "/home/kthrtty/.local/lib/python3.6/site-packages/nordicsemi/dfu/package.py", line 53, in <module>
    from nordicsemi.dfu.init_packet_pb import InitPacketPB, DFUType, CommandTypes, ValidationTypes, SigningTypes, HashTypes
  File "/home/kthrtty/.local/lib/python3.6/site-packages/nordicsemi/dfu/init_packet_pb.py", line 38, in <module>
    from . import dfu_cc_pb2 as pb
  File "/home/kthrtty/.local/lib/python3.6/site-packages/nordicsemi/dfu/dfu_cc_pb2.py", line 23, in <module>
    serialized_pb=_b('\n\x1bnordicsemi/dfu/dfu-cc.proto\x12\x03\x64\x66u\"6\n\x04Hash\x12 \n\thash_type\x18\x01 \x02(\x0e\x32\r.dfu.HashType\x12\x0c\n\x04hash\x18\x02 \x02(\x0c\"B\n\x0e\x42ootValidation\x12!\n\x04type\x18\x01 \x02(\x0e\x32\x13.dfu.ValidationType\x12\r\n\x05\x62ytes\x18\x02 \x02(\x0c\"\xf8\x01\n\x0bInitCommand\x12\x12\n\nfw_version\x18\x01 \x01(\r\x12\x12\n\nhw_version\x18\x02 \x01(\r\x12\x12\n\x06sd_req\x18\x03 \x03(\rB\x02\x10\x01\x12\x19\n\x04type\x18\x04 \x01(\x0e\x32\x0b.dfu.FwType\x12\x0f\n\x07sd_size\x18\x05 \x01(\r\x12\x0f\n\x07\x62l_size\x18\x06 \x01(\r\x12\x10\n\x08\x61pp_size\x18\x07 \x01(\r\x12\x17\n\x04hash\x18\x08 \x01(\x0b\x32\t.dfu.Hash\x12\x17\n\x08is_debug\x18\t \x01(\x08:\x05\x66\x61lse\x12,\n\x0f\x62oot_validation\x18\n \x03(\x0b\x32\x13.dfu.BootValidation\"\x1f\n\x0cResetCommand\x12\x0f\n\x07timeout\x18\x01 \x02(\r\"i\n\x07\x43ommand\x12\x1c\n\x07op_code\x18\x01 \x01(\x0e\x32\x0b.dfu.OpCode\x12\x1e\n\x04init\x18\x02 \x01(\x0b\x32\x10.dfu.InitCommand\x12 \n\x05reset\x18\x03 \x01(\x0b\x32\x11.dfu.ResetCommand\"m\n\rSignedCommand\x12\x1d\n\x07\x63ommand\x18\x01 \x02(\x0b\x32\x0c.dfu.Command\x12*\n\x0esignature_type\x18\x02 \x02(\x0e\x32\x12.dfu.SignatureType\x12\x11\n\tsignature\x18\x03 \x02(\x0c\"S\n\x06Packet\x12\x1d\n\x07\x63ommand\x18\x01 \x01(\x0b\x32\x0c.dfu.Command\x12*\n\x0esigned_command\x18\x02 \x01(\x0b\x32\x12.dfu.SignedCommand*\x1d\n\x06OpCode\x12\t\n\x05RESET\x10\x00\x12\x08\n\x04INIT\x10\x01*n\n\x06\x46wType\x12\x0f\n\x0b\x41PPLICATION\x10\x00\x12\x0e\n\nSOFTDEVICE\x10\x01\x12\x0e\n\nBOOTLOADER\x10\x02\x12\x19\n\x15SOFTDEVICE_BOOTLOADER\x10\x03\x12\x18\n\x14\x45XTERNAL_APPLICATION\x10\x04*D\n\x08HashType\x12\x0b\n\x07NO_HASH\x10\x00\x12\x07\n\x03\x43RC\x10\x01\x12\n\n\x06SHA128\x10\x02\x12\n\n\x06SHA256\x10\x03\x12\n\n\x06SHA512\x10\x04*t\n\x0eValidationType\x12\x11\n\rNO_VALIDATION\x10\x00\x12\x1a\n\x16VALIDATE_GENERATED_CRC\x10\x01\x12\x13\n\x0fVALIDATE_SHA256\x10\x02\x12\x1e\n\x1aVALIDATE_ECDSA_P256_SHA256\x10\x03*3\n\rSignatureType\x12\x15\n\x11\x45\x43\x44SA_P256_SHA256\x10\x00\x12\x0b\n\x07\x45\x44\x32\x35\x35\x31\x39\x10\x01')
TypeError: __new__() got an unexpected keyword argument 'serialized_options'
fatal: Failed to execute nrfutil: Command '['nrfutil', 'pkg', 'generate', '--hw-version=52', '--sd-req=0', '--application-version=1', '--application=target/nrf52840_mdk_dfu_merged.hex', 'target/nrf52840_mdk_dfu_dfu.zip']' returned non-zero exit status 1.

エラーで終了します。'serialized_options'というキーワードでprotobufを更新すればエラーが消える、という話があったので、更新します。

kthrtty@ubuntu:~/OpenSK/github/OpenSK$ pip3 install -U protobuf --user

すると、どうやら通るようになります。

kthrtty@ubuntu:~/OpenSK/github/OpenSK$ ./deploy.py --board=nrf52840_mdk_dfu --opensk --programmer=nordicdfu
info: Updating rust toolchain to nightly-2020-02-03
info: syncing channel updates for 'nightly-2020-02-03-x86_64-unknown-linux-gnu'
info: checking for self-updates
info: component 'rust-std' for target 'thumbv7em-none-eabi' is up to date
info: Rust toolchain up-to-date
info: Building Tock OS for board nrf52840_mdk_dfu
    Finished release [optimized + debuginfo] target(s) in 0.03s
info: Building OpenSK application
    Finished release [optimized] target(s) in 0.05s
info: Generating Tock TAB file for application/example ctap2
info: Generating all-merged HEX file: target/nrf52840_mdk_dfu_merged.hex
info: Creating DFU package
info: Please insert the dongle and switch it to DFU mode by keeping the button pressed while inserting...
info: Press [ENTER] when ready.
fatal: Couldn't find any DFU device on your system.

エンターを押して、DFUモード経由で書き込みます。 ・・・と思っていたら、シリアルデバイスとして接続可能なDFUモードとして認識していないっぽいエラーメッセージが。

dmesgする。

[28158.127850] sd 33:0:0:0: [sdb] Attached SCSI removable disk
[28158.637656] usb 3-1.2: USB disconnect, device number 32
[28161.680491] usb 3-1.2: new full-speed USB device number 33 using xhci_hcd
[28161.978509] usb 3-1.2: New USB device found, idVendor=239a, idProduct=0029, bcdDevice= 1.00
[28161.978513] usb 3-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[28161.978516] usb 3-1.2: Product: nRF52840 MDK USB Dongle
[28161.978518] usb 3-1.2: Manufacturer: MakerDiary
[28161.978520] usb 3-1.2: SerialNumber: A6309C8E5741C991
[28161.986446] cdc_acm 3-1.2:1.0: ttyACM0: USB ACM device
[28161.987890] usb-storage 3-1.2:1.2: USB Mass Storage device detected
[28161.988488] scsi host33: usb-storage 3-1.2:1.2
[28162.995135] scsi host33: scsi scan: INQUIRY result too short (5), using 36
[28162.995140] scsi 33:0:0:0: Direct-Access     Adafruit nRF UF2          1.0  PQ: 0 ANSI: 2
[28162.995979] sd 33:0:0:0: Attached scsi generic sg2 type 0
[28162.998225] sd 33:0:0:0: [sdb] 8000 512-byte logical blocks: (4.10 MB/3.91 MiB)
[28162.999342] sd 33:0:0:0: [sdb] Write Protect is off
[28162.999344] sd 33:0:0:0: [sdb] Mode Sense: 03 00 00 00
[28163.000510] sd 33:0:0:0: [sdb] No Caching mode page found
[28163.000513] sd 33:0:0:0: [sdb] Assuming drive cache: write through
[28163.020195]  sdb:
[28163.027262] sd 33:0:0:0: [sdb] Attached SCSI removable disk

なるほど、すでにBootloaderがUF2として出荷されており、ボタンを押しながら認識させるとマスストレージデバイスとして認識されているということですね。

https://wiki.makerdiary.com/nrf52840-mdk-usb-dongle/programming/#dfu-via-uf2-bootloader

ファームウェアをUF2 Bootloaderの機能で書き込む

先ほど./deployを動かしていれば、target/nrf52840_mdk_dfu_merged.hexができているので、ここから変換すれば良さそうです。

https://github.com/makerdiary/nrf52840-mdk-usb-dongle/tree/master/tools

git clone https://github.com/makerdiary/nrf52840-mdk-usb-dongle

して、uf2convコマンドでhexファイルからuf2ファームウェアイメージを生成します。

kthrtty@ubuntu:~/OpenSK/github/nrf52840-mdk-usb-dongle/tools$ python3 uf2conv.py ../../OpenSK/target/nrf52840_mdk_dfu_merged.hex -c -f 0xADA52840
Converting to uf2, output size: 781312, start address: 0x1000
Wrote 781312 bytes to flash.uf2.

すると、

kthrtty@ubuntu:~/OpenSK/github/nrf52840-mdk-usb-dongle/tools$ ls
flash.uf2  mergehex  uf2conv.py

無事にflash.uf2が作成されたようです。

あとはフラッシュメモリとして認識されたドングルに書き込めば良いですね。

root@ubuntu:/mnt# mkdir mass_storage
root@ubuntu:/mnt# mount -t vfat /dev/sdb /mnt/mass_storage/
root@ubuntu:/mnt# cp /home/kthrtty/OpenSK/github/nrf52840-mdk-usb-dongle/tools/flash.uf2 /mnt/mass_storage/

書き込みが終わるとUSB認識がどう変わりますかね?

root@ubuntu:/mnt# lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 006: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 004: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 037: ID 1915:521f Nordic Semiconductor ASA 
Bus 003 Device 005: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 003 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
root@ubuntu:/mnt# dmesg
[29355.553043] usb 3-1.2: new full-speed USB device number 37 using xhci_hcd
[29355.851469] usb 3-1.2: New USB device found, idVendor=1915, idProduct=521f, bcdDevice= 0.01
[29355.851472] usb 3-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[29355.851473] usb 3-1.2: Product: OpenSK
[29355.851475] usb 3-1.2: Manufacturer: Nordic Semiconductor ASA
[29355.851476] usb 3-1.2: SerialNumber: v0.1
[29355.858547] hid-generic 0003:1915:521F.0004: hiddev0,hidraw1: USB HID v1.10 Device [Nordic Semiconductor ASA OpenSK] on usb-0000:03:00.0-1.2/input0

USBのVenderIDが1915、ProductIDが521fになっており、Productが"OpenSK"として表示されるようになりました。

緑色の電源LEDが点灯、動作LEDが白点滅となっています。

動作確認をする

Windowsで認識させる

Windowsに認識させてみると、"HID-compliant fido"と認識されるようになりました。これは、いけそうです。

f:id:kthrtty:20200607235646p:plain

Googleのセキュリティキーとして追加しようとすると"User Intent"の確認から先に進めない

挿入が検出されているようなので追加できるな、、、と思ったのですが、いわゆるユーザが認証行為を行うことを確認する"User intent"の確認において、ドングルについているボタン押下が効きません。

なんということでしょう・・・

f:id:kthrtty:20200607235732p:plain

ここから先に進みません。

Githubのセキュリティキーとして追加できるが認証時に"User Intent"の確認から先に進めない

Githubの設定画面ではIntentまでは確認されず、セキュリティキーを追加することができました。が、いざログインしようとすると同じように"User intent"の確認で先に進みません。

なんということでしょう・・・

TODO

とりあえずGithubにissueを上げて本日はおしまいです。

  • ボタンを押下しても"User intent"を押したことにならない問題を解決する。
  • (今回はUF2 bootloaderのおかげで不要だったが) OpenOCD + Buspirateの組み合わせでJTAG経由でBootloaderとFirmwareを焼いてみるテストをする。
  • JTAG経由でメモリマップIOを抜いてきて、生成された鍵を抽出したり差し替えたりしてみる。
  • Rustを勉強して修正する。(ハードル高そう)