rascal-pendular, bear-den, and no entry

前へ | 目次 | 索引 | 次へ

Chapter 8: SSH 認証に公開鍵を使う

8.1 公開鍵認証 - 導入

公開鍵認証はログインサーバがあなたを確認するための方法で、パスワードの入力とは別の方法です。より安全で、柔軟で、しかし設定もより難しいです。

従来のパスワード認証では正しいパスワードを入力してあなたが正しい人物であると証明します。パスワードを知っていると証明する方法は、サーバにパスワードを教えることです。つまりサーバがクラックされるかスプーフィングされると (Section 2.3 参照)、攻撃者はパスワードを入手できます。

公開鍵認証はこの問題を解決します。あなたは公開鍵 (誰でも知れる) と秘密鍵 (秘密にして誰にも教えない) からなる一対の鍵を生成します。秘密鍵は署名を生成できます。秘密鍵で作った署名は秘密鍵を持っていない人には偽造できませんが、公開鍵を持っている人は誰でもそれが正しいか確認できます。

コンピュータで対の鍵を生成し、公開鍵をサーバにコピーします。そしてサーバがあなたの身元の証明を求めてきたら、PuTTY が秘密鍵で署名を生成します。サーバは (公開鍵を持っているので) 署名を検証でき、ログインを許可します。もしサーバがクラックされたりスプーフされたりしても、攻撃者は署名を得るだけで秘密鍵もパスワードもわかりません。署名は再利用できないので、何も盗まれません。

訳注: サーバがパスワードを求めてきても入力しない前提です。サーバがクラックされた場合、PuTTY からのメッセージのふりをしてパスフレーズを盗もうとする攻撃も考えられます。端末内のメッセージが PuTTY からかサーバからかを判別する方法は section A.5.3section A.5.4 を参照してください。サーバが認証プロンプトの偽装を行おうとしていると疑われる場合に予防的に切断する設定については section 4.23.3 を参照してください。

誰かにログインしてもらうために秘密鍵を渡すのは間違った方法です。相手から公開鍵を受け取ってサーバのアカウントに設定してください。相手にはサーバのホスト鍵の公開鍵 (の指紋) を全種類教えて、最初のログイン時にどれかが接続先サーバと一致することを確認してもらいます。 (以降は PuTTY 等 SSH クライアントが鍵をキャッシュするので確認の必要がありません。 Section 2.3を参照してください。)

問題が一つあります。秘密鍵を保護せずにコンピュータに保管すると、そのコンピュータにアクセスできる人は誰でもあなたの署名を生成できます。そしてあなたのサーバのあなたのアカウントにログインできてしまいます。そのため、普通は秘密鍵をローカルマシンに保存するときに好きなパスフレーズで暗号化します。署名を生成するために PuTTY は鍵を復号しないといけないので、パスフレーズを入力する必要があります。

このせいで公開鍵認証はパスワード認証より不便になりえます。サーバにログインするたびに短いパスワードではなく長いパスフレーズを入力しないといけません。一つの解決法は認証エージェントの利用です。エージェントは復号した秘密鍵を保持して要求があると署名を生成します。 PuTTY の認証エージェントは Pageant というものです。 Windows セッションを始めたら、 Pageant を起動して秘密鍵を読み込みます (パスフレーズを一回入力します)。後は PuTTY を何回でも起動でき、Pageant が何もしないでも自動的に署名を生成します。 Windows セッションを閉じると復号した秘密鍵をディスクに保存することなく Pageant が終了します。多くの人がセキュリティと利便性の妥協として丁度いいと考えています。詳細は Chapter 9 を参照してください。

訳注: 秘密鍵に短い、あるいは単純な「パスフレーズ」を設定することは可能です。しかし秘密鍵を盗まれた場合の防御として考えた場合、そのようなパスフレーズは総当たりや辞書攻撃で即座に解読できるため非常に危険です。

