YubikeyのSlotにあるEd25519な鍵でSSHしたい

ここ1ヶ月ぐらいミアレにいたんですが、ちょいちょい他のことをやれるようになってきたので。
FIDO2でed25519-sk使うパターンではない方です。そっちはいっぱい上がってると思うので他見た方が早いです
Firmware 5.7でSlotに突っ込める鍵が増えたらしいので物は試しにと。
https://docs.yubico.com/hardware/yubikey/yk-tech-manual/5.7-firmware-specifics.html#additional-key-types-supported
増えたのはRSA3072/4096とEd25519。
最初のうちに言っておくと5.2とかでも使えるECCP384が相変わらず無難なよーな気がします。(というか5.7未満だとRSA限定みたいなシチュでもなければこれでいいと思います)
RSA4096対応環境でトレードオフをどうするかな?ってところだと思います。
うちだとYubikeyは秘密鍵が入ってる便利なヤツみたいな扱いしかしてないので、ちゃんと使い込んでるなら調べるなり何らかの検証を行うことをおすすめいたします。
前提条件
PKCS#11の対応
3.0じゃないとだめとかなんとか
https://github.com/Yubico/yubihsm-shell/issues/75
OpenSSHの対応
10.1p1かららしいです。
https://www.openssh.org/releasenotes.html
* ssh(1), ssh-agent(1): support ed25519 keys hosted on PKCS#11
tokens.
各種バージョン
クライアントのホスト側 (Windows11 24H2)
OpenSC 0.26.1.0
OpenSSH 10.0p1
usbipd-win 5.3.0
Yubico Authenticator 7.3.1
Yubico PIV Tool(x64) 2.7.2
YubikeyManagerCLI 5.8.0.0
クライアントのWSL2側(Kali Linux)
OpenSC 0.26.1-3
OpenSSH 10.2p1
OpenSSL 3.5.0
ykcs11 2.7.2-1
YubikeyManagerCLI 5.8.0.0
SSH接続先のサーバー(openSUSE Tumbleweed)
OpenSSH 10.2p1
OpenSSL 3.5.0
OpenSSH for Windowsだとどうなのよ
WindowsにポートされているOpenSSHの(PreviewとかBetaを含んだ)最新版は10.0p2です(2025年12月6日時点)
https://github.com/powershell/win32-openssh/releases
https://github.com/PowerShell/openssh-portable
実際にだめで
Permission denied (publickey,keyboard-interactive) ed25519
opensc-pkcs11.dllではなくてWSL2上で成功したYKCS11を使うノリでlibykcs11.dllも試しました。
が、やっぱ現状はだめそうです。更新待ちですね。
PS C:\Users\user\Desktop> ssh geeko
skipping unsupported key type
failed to fetch key
unknown certificate key type
failed to fetch key
unknown certificate key type
failed to fetch key
tana3n@$(IPADDR): Permission denied (publickey,keyboard-interactive).
なので少なくともクライアント側はこれ以外の方法で動かす必要がありそうです。
というかここまで最近のバージョンを要求されるとDebian系でもStableではクライアントになれなさそうな気がします(直近であり得るとしてもUbuntu 26.04(仮)あたりまで待つ必要がありそうです。
諦めてWSL2経由で叩く
ってことでローリングなKali入りのWSL2環境を出してきました。この環境なら適当にapt update && apt upgradeしとけば10.2がはいります。
Yubikey(というよりUSB機器)のWSLへの接続はusbipdで
https://learn.microsoft.com/ja-jp/windows/wsl/connect-usb
以下メモ
PS C:\Users\user> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
3-1 17aa:104d Realtek USB Audio Front Not shared
3-3 054c:0686 UAB-80, USB 入力デバイス Not shared
3-6 17aa:1046 Realtek USB Audio Rear Not shared
7-1 1050:0407 USB 入力デバイス, Microsoft Usbccid Smartcard Reader (WUDF) Not shared
7-2 056a:03e6 Wacom Tablet, Wacom Cintiq 16, USB 入力デバイス Not shared
7-3 056a:03e9 Wacom Cintiq 16 Billboard Not shared
8-2 1019:0011 FOSTEX USB AUDIO HP-A4 Not shared
8-3 2efd:1912 USB 入力デバイス Not shared
8-4 056d:403e USB 入力デバイス Not shared
10-2 046d:c548 Logitech USB Input Device, USB 入力デバイス Not shared
Persisted:
GUID DEVICE
PS C:\Users\user> usbipd bind --busid 7-1
PS C:\Users\user> usbipd detach --busid 7-1
PS C:\Users\user> usbipd attach --wsl --busid 7-1
サーバー側は割と大丈夫そうな気もしますが一応(Tumbleweedだったので普通に入る)
> ssh -V
OpenSSH_10.2p1, OpenSSL 3.5.3 16 Sep 2025
SSH鍵をどうにかする
Yubikeyを直に叩ける場合
ssh-genkey -D opensc-pkcs11.dllだかopensc-pkcs11.soとかやるんですが、これはどうもうまく行かなかったんですが、yubico-piv-toolのIssueに答えが書いてありました。
https://github.com/Yubico/yubico-piv-tool/issues/507
ssh-keygen -D /usr/lib/x86_64-linux-gnu/libykcs11.so
ssh-ed25519 (略)
いずれにせよlibykcs11.soは要るのは確定なので諦めて使うしかなさそうです。
pcscdの権限周りとか
何も考えずにpkcs11-toolやykmanとかで叩こうとしたら権限周りでroot権がないとだめそうな感じだったので、横着せずrootで実施しています。
WARNING: PC/SC not available. Smart card (CCID) protocols will not function.
systemctlのstatusとか実際のコマンドかは忘れましたがこんなのが出ていたような気がします。
PEMな公開鍵しかない場合
秘密鍵からだとssh-genkeyで出来るらしいんですが、公開鍵からだと現状出来ないので
メーリングリストでのやりとりを参考にしました。
https://lists.mindrot.org/pipermail/openssh-unix-dev/2025-October/042184.html
いざ
PKCS11Provider /usr/lib/x86_64-linux-gnu/libykcs11.so
とかそれ相応の物を設定しておけばSSH
┌──(root㉿P620-PC)-[~]
└─# ssh geeko
Enter PIN for 'YubiKey PIV #$(Serial)':
suse | ~ 1 err | tana3n@yuzuki-geeko | 14.4G ram | 18:46:31 | $(GlobalIP) ip
おまけ
Windows環境なんですけれど、ed25519のOIDが指定されている場合ed25519の表記ではなくOIDまんま出てくるのでいろいろ問題が出てくる予感

知らなかったけどこの辺もまあまあ面白い読みものになってくれそうです
https://docs.yubico.com/yesdk/users-manual/application-piv/private-keys.html
あとYubikeyManagerのGUIはEoLになるらしいので、Yubico Authenticatorへの移行はおはやめに~
https://www.yubico.com/support/terms-conditions/yubico-end-of-life-policy/eol-products/
