0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32でYubiKeyもどきを作ってみた

0
Posted at

はじめに

最近、情報漏洩や不正アクセスのニュースを目にする機会が増えて、まわりでもセキュリティを意識する人が増えてきました。パスキーや物理セキュリティキーを買い求める人も増えている印象です。

セキュリティキーは市販品を買うのが普通ですが、実は「自分でも作れる」という選択肢があります。今回はそれを試すために、手元の ESP32-S3 ドングルに FIDO2 ファームウェア「Pico Fido」を焼いて、USB セキュリティキー(自分では「YubiKeyもどき」と呼んでいます。YubiKey は Yubico の製品名で、この自作品とは別物です)を自作しました。書き込みから動作確認まで、画面遷移を追うだけで流れが分かるようにスクリーンショット中心でまとめます。

最初に位置づけをはっきりさせておきます。

  • この自作キーは FIDO 認定品ではありません。中身は汎用マイコン(ESP32)なので、物理的な解析への耐性は専用のセキュアエレメントを持つ市販キーに及びません
  • なので用途は 学習用+予備キー が前提です。大事なアカウントは、認定品の市販キーやスマホのパスキーと組み合わせて使う想定です

実施日:2026年11月4日
作業環境:Windows PC、Brave(Chromium 系ブラウザ。Web フラッシャーが Web Serial を使うため、対応ブラウザが必要です)

用意したもの

  • SpotPear ESP32-S3 Pocket Dongle(0.96インチ画面付き、USB メモリ型のドングル)……2本所持していて、今回はそのうち1本をキー化しました
  • Windows PC(PIN 設定と動作確認に使用)
  • USB ポート(ドングルを直接挿します)

ノートPCに挿したESP32-S3ドングル(2本)
ノートPCに挿したドングル。USBメモリのような形状で、そのままセキュリティキーとして持ち歩けます。

購入したドングル本体(AliExpressの商品画像)
購入したドングル本体(AliExpress、Pocket-Dongle-S3-0.96。2026年11月時点で約1,300円)

ファームウェアは Pico Fido(バージョン 8.0)を使いました。CTAP 2.1 / CTAP 1、WebAuthn、U2F に対応するオープンソースの FIDO2 ファームウェアで、ESP32-S2 / S3 に対応しています。書き込みは公式の Web フラッシャーから行うので、開発環境の構築は不要です。

ファームウェア書き込み手順

1. Web フラッシャーを開いて接続する

ブラウザで https://picokeys.com/esp32-flasher/ を開き、ドングルを BOOT ボタンを押しながら RESET して DFU モードで接続します。ファームウェアの選択肢から Pico Fido を選び、「Connect」で接続すると「Install Pico Fido」のポップアップが出ます。

WebフラッシャーでPico Fidoを選択し、インストール開始
フラッシャーのトップ画面。ファームウェアは「Pico Fido」を選択。

2. Erase(消去)を確認する

初回の書き込みなので、インストール前の消去を確認するダイアログでは 「Erase device」にチェックを入れて「Next」に進みました。

Erase deviceにチェックを入れた確認画面
インストール前にデバイスを消去するかの確認。今回は新規製作なのでチェックを入れて進みます。

3. インストールを実行する

「Confirm Installation」で Install を押すと書き込みが始まります。書き込み中はドングルを抜かないでください。

Confirm Installation(Pico Fido 8.0のインストール確認)
「Pico Fido 8.0 をインストールしますか?」の最終確認。

4. 完了を確認する

「Installation complete!」と表示されれば書き込み完了です。このあとドングルを挿し直すと、PC 側でセキュリティキーとして認識されるようになります(今回は Brave が「Pico Key を検出しました」という通知を出しました)。

Installation complete! の表示
書き込み完了。この時点でドングルが FIDO2 オーセンティケータになっています。

PIN 設定

書き込み直後のキーは PIN 未設定です。Windows の設定アプリから PIN を設定しました。

設定 > アカウント > サインイン オプション を開き、「セキュリティ キー」の項目を展開すると「管理」ボタンがあります。

Windowsのサインインオプション(セキュリティキーの管理)
サインイン オプションの「セキュリティ キー」欄。ここから「管理」を開きます。

「管理」を開くと、セキュリティキー暗証番号(PIN)の「追加」と、「セキュリティ キーをリセットする」が並んでいます。今回は PIN の「追加」 を選びます(下の「リセット」はキーを出荷状態に戻して登録済みパスキーを全て消す操作なので、ここでは触りません)。

セキュリティキー管理画面(PINの追加)
Windows Hello セットアップの管理画面。上段の「追加」から PIN を作成します。

「追加」を押すと新しい PIN の入力欄が出るので、決めた PIN を2回入力して確定します。