公開鍵のアルゴリズムは複数あります。一番一般的なのは RSA と ECDSA ですが、他にも有名なものに DSA (または DSS, USA's federal Digital Signature Standard) があります。 PuTTY が対応している鍵の種類は section 8.2.2 にあります。

8.2 PuTTY キージェネレータ “PuTTYgen” を使う

PuTTYgen は鍵生成器です。 PuTTY, PSCP, PSFTP, Plink, Pageant (PuTTY 認証エージェント, chapter 9 参照) で使える公開鍵と秘密鍵の組を生成します。 PuTTYgen は RSA、DSA、ECDSA、EdDSA 鍵を生成します。

PuTTYgen を起動するとウインドウが表示され、2 つの主要な処理ができます。 “生成 / Generate”で新しい鍵の組を作るか、“読み込み / Load”で既存の秘密鍵を読み込むかです。

8.2.1 鍵の生成

これは新しい鍵の生成についての一般的な概要です。後の節で詳細に解説します。

鍵を使う準備が整いました。公開鍵をサーバにコピーします。 “OpenSSH の authorized_keys ファイルにペーストするための公開鍵 / Public key for pasting into OpenSSH authorized_keys file” (section 8.2.12 参照) か“公開鍵を保存 / Save public key” (section 8.2.11) から鍵をサーバにコピーします。しかしすぐに行う必要はありません。後で秘密鍵を PuTTYgen に読み込めば (section 8.2.14 参照) 公開鍵がコピーできるようになります。

Section 8.3 で公開鍵認証のための典型的な PuTTY や SSH サーバの設定手順を解説します。

8.2.2 鍵の種類を選ぶ

鍵の組を PuTTYgen で生成する前にどの種類の鍵にするかを選択します。

現在のバージョンの SSH プロトコルである SSH-2 では様々な種類の鍵に対応しています。但し一部のサーバは一部の種類に対応していないかもしれません。 PuTTY が生成できるのは:

PuTTYgen は 古い SSH-1 プロトコルのための唯一の鍵である RSA 鍵も生成できます。その場合、“SSH-1 (RSA)”オプションを選択します。 SSH-1 プロトコルはすでに安全ではないとされているため、このオプションが必要になることはまずありません。

8.2.3 鍵の長さ (強度) を選択する

“生成する鍵のビット数 / Number of bits”ボックスで PuTTYgen が生成する鍵の強度を指定できます。

8.2.4 素数生成の方法を選択する

(これは完全に恣意的な項目です。あなたがよく知っているのでない限り、デフォルト設定のままにしておくのが全く賢明です。)

“鍵 / Key”メニューから、鍵を生成する際の素数生成の方法を任意で選択できます。 RSA 鍵と DSA 鍵でのみ使われます。 (他の鍵の種類は素数生成を全く必要としません。)

素数生成の方法は互換性に影響しません。いずれの方法で生成された鍵でも、すべての SSH サーバで機能します。

選択できる方法は:

“確率的素数”の方法は安全でないように聞こえるかもしれませんが、素数生成の方法としては最も一般的に使われるものです。この方法は、理論上は偶然に素数でない数を生成する可能性がありますが、ソフトウェアが十分な確認をするため、可能性は無視できるほどに小さくなります (2 の 80 乗分の 1 未満、換算すると 10 の 24 乗分の 1 未満)。そのため一般には、誰も大して気にしません。

他の方法では素数性の証拠がある数字を生成するので、確実に素数である数を PuTTYgen が使います。これにはより多くの労力が必要ですが、確率的な方法にある理論上のリスクを取り除けます。

PuTTYgen の“証明済みの素数”の方法は、ある面では厳密には“確率的素数”の方法より良いと言えない場合があります。 PuTTYgen を使って RSA 鍵を生成するときに、タイミングまたはキャッシュを元にしたサイドチャネル攻撃の影響を受ける可能性のあるコンピュータ、例えば共有コンピュータの場合です。 “確率的素数”法はそのような攻撃に抵抗できるように設計されていますが、“証明済みの素数”法はそうではありません。 (これは RSA 鍵のみでの懸念です。他の種類の鍵は素数は秘密ではないか関係しません。)

もしあなたのところのセキュリティ基準が要求しているか、あるいは普通の方法の安全性を担保するのが確率論では信頼できないならば、確率的素数から証明済み素数へと切り替えられます。

RSA 鍵については、“鍵 / Key”メニューに “強い”素数 / “strong” primes を 素因数に使うオプションがあります。 “強い”素数は、特定の構造を持つ素数で、ある種の因数分解アルゴリズムの適用を難しくします。そのためある種のセキュリティ基準は利用を推奨しています。しかし、今日の因数分解アルゴリズムのほとんどは影響を受けません。そのためこのオプションは、あなたのところのセキュリティ基準が推奨しない限りは有効にする意味はありません

8.2.5 “生成 / Generate”ボタン

鍵の種類と強度を決めたら、“生成 / Generate”ボタンを押せば PuTTYgen が鍵の生成を始めます。

最初にプログレスバーが現れるので、マウスを動かして PuTTYgen にランダムな値を生成させます。マウスで PuTTYgen ウインドウの空白部分をぐるぐると動かすと、PuTTYgen がランダム性を収集しプログレスバーがゆっくりと進みます。特に動かすパターンをランダムに意識する必要はありません (意識しても問題ありません)。 Windows がマウスの動きを検出するたびに厳密にどれだけマウスを動かしたかという情報から PuTTYgen は十分な無作為性を抽出します。

訳注: マウスの移動を検知するたびに 2 ビット収集します。バージョン 0.71 より収集する最大量が疑似乱数生成器のシード長に制限されるようになり手間が減ったものの、RSA 鍵の場合多少時間がかかります。生成が PC 任せで構わない場合は ssh-keygen コマンド (OpenSSL for WindowsGit for WindowsMSYS2 でインストール可能 な OpenSSL、もしくは Windows 10 のバージョン 1803 以降に同梱) を使ってから PuTTYgen で PPK 形式に変換できます (この実装やリンク先の安全性やビルド、乱数生成器の利用の完全性を保証するものではありません)。サーバ側でも生成できますが、生成後に秘密鍵を削除してもサーバ内に秘密鍵の痕跡が残ることに注意してください。信頼できないサーバの場合、コマンドが改造されているかもしれません。

プログレスバーが最後まで到達すると、PuTTYgen が鍵を生成し始めます。プログレスバーがリセットされ鍵の生成の進捗によって進みます。鍵の生成はランダムな処理のため進み方は一定ではなく、処理時間を予測できません。

鍵の生成が完了すると、新たにコントロール群が表示されます。

8.2.6 “鍵の指紋 / Key fingerprint”ボックス

“鍵の指紋 / Key fingerprint”ボックスに生成した鍵の指紋 (フィンガープリント) が表示されます。これは公開鍵から暗号学的に導出された値なので秘密にする必要はありません。公開鍵そのものよりも人間に扱いやすい表記として用意されたものです。

指紋の値は暗号学的に安全であるようにされているため、同じ指紋を持つ鍵を誰かが作成するのは計算不可能とされています。そのため Pageant や Unix の ssh-add などのツールの鍵一覧 (section 9.2.1 参照) では公開鍵全体ではなく鍵の指紋を表示するようになっています。

デフォルトでは、PuTTYgen は SSH-2 鍵の指紋を “SHA256” 形式で表示します。もし古い “MD5” 形式の指紋 (aa:bb:cc:... のような) が必要ならば、“鍵 / Key”メニューから“指紋を MD5 で表示 / Show fingerprint as MD5”を選びます。しかし暗号学的な安全性は低くなり、攻撃者が全く同じ指紋の鍵を作ることも実現可能と考えられます。

8.2.7 鍵のコメントを設定する

目的の違いによって複数の鍵を持っている場合、それらを区別するために指紋を覚えておく必要はありません。 PuTTYgen は鍵にコメントを記録して、PuTTY や Pageant がパスフレーズをたずねる際に表示できます。

何も指定しない場合、デフォルトのコメントは鍵の種類と日付が含まれた rsa-key-20011212 のようになります。

訳注: コメントの変更を促すため意図的に不恰好なものになっています。

一般的に使われるコメントとしてはあなたの名前と使うサーバの名前を組み合わせた simon@simons-pc のようなものです。

鍵のコメントを変更するには秘密鍵を保存する前に文字列を “鍵のコメント / Key comment”に入力します。後でコメントを変えたくなったら、秘密鍵を PuTTYgen に読み込んで、コメントを変更してからもう一度保存します。

訳注: PuTTY の秘密鍵形式 (.PPK の PuTTY-User-Key-File-2 または 3) の中身はテキストですが、ファイルのハッシュ値 (HMAC) の計算にコメントの文字列も使用します。コメントをテキストエディタなどで直接変更すると鍵が壊れているとみなされ使用できなくなります。

8.2.8 鍵のパスフレーズ / passphraseを設定する

“鍵のパスフレーズ / Key passphrase”と“パスフレーズの確認 / Confirm passphrase”ボックスにあなたの鍵のパスフレーズを入力します。パスフレーズはディスク上の鍵を暗号化するのに使うので、鍵を使うにはパスフレーズの入力が必要になります。

鍵を保存するときに PuTTYgen は“鍵のパスフレーズ”と“パスフレーズの確認” が完全に一致するかどうか確認するので、違っていたら保存できません。

パスフレーズを空欄にすると鍵を暗号化せずに保存します。何か正しい理由がない限りそうするべきではありません。暗号化しないと、その鍵を受け付けるマシンの攻撃に必要なのはディスク上の鍵だけになります。毎回ログインするたびにパスワードを入力したくないならば、Pageant (chapter 9) で復号化した鍵をメモリのみに保存するようにしてください。

特別な状況では鍵をパスフレーズ無しで使う必要が本当にあります。例えば、自動化したバッチスクリプトで SSH 接続を確立する場合はあなたはその場にいないのでパスフレーズを入力できません。そのような場面ではバッチスクリプト (など) ごとに特別な鍵を生成し、サーバ側でその目的でしか使えないように制限することを薦めます。制限の方法は SSH サーバのドキュメントで解説されているはずです (おそらくサーバ毎に違うでしょう)。

良いパスフレーズを決めるのは難しいものです。ただ辞書に載っている単語は、攻撃者が辞書や歌詞や警句や知られた文言すべてを駆使して簡単に攻撃してくるので単語として使うべきではありません。 DiceWare (www.diceware.com, 日本語訳は www.hyuki.com/diceware/) では 5 個以上のランダムな単語を 5 個のサイコロで決める方法を薦めていますが、2 の 64 乗通りのパスフレーズができるのでおそらく悪い方法ではありません。文法的に意味の通ったパスフレーズにする場合は可能性が狭まるのでより長いものを使うべきです。

パスフレーズを忘れないでください。パスフレーズを取り戻す方法はありません。

訳注: 現在 PuTTY 形式の秘密鍵のパスフレーズに日本語は設定できません。コピーしておいた文字列を PuTTYgen や Pageant に貼り付けることはできますが、内部的に Unicode を使用していないため言語設定の違いや将来的な変更でパスフレーズ不一致となる可能性があります。環境依存なく使用できる文字は半角英数字空白と ASCII 文字セットの記号 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ です。“\” は ASCII/Unicode でバックスラッシュ (5c) にあたる文字です。

8.2.9 証明書を鍵に追加する

一部の環境では、ユーザの認証鍵を“認証局” (CA, 証明機関) によって署名するようにして、SSH サーバのユーザアカウントでは正しい署名で証明された鍵を自動的に信頼するように設定できます。

この構成はサーバが多数存在する場合に便利になりえます。鍵ペアを変更した時、それぞれのサーバ上にある authorized_keys ファイルをいちいち編集して、新しい鍵を受け付けるようにしなくてはなりません。しかしこれらのサーバに、認証局によってあなたのものであると署名された鍵を受け付けるように一度設定してしまえば、公開鍵を変更したとしても以前と同じ認証局で認証させるだけで、サーバすべてが再設定の必要なく自動的にその鍵を受け付けます。

認証局に署名してもらうために、認証局に新しい公開鍵を送ることになります (秘密鍵ではありません)。そして証明書が含まれた公開鍵を受け取ります。

訳注: 送る先の認証局とは、通常はサーバの責任者のことです。

手間を省くために証明書を PPK ファイルに統合したい場合は、PuTTYgenの“鍵 / Key”メニューから“鍵に証明書を追加 / Add certificate to key”を選びます。そうすると秘密鍵と証明書を含む一つのファイルになり、そのファイルが証明書を受け取るサーバで認証するのに必要なすべてとなります。

証明書を削除して証明書なしの PPK ファイルに戻すには“鍵から証明書を削除 / Remove certificate from key”を選びます。

(しかし、PPK ファイルに証明書を組み込まなくてはならないわけではありません。別々でも PuTTY の“秘密鍵と共に使う証明書 / Certificate to use with the private key”オプションを使えば同じように使えます。 Section 4.24.2 を参照してください。どちらが便利かは人それぞれです。

訳注: コマンドラインオプションについては section 3.11.3.19 を参照してください。

PuTTYgen に読み込まれている鍵が証明書を含む場合、“ペーストするための公開鍵 / Public key for pasting”ボックス (section 8.2.12 参照) は証明書についての情報ダイアログを表示するボタンに置き換わります。鍵をどのユーザのものとして認定しているのか、期限がいつまでか(あるいは無期限か)、署名を行った認証局の指紋などです。

8.2.10 秘密鍵をディスク上のファイルに保存する

鍵を生成してコメントとパスフレーズを設定したら、秘密鍵をディスクに保存する準備ができました。

“秘密鍵を保存 / Save private key”ボタンを押します。 PuTTYgen がダイアログボックスでファイルを保存する場所を尋ねます。ディレクトリを選択しファイル名を入力したら、“保存”を押します。

ファイルは PuTTY 専用の形式 (*.PPK) です。 PuTTY で認証に使うときに必要なもので (section 4.24.1 参照)、 Pageant で読み込むものです (section 9.2.2 参照)。

(PPK 形式で保存するときのパラメータを変更することもできます。 Section 8.2.13 を参照してください。しかし多くの目的で、デフォルトの状態は十分なはずです。)

8.2.11 公開鍵をディスク上のファイルに保存する

RFC 4716 ではディスク上に保存する SSH-2 公開鍵の標準形式を定義しています。いくつかの SSH サーバ (ssh.com のものなど) は認証で受け付ける秘密鍵に対応する公開鍵をこの形式にする必要があります。 (他の、例えば OpenSSH では別の形式を使います。 section 8.2.12 を参照してください。)

公開鍵を SSH-2 標準形式で保存するには、PuTTYgen の“公開鍵を保存 / Save public key”を押します。 PuTTYgen は保存する場所を尋ねるダイアログを表示します。ディレクトリを選択しファイル名を入力したら、“保存”を押します。

その次は公開鍵を SSH サーバマシンにコピーします。公開鍵認証を設定する一般的な手順は section 8.3 を参照してください。

SSH-1 鍵でこのオプションを使うと PuTTYgen は“ペーストするための公開鍵 / Public key for pasting”と同じ内容のファイルを作ります。これが SSH-1 公開鍵で唯一存在する標準です。

8.2.12 OpenSSH の“authorized_keys ファイルにペーストするための公開鍵 / Public key for pasting into OpenSSH authorized_keys file”

OpenSSH サーバは他と違い、公開鍵を 1 行の形式で事前に与えないと対応する秘密鍵を認証で受け付けません。 (過去の SSH-1 サーバもすべてこの形式です。)

“OpenSSH の authorized_keys ファイルにペーストするための公開鍵”で正しい 1 行形式の公開鍵データが得られます。通常テキスト全体をマウスで選択し Ctrl-C でクリップボードにコピーしたら、サーバに接続してある PuTTY セッションで貼り付けます。

[Custom] テキストエリアにフォーカスが無い状態でドラッグせずにシングルクリックすると自動的に全体を選択します。

公開鍵認証を設定する一般的な手順は section 8.3 を参照してください。

8.2.13 鍵の保存に関するパラメータ / Parameters for saving key files

“Key”メニューの“鍵の保存に関するパラメータ... / Parameters for saving key files...”を選択すると、ディスクに保存する PPK 形式の秘密鍵のパラメータを調整できます。これらのオプションは SSH サーバとの互換性には影響しません。

多くの場合では、デフォルト設定のままで十分なはずです。

8.2.13.1 PPK ファイルのバージョン / PPK file version

デフォルトのバージョンは 3 で、ほとんどの場合十分です。

秘密鍵を古い PuTTY (0.74 かそれ以前) で読み込む必要がある場合や、バージョン 3 に対応していないツールを使う場合は、バージョン 2 にする必要があります。 (バージョン 3 は 2021 年に登場しました。)

バージョン 2 の形式は総当たり攻撃に対する耐性がバージョン 3 よりも低く、また以下のオプションをサポートしていません。

訳注: 鍵導出アルゴリズムの技術的な詳細は section C.4 を参照してください。

8.2.13.2 パスフレーズのハッシュ化に影響するオプション

以下のオプションはパスフレーズ付きで保存された鍵のみに影響します。これらで鍵を復号するのにどれだけの処理が必要かを制御します (この処理はパスフレーズを入力する度に発生します)。これによって鍵を正規に使うコストと、暗号化された鍵のパスフレーズを推測する攻撃のコストのトレードオフが可能になります。

これらのオプションは PPK バージョン 3 にのみ影響します。

訳注: 以下に“鍵を復号する”という表現がありますが、実際に秘密鍵をファイルに保存する際の暗号化や復号には共通鍵暗号の一つ AES が使用されます。 AES で暗号化するために必要な強い共通鍵をパスフレーズから作成するのがここで説明する鍵導出関数です。保存した秘密鍵を復号する際には、PuTTY ツールは鍵導出関数を使って入力されたパスフレーズと鍵の保存時にランダムに作成されるデータ (salt, ソルト) から AES-256 の共通鍵や初期化ベクトルを算出します。鍵導出関数の計算量が多いほど鍵の復号 (の準備) に時間がかかりますが、攻撃にかかるコストも増加します。

鍵導出関数 / Key derivation function
使用する Argon2 鍵導出関数の種類を選択します。もしサイドチャネル攻撃への露出が通常と異なると考える場合は変更します。

訳注: Argon2i はサイドチャネル攻撃への耐性があり、Argon2d は GPU を使った総当たり攻撃に耐性があるとされています。 Argon2id は 最初のパス (繰り返し処理) の前半を Argon2i、それ以降を Argon2d として両方の攻撃に対応します。

鍵導出関数のメモリ量 / Memory to use for passphrase hash
鍵を復号するのに必要なメモリをキロバイト (KiB) で指定します。

訳注: 実効値は後述のスレッド数の 4 倍で割り切れる数になります。デフォルト設定 8192 KiB はかなり少なめの値です。

鍵導出関数の計算量 / Time to use for passphrase hash
鍵を復号するのにどれだけの時間が必要かを制御します。おおよその処理時間 (保存時のコンピュータを基準に) をミリ秒で選択するか、明示的に何パス (繰り返す処理回数) 行うかを指定します。
鍵導出関数のスレッド数 / Parallelism for passphrase hash
鍵を復号するのに並列処理するスレッドの数を指定します。デフォルトは 1 で、マルチコアのコンピュータでもシングルスレッド処理になります。

訳注: もちろん、攻撃者は総当たり攻撃を並列実行できます。

訳注: Argon2 の仕様書 (RFC 9106) では、Argon2id の、パス数は 1 から 3 の範囲とし、まずはメモリ量を大きくして負荷を調整するように推奨しているようです。設定例は section 8.2.16--ppk-param の項目を参照してください。

8.2.14 秘密鍵を読み込む

PuTTYgen は既存の秘密鍵もメモリに読み込めます。そうするともう一度保存する前にパスフレーズやコメントを変更できます。また公開鍵をもう一度取得できます。

訳注: PPK 形式の公開鍵の部分はパスフレーズを設定しても暗号化されないため、秘密鍵ファイルをテキストエディタで開けば確認できます。但し鍵ファイルを一切変更しないように注意してください。

既存の鍵を読み込むには“読み込み / Load”ボタンを押します。 PuTTYgen がダイアログを表示するのでファイルシステム上の鍵ファイルを選択します。ファイルを選択すると PuTTYgen は (必要ならば) パスフレーズを尋ねます。そして鍵の詳細を、まるで鍵を今生成したように表示します。

読み込みコマンドで他の鍵形式を読み込めますが、PuTTY 専用の形式でないという警告が表示されます。他の鍵形式の読み込みについては section 8.2.15 を参照してください。

8.2.15 他の形式の秘密鍵を扱う

SSH-2 秘密鍵は標準的な形式がありません。 OpenSSH と ssh.com は異なる形式で、PuTTY もまた違います。そのためあるクライアントで生成した鍵は別のクライアントではすぐには使えません。

“変換 / Conversions”メニューの“インポート / Import”コマンドで PuTTYgen は OpenSSH 形式と ssh.com 形式の SSH-2 秘密鍵を読み込めます。これらの鍵を読み込んだら、PuTTY 形式の鍵 (*.PPK) として保存できるので、PuTTY ツールで使用できます。パスフレーズはこの手順では (故意に変更しない限り) 変更されません。コメントは変更したほうがいいかもしれません。OpenSSH の SSH-2 鍵形式はコメント領域がありませんし、ssh.com のデフォルトコメントは長くて冗長です。

PuTTYgen は秘密鍵を OpenSSH 形式や ssh.com 形式で書き出すこともできます。そうするには“変換”メニューから“エクスポート / Export”オプションのどれかを選択します。鍵の書き出しは丁度保存のときと同じように動作します (section 8.2.10 参照)。事前にパスフレーズを入力しておかないと警告が表示されます。

OpenSSH 形式には 2 つのオプションがあります。最近の OpenSSH は秘密鍵の保存に 2 つの形式を使っています。古い形式 (“PEM 形式”) と、新しい “ネイティブ” 形式です。新しい形式はパスワードの推測により強く、コメントの記録に対応しています。 “OpenSSH 形式へエクスポート / Export OpenSSH key”は古いバージョンの OpenSSH と互換性を保つために、その鍵に対応した最も古いバージョンを自動的に選択します。 Ed25519 のような新しい種類の鍵は新しい形式しか使えないため、それを選びます。 RSA や DSA でも新しい形式を使いたいという特別な理由がある場合、 – 例えば、ファイルが OpenSSH 6.5 以降 (2014 年リリース) でしか使われなく、更なるセキュリティが欲しい場合 – “OpenSSH 形式へエクスポート (最新形式を強制) / Export OpenSSH key (force new file format)”を選択できます。

ほとんどの古い SSH-1 プロトコル向けクライアントは秘密鍵をディスクに保存するのに標準的な形式を使います。 PuTTY もこの形式を使うので、SSH-1 の秘密鍵を OpenSSH や ssh.com のクライアントで生成したのなら、PuTTY でも使えますし、逆も可能です。そのため、SSH-1 鍵を生成した場合はエクスポートはできません。

8.2.16 PuTTYgen のコマンドライン設定

PuTTYgen はいくつかのコマンドラインオプションに対応していて、 GUI で選択できる設定を指定できます。これによって設定を選択した状態でプログラムを開始できるため、多くの鍵を生成する場合に役立ちます。 (例えば、Windows ショートカットのオプションとして指定できますし、バッチファイルや PowerShell スクリプトで組織の標準設定を指定して配布できます。)

コマンドラインで対応しているオプションは:

-t 鍵の種類
生成する鍵の種類。選べるのは rsadsaecdsaeddsaed25519ed448rsa1です。 Section 8.2.2 を参照してください。
-b ビット数
鍵の長さをビット数で表したもの。 Section 8.2.3 を参照してください。
--primes 方式
素数を生成する方式。選べるのは probableprovenproven-evenです。 Section 8.2.4 を参照してください。
--strong-rsa
RSA 鍵を生成するとき、鍵のモジュラスの素因数が“強い素数”になるようにします。 Section 8.2.4 を参照してください。
--ppk-param 名前=,...
PPK ファイル形式 (section 8.2.13) の詳細設定を行います。

変更する内容は一連の 名前= をコンマで連結したものです。指定できる名前は:

version
PPK 形式のバージョン: 3 または 2
kdf
使用する Argon2 の種類: argon2idargon2iargon2d
memory
鍵の復号に必要なメモリ (KiB)。
time
復号に必要な時間 (ミリ秒)。
passes
time の代替: 鍵の復号にハッシュ関数を何回適用するか。
parallelism
鍵の復号に並列実行するスレッド数。

訳注: 以下に --ppk-param オプションの設定例を示します:

# RFC 9106
--ppk-param kdf=argon2id,parallelism=4,passes=1,memory=2097152  # 2GiB
--ppk-param kdf=argon2id,parallelism=4,passes=3,memory=65536    # 64MiB

# OWASP Password Storage Cheat Sheet 2023-01-25 <https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html>
--ppk-param kdf=argon2id,parallelism=1,passes=1,memory=47104  # 46MiB
--ppk-param kdf=argon2id,parallelism=1,passes=2,memory=19456  # 19MiB
--ppk-param kdf=argon2id,parallelism=1,passes=3,memory=12288  # 12MiB

-E 指紋の種類
鍵の指紋を表示する際に使うアルゴリズム。 sha256md5 を選択できます。 section 8.2.6 を参照してください。

8.3 公開鍵認証の準備をする

PuTTY を使い SSH プロトコルで SSH サーバに接続します。接続が確立するとログインするユーザ名とパスワードを尋ねられます。ログインしたら認証で受け付ける公開鍵を設定します。

ホームディレクトリ、.ssh ディレクトリ、関係ファイル (authorized_keys, authorized_keys2 or authorization など) がグループやその他から書き込みできないことを確認します。そうしておかないと、サーバは鍵を無視します。通常このようなコマンドを使います:

chmod go-w $HOME $HOME/.ssh $HOME/.ssh/authorized_keys

これでサーバがあなたの秘密鍵を受け付けるようになったはずです。次は PuTTY が認証で秘密鍵を使おうとするように設定します。以下の 3 通りの方法があります。


このマニュアルや PuTTY のツールに意見がある場合は、 Feedback page を参照してください。

翻訳についてはフィードバックから送信できます。

©1997-2025 Simon Tatham ©2015-2025 SATO Kentaro

[PuTTY custom build 0.83.ranvis-doc]