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種と考えておけばよいでしょう。
どこで購入するの
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"と認識されるようになりました。これは、いけそうです。
Googleのセキュリティキーとして追加しようとすると"User Intent"の確認から先に進めない
挿入が検出されているようなので追加できるな、、、と思ったのですが、いわゆるユーザが認証行為を行うことを確認する"User intent"の確認において、ドングルについているボタン押下が効きません。
なんということでしょう・・・
ここから先に進みません。
Githubのセキュリティキーとして追加できるが認証時に"User Intent"の確認から先に進めない
Githubの設定画面ではIntentまでは確認されず、セキュリティキーを追加することができました。が、いざログインしようとすると同じように"User intent"の確認で先に進みません。
なんということでしょう・・・
TODO
とりあえずGithubにissueを上げて本日はおしまいです。