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/

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください