助け合いフォーラム

LinuC

LinuC Lv1-102(Ver10.0)
問題ID : 15869
問題を開く
リモートホストからサーバにSSH接続できるように、サーバ上で以下のコマンドを使用して公開鍵認証用の鍵ペアを作成した。SSH接続するホスト(クライアント)に安全に持ち運ぶべきファイルはどれか。 $ ssh-keygen -t ecdsa

この問題はプレミアムコンテンツです。

上に戻る

秘密鍵をサーバーが作成し、クライアントに渡す。でも良い理由。

投稿日 2026/02/09

秘密鍵を(外部に)渡すことをよしとする理由を教えてください。

自分は、

鍵ペアはSSHクライアント上で作成しなければならない。
と回答しました。
自分は、秘密鍵は相手が誰であれ、触れさせてはいけないものだと認識しているため、サーバー側が知っているのはおかしい。と思いました。
そのため、こう回答しましたが、解説には、
鍵ペアの作成はSSHクライアントとSSHサーバのどちらで行っても構いません。SSH接続するユーザが鍵ペアを作成し、クライアントとサーバにそれぞれ必要な鍵を配置しておきます。
とあり、どちらも秘密鍵を知っていても問題がないかのように書かれています。
フォーラムでも、正しくない鍵は受け入れないので、セキュリティ上問題はない。と結論づけられていますが、
解説も、
秘密鍵はその名の通り外部に流出してはならないものなので、物理メディアなどを使用して安全にクライアント側に運ぶ必要があります。
と言っています。
"秘密鍵はその名の通り外部に流出してはならないもの" とある通り、外部に流出させてはいけないものだと、自分も認識しています。
この場合の自分の思う外部、とは自分以外の全てであって、サーバー側も外部の認識なのですが、秘密鍵を渡すという行為はセキュリティ上問題ではないのでしょうか。
秘密鍵とは、誰かに渡してもいいものだと言うのでしょうか。
通信相手ならいいのでしょうか。
そうではないと思っています。
納得がいかないので、解説をお願いします。

2026/02/09 16:26

過去にも同じような疑問がありましたが、こちらの回答でも納得できないでしょうか?
https://mondai.ping-t.com/g/posts/2122
https://mondai.ping-t.com/g/posts/1816
https://mondai.ping-t.com/g/posts/742
https://mondai.ping-t.com/g/posts/346


コメント

w work01_aifroide

2026/02/11 10:56

はい。過去のポストは見ましたが、秘密鍵を送信する、という部分について、やはり納得できません。 https://mondai.ping-t.com/g/posts/2122 の、 クライアントへ安全に持ち運ぶ=利用環境が特定でき、誤った宛先に渡されないことが保証できる 鍵ペアはサーバ上で作成しているので、意図しない鍵を「サーバが」受け入れることはあり得ない は、理解できます。 ですが、秘密鍵を渡す という行為について、それを容認できる理由にはなりません。 秘密鍵は自分が生成し、誰にも見せない、誰も内容を知らないから秘密鍵なのである。と自分は認識しています。 質問者さんの、 冷静に考えて認証(安全を実現)したいのはサーバー側なので というのも理解できますが、だからといって秘密鍵を渡す行為はおかしいと思います。 それであれば、ユーザーからの公開鍵を受け入れる経路を厳しくすればいい話。 実際、公開鍵を受け取る際に、アカウントの二段階認証などを実行しているサービスはありますよね?(githubなど。) https://mondai.ping-t.com/g/posts/1816 の、 ユーザを信用するのではなく、管理者が鍵を管理する前提だったらこう言う形もあり得るのかなって感じですかねぇ。 は、管理者が鍵を管理する前提でも、ユーザーの秘密鍵を管理者が知っている。というのは危ないと思うのですが... 管理者が侵害された場合、すべてのユーザーの秘密鍵漏洩もありえますよね。 ユーザーの秘密鍵をサーバーが作って、その秘密鍵をユーザーに渡す。という設問のシチュエーションは理解しています。 https://mondai.ping-t.com/g/posts/742 の先の、 https://ping-t.com/modules/forum/index.php?topic_id=4867 では、鍵を生成する主体が自分のPCなのか通信を行う先のサーバなのかで決まると言っていますが、鍵を生成する主体は自分では? 話がずれますが、TLS(HTTPS)の証明書を発行する際、認証局に送る、これが自分だと証明してくれ!という時の鍵は誰が発行しますか?自分ですよね?自分のサーバー側で秘密鍵を生成するはずです。 自分だ!という証明という点で、TLSもSSHも同じはずです。 なので、秘密鍵を生成する主体はサーバー側でなく、自身のはずです。 なぜサーバー側が生成する主体でいいのか、という説明がありません。 https://mondai.ping-t.com/g/posts/346 の、 設問では サーバ上で以下のコマンドを使用して公開鍵認証用の鍵ペアを作成した。 とあるので、「サーバに公開鍵と秘密鍵のペアがある状態」であり、「クライアント(サーバに接続する側)には対応する公開鍵も秘密鍵も "無い"」んですよね。そうすると、公開鍵認証したくてもクライアントの情報をサーバ側は知りませんし、クライアントはサーバに接続するための秘密鍵を持っていないので認証してもらえないんですよね。
なので「サーバで作ったペアのうち、秘密鍵をクライアントに持っていく」必要があるんですね。 この、 クライアント(サーバに接続する側)には対応する公開鍵も秘密鍵も "無い" 状態だから移動する。という設問の状況は理解できます。 自身を名乗る手段がないわけですから当然です。 ですが問題なのは、秘密鍵をサーバー側が生成し、外部に渡している点です。 自分の認識では、鍵認証の話での外部とは、自身以外のすべてです。 自分以外の、接続先だろうが接続してくるクライアントだろうが、自分以外は外部で、外部に漏らしてはいけないのが秘密鍵と認識しています。 以上のことから、秘密鍵を生成する主体がサーバー側(自身以外)でもいい理由が分かりません。 秘密鍵を渡す行為がよしとされる理由が分かりません。 長々と申し訳ありません。 どうにも納得できなくて......

