SSHについての疑問-暗号化とデータの送受信方法について

このQ&Aのポイント
  • SSHはSecure Shellの略で、データの暗号化とセキュアな通信を実現するプロトコルです。
  • SSHでは、公開鍵暗号方式を使用してデータを暗号化します。
  • データの送受信には、公開鍵と秘密鍵の組み合わせを使用し、相手の公開鍵でデータを暗号化して送信し、相手の秘密鍵で復号化します。
回答を見る
  • ベストアンサー

SSHって・・?

Linux勉強中で疑問に思っている点があります。 SSHを利用すると、暗号化を行うことができるということですが・・・・教えて下さい。たとえば・・・ 例:Aはサーバーで秘密鍵を保持、Bはクライアントで   公開鍵を保持。 B(クライアント/公開鍵)→A(サーバー/秘密鍵) 公開鍵を使ってサーバーAにデータを送信後、 サーバー側では、秘密鍵を使ってデータを解読。 A(サーバー/秘密鍵)→B(クライアント/公開鍵) この場合は、データはどう暗号化されているのでしょうか?秘密鍵でデータを暗号をすると、公開鍵を持ってる人達には解読できてしまうのですよね? "ls"コマンドで叩いた機密情報が仮にA→Bに結果が返ってくる場合は、暗号化されないのでしょうか? SSHを使ってFTPをする場合も同様のことはいえないのでしょうか?? Webで情報を集めて、公開鍵と秘密鍵の事に関しては 調べてみたつもりなのですが・・・ 申し訳ありませんが、ご教授下さい。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.1

公開鍵暗号が使われるのはセッション確立時の共通鍵送付時だけです。 1.サーバAはクライアントBに対してRSA認証を行います。 2.クライアントBが実際のデータ通信に使うセッション鍵 (共通鍵) を生成します。 3.サーバAの公開鍵で暗号化してサーバAに送付します。 4.サーバAはクライアントBから送られてきたセッション鍵をサーバAの秘密鍵で復号化します。 5.以後の通信はセッション鍵 (共通鍵) を使ってやりとりが行われます。 RSA認証の詳細などは参考URLを見てください。かなり丁寧に解説されています。 ただ、参考URLには記述がありませんが、SSHではサーバ認証も行われていたと思います (初めてサーバに接続したときに警告画面が表示されるのはこのためです)。

参考URL:
http://rat.cis.k.hosei.ac.jp/article/rat/linuxliteracy/ssh.html
xyz12345
質問者

お礼

ありがとうございます。 大変よくわかりました。