新しいPINの入力画面
新しいセキュリティキー暗証番号(PIN)の設定画面。PIN 自体はキー本体に保存されます。

これでキー本体の準備は完了です。PIN は忘れるとキーを使えなくなる(最終的にはリセット=全消去しかなくなる)ので、パスワードマネージャー等に控えておく前提です。

webauthn.io で動作確認

キーが本当にパスキーとして動くか、WebAuthn のデモサイト https://webauthn.io で登録と認証の両方を確認しました。

登録(Register)

ユーザー名(今回は satofox)を入力して「Register」を押すと、Windows セキュリティの「パスキーを保存する」ダイアログが出ます。ここで大事なのが保存先です。既定では「この Windows デバイス」が選ばれているので、ダイアログの「変更」から保存先の選択を開き、「セキュリティ キー」 を選んでください(自作キーに保存したい場合はここを必ず切り替えます)。

パスキーを保存する場所の選択(セキュリティキーを選ぶ)
保存先の選択肢。一番下の「セキュリティ キー」が自作キーの保存先です。

セキュリティキーを選ぶと「セキュリティ キーを USB ポートに挿入します」と表示されるので、ドングルを挿します(挿したままでも構いません)。

セキュリティキーの挿入を求める画面
「これは セキュリティ キー に保存されます」と表示されれば、正しい保存先が選べています。

続いて PIN の入力を求められるので、さきほど設定した PIN を入力します。

セキュリティキーのPIN入力画面
PIN 入力後、本体のボタン操作で登録を確定します(このドングルでは BOOT ボタンがユーザー確認のタッチ相当になります)。

登録が完了すると、webauthn.io の画面に 「Success! Now try to authenticate...」 と表示されます。

登録成功(Success!)の表示
登録成功。自作キーに webauthn.io のパスキーが保存されました。

認証(Authenticate)

登録だけでは片手落ちなので、そのまま「Authenticate」も試しました。保存先としてセキュリティキーが選ばれ、PIN の入力を求められます。

サインイン時のPIN入力画面
認証時も登録時と同じキーと PIN で進みます。

PIN とボタンの確認が通ると、「You're logged in!」 の画面になりました。登録→認証の一巡が自作キーで動作することを確認できました。

ログイン成功(You're logged in!)の画面
認証成功の画面。これで自作キーが通常の FIDO2 キーとして使えることが確認できました。

実サービスで使うときの考え方

動作確認が取れたので、実サービス(GitHub や Google など)で使うときの運用方針を整理しておきます。

「2本目・予備キー」として登録する

パスキーは、複数登録しておくのが前提の運用 です。キーを1本しか登録していないと、そのキーをなくしたり壊したりしたときに復旧が大変になります。サービス側が複数のパスキー登録に対応しているなら、自作キーは市販の認定キーやスマホのパスキーと並べて「予備」として登録するのが安全です。

今回は同じドングルを2本持っているので、もう1本も同じ手順でキー化して、同じサービスに2本とも登録しておくことができます。1本を常用の予備、もう1本を保管用に回す、といった分け方もできます。

ファームウェア更新時の Erase に注意

Pico Fido のファームウェアを更新するとき、書き込み前に Erase すると 登録済みの資格情報はすべて消え、復元できません。更新する場合は、Erase の要否をよく確認してから進めてください(今回の初回書き込みでは消して問題ありませんでしたが、運用開始後は話が別です)。

市販キーとの違いは割り切る

繰り返しになりますが、ESP32 はセキュアエレメントではないため、キーを物理的に解析されるような攻撃への耐性は市販の認定キーに劣ります。「自分で作れる」ことと「本番の主キーにできる」ことは別です。学習して仕組みを理解する、自分で管理できる予備キーを1本持つ、という範囲がこの自作キーの適正な立ち位置だと思っています。

なお、発展形として、ドングルの画面(LCD)への状態表示や Secure Boot まで有効化した構成を扱っている日本語の実践リポジトリもあります(参考資料の diy-fido-key)。今回は素の公式ファームの書き込みまでで止めています。

まとめ

  • ESP32-S3 ドングルに Pico Fido 8.0 を Web フラッシャーで焼くだけで、FIDO2 セキュリティキーが1本作れました
  • PIN は Windows の設定(サインイン オプション>セキュリティキー>管理)から設定できます
  • webauthn.io で登録(Success!)と認証(You're logged in!)の両方を確認しました
  • 登録時は保存先が既定で Windows デバイスになっているので、「セキュリティ キー」への切り替えがポイントです
  • 位置づけは学習用+予備キー。パスキーは複数登録を前提に運用し、ファーム更新時の Erase で資格情報が消える点には要注意です

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?