b birdpixy

2026/02/13 16:46

work01_aifroideさんの疑問は、セキュリティ設計として正しい感覚だと思います。 確かにSSH公開鍵認証では、秘密鍵は認証主体(クライアント)のみが保持すべきものです。 今回の問題は「秘密鍵を誰かに渡す」ではなく「鍵を生成した場所(サーバ)から、本来の所有者へ移動した」という扱いになります。 もちろん秘密鍵はクライアント側で生成し外部へ移動させない方が安全ですが、SSH仕様上は鍵ペアの生成場所に制約はなく、サーバ側で生成することも技術的に可能です。 Linux系の試験問題では運用の理想ではなく、技術的に成立することが正解になる場合があります。 「鍵ペアはSSHクライアント上で作成しなければならない」はセキュリティ運用としては好ましいが、技術的には「鍵ペアはSSHサーバからSSHクライアントへ移動できる」ので不正解になるのだと思います。

w work01_aifroide

2026/02/16 10:15

実運用上どうかではなく、技術上どうか。 ですか...... 問題の意図としてはそういうことなのですね。 納得はできないのですが、問題の意図はこう。として割り切ることにします。 長々と付き合っていただき、ありがとうございました。

この返信に対して
コメントを記入できます

2026/02/16 22:22

はい。過去のポストは見ましたが、秘密鍵を送信する、という部分について、やはり納得できません。

「送信する」とはどこにも書いていませんよ。「安全に持ち運ぶ」です。例えば

  1. 本番サーバで自分のアカウントを発行してもらった
  2. 自分のアカウントでログイン
  3. 本番サーバ上で鍵ペアを生成
  4. リモートから入れるように「勝手に自分の PC 上で生成した公開鍵を登録」するのではなく、サーバ上で生成した公開鍵を authorized_keys に登録
  5. 生成した秘密鍵をリモートホストまで「安全に持ち運ぶ」
  6. 本番サーバ上の秘密鍵を削除する
  7. リモート接続用に使用できるよう持ち運んだ秘密鍵を設定する(持ち運び方はここでは指定されていないが、許可された方法と理解するので良いかなと)

という運用をイメージしてみたら

  • 本人が持ち運んでおり、外部に漏らしてはいない
  • 速やかにサーバ側の秘密鍵を削除しており、管理者は管理していない(まさかすべてのユーザーが生成した秘密鍵を含むすべてのファイルを管理者が保持している、みたいな話はさすがに考慮しなくて良いかと)
    ので、特に問題はないと思うのですが…


コメント

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?