私はSSH鍵をすべて削除した

I deleted all my SSH keys

YubiKeyのed25519-sk鍵を使い続けてきた筆者が、ディスク上に保護されていない鍵素材を一切残さないため、YubiKey・TPM・Apple Secure Enclaveという3つのセキュアエンクレーブでSSH鍵を管理する方法を実践的に解説する。パスフレーズによる暗号化で十分な脅威モデルも多いと認めつつ、ハードウェアに紐づいた鍵の利点と、TPMでは秘密鍵素材が暗号化されてディスクに残るという重要な違いも示す。

ハードウェアに保存された鍵というのは、セキュアエンクレーブやYubiKeyのような専用ハードウェアを使って鍵素材を保存・保護する鍵のことだ。理論上の利点は、SSH鍵の生成に使ったハードウェアがなければその鍵を使えないという点にある。
  1. Bender

    私はSSH鍵を使い続けるつもりだ。ただし以下の点を除いて:

    - 公開認可鍵を/etc/ssh/keys/%uに不変(immutable)で置き、チェックサムの変更を監視する。

    - その公開鍵にCIDR制限をかける。

    from="x.x.x.x/n,x.x.x.x/n" ssh-ed25519 AAAA[snip] Text-Identifier

    - 公開SSHインスタンス(捨てノード)ではMSS、TCP SYN TTL、ウィンドウサイズ、許可CIDRブロックのNFTablesチェックを行い、より重要な役割ではVPNの背後に置く。netfilterを無効にしておく必要がある場合は、sshdをACL付きのL4 haproxyの背後に置く。

  2. LeBit

    YubiKey上のFIDO2でSSH鍵を管理するのが正しくモダンな方法だ。

    ただし同じ鍵を複数のYubiKeyで使うことはできない。

    だから複数のYubiKey(最低2つ。私は4つ持っている)を買って、接続したい場所すべてに複数の公開鍵を登録すべきだ。これはちょっとした意識改革だ。

    あと、Bitbucketはed2559-sk鍵をサポートしていない。でもBitbucketはいつも他のgit forgeより遅れているからね。

  3. mshroyer

    SSH認証に存在証明(proof-of-presence)付きのYubiKeyを使うのは素晴らしいが、私は好みの動作のためにYubiKeyのOpenPGPスロットをまだ使っている:

    1. YubiKeyを挿入して最初の使用時にPINを要求し、その後タッチを要求する

    2. 鍵が接続されている間の以降の認証ではタッチのみを要求する

    これを実現するのに必要な余分なGnuPGの設定は残念だが、私の知る限りYubiKey上のfido -sk鍵ではまだこれはできない。

  4. stryan

    やあ、私も非常に似たことをやっている最中だ。ただしOPほど極端にはやっていない。古いRSA SSH鍵を徐々に非推奨にし、YubiKey、パスワードマネージャー、代替SSH認証の組み合わせに置き換えている:

    1. YubiKey上の-sk鍵(タッチ有効)がメイン鍵で、署名に使い、触れるすべてのホストに常にインストールしている。当初はSSH鍵を保存するのにYubiのPIVスロットを使うつもりだったが、複数の可動部分を管理するのが嫌だった(すべてのクライアントでpscdを動かすなど)。PIVスロットを使う主な利点は「キャッシュ」タッチポリシーを設定できることだけだった:YKは最大15秒間タッチをキャッシュするので、「リベース中に複数のコミットに署名する」ようなことをしても、コミット数回ではなく1回のタッチで済む。副次的な利点として、プライマリとバックアップのYubi間で同じSSH鍵を再利用できる。FIDO設定のシンプルさが勝ち、YubiKeyを何度も押すのにイライラするのは、専用鍵のような代替設定をすべきサインだと考えることにした。最も顕著なのは、Ansible設定を専用のデプロイ鍵をシークレットとして保持するように適切に設定し、個人鍵を再利用しないようにしたことだ。

    2. 1PassとBitwarden(仕事/個人)を使って、基本的なGit認証やその他の低リスクタスクにのみ使うセカンダリSSH鍵を保存している。このSSH鍵はパスワードマネージャーからstdin経由で直接ssh-agentに読み込まれるので、決して […]

  5. Magicrafter13

    `ssh-keygen -t ed25519-sk -O resident -O no-touch-required -O application="ssh:nameyourkey" -f ~/.ssh/id_ed25519-sk`

    と

    `ssh-keygen -t ed25519-sk -f ~/.ssh/id_ed25519-sk`

    の実用的/セキュリティ上の違いは何ですか?

    後者がいつもやっていることです。YubiKeyがなければ使えないファイルができますが、実際にはキー上に常駐していないのでしょうか?

  6. microtonal

    とても良い記事!

    YubiKeyは高いと二度言及されているが、SSHには安価なFIDO2キーで事足りる:

    https://www.yubico.com/product/security-key-series/security-...

  7. moebrowne

    サーバー側で`no-touch-required`を前置する必要がなければ常駐鍵を使うのだが、GitHubやBitBucketのようなサービスはそれをサポートしていない。

    なぜサーバーがこれを強制するのか理解できない…

  8. aorth

    素晴らしい記事!昨年ssh-tpm-agentを見つけて、自分のThinkPadすべてにハードウェアTPMがあることに驚いた。2018年のモデルにもだ!すべてにこれを使うように切り替え、デバイス上に秘密鍵はもうない。

    YubiKeyも持っているが、SSH鍵に試してから数年経つ。通常のセキュリティキーとして使っている。ツールが改善されたようなので、SSH鍵にも試してみるべきかもしれない。

この日のほかの記事

2026-11-10