関連するQ&A

  • 公開鍵暗号について

    失礼します。 公開鍵暗号についてです。 Linux系OSカテゴリで質問することではないかもしれませんが、 sshサーバーの設定の際に疑問になったことなのでここで質問させてください。 公開鍵暗号方式について無勉強だったので調べていると、 Wikipediaより、 1.通信を受ける者(受信者)は自分の公開鍵(暗号化のための鍵)P を全世界に公開する。 2.受信者に対して暗号通信をしたい者(送信者)は、公開鍵 P を使ってメッセージを暗号化してから送信する。 3.受信者は、公開鍵 P と対になる秘密鍵(復号のための鍵)S を密かに持っている。この S を使って受信内容を復号し、送信者からのメッセージを読む。 4.暗号通信を不正に傍受しようとする者(傍受者)が、送信者が送信した暗号化されたメッセージを傍受したとする。傍受者は、公開鍵 P は知っているが、秘密鍵 S は受信者だけが知っている情報であるので分からない。P から S を割り出すことは(計算時間的に)極めて難しい。そのため、暗号文を復号することはおよそできない。 とありました。 sshを使ってサーバーにアクセスする場合、秘密鍵はクライアント側が持つことになりますが、 そのとき、サーバーからクライアントへのデータは秘密鍵があるので解読できるのは理解できます。 しかし、その反対はサーバー側に秘密鍵がないので無理なのでは? 不勉強でここで悩んでいます。 どなたかご教授いただけないでしょうか? また、ssh用に作成した秘密鍵は「厳重に保管しておく」とよく書かれていますが、 具体的にどうするのかはっきりしません。 パスワード保護でもすればよいのでしょうか? これについても宜しくお願い致します。

  • 暗号のアルゴリズムについて

    公開鍵暗号方式・共通鍵暗号方式があるのはわかっているのですが、 共通鍵暗号方式では、送信者・受信者共に同じ鍵を使うため、同じアルゴリズムで暗号化・復号を行うのであろうと予想はつくのです。 (DESや3DESがあると思うのですが、多分共通鍵にDESを使うとかかいてある?) ・質問 公開鍵暗号の場合、 AがBにデータを送る際、Bの公開鍵でデータを暗号化すると思うのですが この時、Bの公開鍵(証明書?)に、RSAで変換 といったことが書かれているのでしょうか? 公開鍵暗号には、楕円曲線暗号、ElGamal暗号があると思うのですが、 もし、Bの公開鍵に、暗号方式が書いていないと、Bの秘密鍵がRSAだった場合復元できなくなってしまうと思うのですが・・・。 初歩的な質問ですみませんが、 どなたかご教授いただけないでしょうか?

  • SSH に ついて

    最近、FTPサーバーの起動のさせ方は判ったのですが 色々検索して、質問をすると 個人でのデータのやり取りだと、 SSHでSCPが良いとの意見がありましたので、今勉強しています・・・ CENTOS6 のサーバー機用のPCに SSHをインストールしましたが 設定のところで詰まってる感じ?です 手持ちのLINUXの本を参考にし、 また、このサイトを参考にしました・・・ http://www.multiburst.net/sometime-php/2010/11/sshd/ ここの 『 SSH2による鍵の生成 』 まではやりましたが 先の方がどうもよく判りません・・・ 『 公開鍵の移動 』 ですがどうしたらいいのでしょうか? A機はマイPC で B機はサーバー機 A機で作ったデータを暗号化でB機に移動したいのですが B機で作った公開鍵と秘密鍵を、何かにコピーしたりして A機に公開鍵をうつせばいいのでしょうか? A → B と言う事は、両方必要なのはB機で A機は公開鍵だけ持っていればいいのでしょうか? また、データの持ち運びはメモリスティックだと簡単なのでしょうか? (未だに使った事ありませんので、便利なら購入を検討しています)

  • SSH通信で秘密鍵の読み込みが失敗

    ●質問の主旨 クライアントコンピューターとサーバー間で SSH通信を行いたいと考えています。 公開鍵暗号方式でSSHサーバーに対して、 クライアントコンピュータからリモート接続を行おうとして クライアントのTeraTermを使って秘密鍵でアクセスしようとしたところ、 「SSH2秘密鍵の読み込みに失敗しました」という添付画像のような メッセージが出ます。 このメッセージ出されることなく、クライアント~サーバー間で SSH通信を行うためには、どこをチェックすればよいでしょうか? ご存知の方がいらっしゃいましたら、ご教示願います。 ●質問の補足 現在の状況は以下の通りです。 1.クライアントのTeraTermで秘密鍵(id_rsa)と公開鍵(id_rsa.pub)を作成 2.秘密鍵(id_rsa)はクライアントのCドライブのRSAという任意の名前のフォルダに保存 3. 公開鍵(id_rsa.pub)はSFTPでサーバーの一般ユーザのホームディレクトリに転送 4. 一般ユーザのホームディレクトリ配下に/.ssh/authorized_keysディレクトリを追加 (cat id_rsa.pub > /home/user/.ssh/authorized_keys) 5.chmodコマンドで.ssh及び.ssh/authorized_keysのアクセス権を変更 6.cat authorized_keysで中身を見ると、 公開鍵(id_rsa.pub)の文字の羅列が並んでいる ●環境 上記で言う、クライアントコンピュータはWindows8を使用しています SSHサーバーは、CentOS6.0をディストリビューションとするLinuxを使用しています

  • ssh の仕組み

    ssh の仕組みについて、よくわからない事があるので、よろしくお願いします。 (サーバの設定) ・/etc/ssh/sshd_config ファイルの編集をして、ルート権限ログインできないようにする。 ・デーモンを起動する。 (クライアントの設定) 1#ssh-keygen -t rsa 2#mv id_rsa.pub authorized_keys2 3#ssh hoge@192.168.x.x 4#rsa を入力 5#known_hostに関してのプロンプトに、yesで答える 6#パスワードを入力 上記の手順を踏んだとき、 まず、 (質問1:) 4のrsaを入力というのは、 相手側に自分の公開鍵を渡すと言う事でいいのでしょうか?? (質問2) これで、ログインした場合、サーバはその公開鍵を使って、暗号化→クライアントはそれを自分の秘密鍵(id_rsa)により、復号化。という解釈でいいのでしょうか? (質問3) 質問2の場合、クライアントから、サーバに送信するメッセージは暗号化されていないのでしょうか? (質問4) /etc/ssh/sshd_configの設定で、RSAAuthorized no にしてしまったら、 暗号化されないで、平分で、データが流れてしまうのでしょうか? (質問5) 結局のところ、SSHというものは、ユーザのパスワードを知っていたら、簡単に侵入ができるようなものなのでしょうか? (質問6) 上記の手順自体が全く間違っているのでしょうか? (質問7) ~/.ssh/known_hosts の中に入っているデータはいったいなんなんでしょうか??(相手の公開鍵??) /* 長くなりましたが、答えれる部分でいいので、よろしければお答えいただけないでしょうか。どうか、よろしくお願いします。

  • 公開鍵方式の安全性が全く分からない

    公開鍵方式が暗号化方式として優れていたと30年も言われてきた理屈が分からないので教えてください。 下記のNTT PC COMMUNICATIONSのサイトを見ていると以下のように説明されていました。 <引用元URL> http://www.nttpc.co.jp/yougo/%E5%85%AC%E9%96%8B%E9%8D%B5.html ~~~~~~~~~<説明抜粋>~~~~~~~~~~~~~~~ 秘密鍵暗号化方式は、鍵を盗まれると解読されてしまうとか、 連絡を取り合う相手の数だけ鍵を持たないといけないといった管理上の問題がある。 そこで、公開鍵と秘密鍵を組み合わせた公開鍵暗号化方式という方法が考え出された。       <中略> 秘密鍵は、あなただけが持っていて誰にも渡さない。それに対して、あなたの公開鍵は、たくさんの人に配布しておく。 あるいは、誰でも簡単に入手できるようにしておく。 秘密鍵は、あなただけが持っていて誰にも渡さない。それに対して、あなたの公開鍵は、たくさんの人に配布しておく。 あるいは、誰でも簡単に入手できるようにしておく。 そして、あなたが秘密鍵で暗号化したデータは、あなたの公開鍵でのみ復元できる。 あなたの公開鍵で暗号化されたデータは、あなたの秘密鍵でのみ復元できる。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 他にもいろいろ記事を読んだのですがだいたい似たような説明になっています。 しかしこの説明から考えると下記のリスクが発生するから全く安全な方法とは思えず、 何を以て30年近くも安全な暗号方式として使われ続けてきたのかが さっぱり分かりません。 ~~~~~~~上URLの記事から私が思う公開鍵方式のリスク~~~~~~~ 例えばAさんからBさんにデータを送ったとする。 データはAさんの秘密鍵で暗号化されている。 しかしそのデータ通信が発生したことにCさん(Aさん、Bさんの敵)が気付いた。 Bさんの公開鍵は誰でも簡単に入手できるのだから当然Cさんも入手している。 そのためBさんに送られたデータはCさんにも解読されてしまう。 何らかの方法でAさんに送られたデータをCさんも入手してしまえば 公開鍵でCさんも解読することが可能になってしまう。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ すみませんが上記の私が思うリスクが発生しにくい理由を教えてください。

  • SSHのホスト認証について

    現在VineLinux3.2を使ってサーバの勉強をしている、ド素人です。 SSHのユーザ認証が、 (1)サーバ側で乱数生成→クライアントの公開鍵で暗号化→ (2)クライアントに送信→ (3)クライアントが受信→ (4)秘密鍵で複合化→サーバに送信→ (5)サーバはクライアントから送られた乱数を確認して認証 という流れで、なるほど、これでユーザを認証できるってのは分かるのですが、 ホスト認証がよくわかりません、 SSHでサーバにアクセスすると、 サーバの公開鍵が ~/.ssh/knows_hosts に登録されますが、 この公開鍵を使って、ユーザ認証と同じ方法で接続先ホストを認証してるのでしょうか? そうだとしたら、 2度目のアクセスからはホストを認証するのに、 この~/.ssh/known_hostsの 公開鍵を使った方法が有効だというのは分かりますが、 一番最初のアクセスではこの公開鍵を使ってもホストの認証は出来ないと思うのですが(接続先から送られてくる公開鍵を使うだけなので) どういう仕組みになってるのでしょうか? よろしくおねがいします。

  • 公開鍵簿とは?

    暗号について勉強しています。本などの参考文献を読んでいると、公開鍵暗号では利用者Aが秘密鍵と公開鍵を生成し、公開鍵を公開簿などに登録して、Aと連絡を取りたいBが公開された鍵を利用して、文章を暗号化するとされているのですが、公開鍵簿となる物(同等の物)は実際にあるのでしょうか?

  • ssh鍵認証

    Aサーバーでsshで秘密鍵と公開鍵をを作成し、公開鍵のみをBサーバーへ置きました。 AサーバーからBサーバーへノンパスでログインはできたのですが、 BサーバーからAサーバーへのノンパスでのログインはできません。 (パスワードが聞かれてしまう) BサーバーからAサーバーへノンパスログイン(鍵認証)するにはどのようにすればよろしいでしょうか? ご存知の方、宜しくお願いします。

  • WinSCPで秘密鍵を使用する場合

    サーバとクライアント間でSSH通信を行いたいと思っております。 サーバはOpenSSH for Windowsがインストされており、 クライアントはWin2000のWinSCPがインストしております。 質問です。 1.このクライアントはセキュリティが厳しい環境にある 端末(インストールもできない)なのでPuTTyKeyGenerator が入っておらず他の端末で作った秘密鍵を使用しようとして おりますが問題ないでしょうか? 2.1.で可能であるのなら、その鍵の生成方法として、WinSCPで動作させるためType of KeyをSSH1でよろしいのでしょうか? 3.その秘密鍵に対する公開鍵はPuTTyKeyGenerator上でpubファイル を生成させるのか、それともテキストファイルに表示されている公開鍵文字列をコピーするだけでよいのでしょうか? 4.その公開鍵をOpenSSH上のサーバのあるディレクトリの./sshに格納するだけで鍵交換は行われるのでしょうか? よろしくお願いいたします。