質問: SSL(現:TLS)鍵の交換の仕方の解釈があっているのでしょうか?また、質問もお願いしますm(__)m 以下で説明します。 A社:会員システムWEBサーバを提供 client:A社のシステムを利用するクライアント CA:認証局 手順 1.A社はまず自社内で公開鍵と秘密鍵を作成 2.CAを選び申請し公開鍵だけを渡す。これでA社はサービスを公開できる状況 3.clientはA社のサーバとコネクション確率しログインページへ 4.A社は自分の公開鍵があるCAのIPアドレスをclientに配布 5.clientはA社が使用しているCAから公開鍵をもらう。(公開鍵は暗号通信後どうなっているか?) 6.client内で入力したログイン情報を公開鍵で暗号化してからA社サーバへ送る 7.A社は公開鍵で暗号化されたclientのログイン情報を受け取りA社だけが持っている秘密鍵で暗号を解く(複合っていうのかな?(笑)) 結果ログイン情報は悪意のある第三者から盗聴されることはあっても、秘密鍵がない限りわからない。 > > 質問 > -- > > > ・5の()で囲んでありますが、暗号化通信が終わった後の公開鍵は削除されるのでしょうか?また、ログイン情報などを送るために残しておくものなのでしょうか? ・今年1月1日にSHA-1(暗号方式と捉えています。)の廃止というものを聞いております。これは鍵を作成する際のことを言っているのでしょうか? ・なぜわざわざCAを経由しているのでしょうか?A社が公開鍵を送ればいいと思うのですが...(これについては下記で考察として書いています。) > > 考察(質問も含まれています) > -------------- > > > 恐らくですけど、本当にそのA社のサーバであるか確認するため。 例えば、A社のログインページの時に本当にそのページはA社のものなのかというのを確認するためですか? 悪意のある第三者がA社のシステムのログインのページのリンク先を変えても、これにより守られると考えていいのでしょうか? A社のクライアントのログイン情報を盗むため非常によく似た悪意のあるサイトを作っている第三者(Bさん)が A社が登録していないCAにSSLの申請したとします。 clientはそこにアクセスしてもCA側はBさんの正しいサーバですと返してるだけでわかりません。このようなことは実際に起きているのでしょうか? よろしくお願いしますm(__)m
回答: SSL/TLS 一般ではなく、https に限定したほうがわかりやすそうなのでそうしますが、他のプロトコルでも以下の議論は一緒です。 さて、正しい手順を書きます。 1.A社はまず自社内で公開鍵と秘密鍵を作成 2.CAを選び**CSR (公開鍵の入った証明書の申請用データ) を送り、認証してもらいます。認証してもらった証明書を WEB サーバに設定します。**これでA社はサービスを公開できる状況 3.clientはA社のサーバと**ネゴります。具体的には証明書をもらい、証明書が正しいかチェックします。ブラウザに埋め込まれているルート CA に認証された CA に認証された CA に認証された ... CA に認証された証明書であれば、正しい証明書と判断し、中の公開鍵を利用します。clientはA社の公開鍵で暗号化した新規の共通鍵を生成してA社に送ります。A社しか知らない秘密鍵で復号して共通鍵を取り出し、これにより以降はclientとA社しか知りえない共通鍵で暗号化して通信します**。コネクショログインページへ こんな感じでしょうか。 追記 ・暗号化通信が終わった後の公開鍵は削除されるのでしょうか?また、ログイン情報などを送るために残しておくものなのでしょうか? 公開鍵はキャッシュされることもあると思いますが、毎回入手すればいいものなので残す必要はありません。公開鍵暗号は計算コストが高いので、その後のセッションで使う共通鍵を交換するためだけに使います。 ・今年1月1日にSHA-1(暗号方式と捉えています。)の廃止というものを聞いております。これは鍵を作成する際のことを言っているのでしょうか? SHA-1 は暗号方式ではなくて、ハッシュアルゴリズム(ダイジェストアルゴリズム/一方向関数)の一つです。暗号は復号できる、つまり、元の平文に直せるアルゴリズムですが、ハッシュは別名「一方向関数」にもあるように、もとに戻すのが非常に困難であるアルゴリズムです。 PKI (公開鍵暗号に基づく通信基盤) において、ハッシュは公開鍵暗号と並ぶ重要な要素です。通信の秘匿ではなく、署名、すなわち、通信の内容を書いた人が、確実に秘密鍵を持っている人であることを確認するために使われます。 具体的には、送りたいメッセージのハッシュを計算し、それを秘密鍵で暗号化したもの、それを署名と呼びます。署名付きのメッセージを受け取った人は、メッセージのハッシュ値と署名を復号化した値を比べ、等しければ、確かに秘密鍵を持った人が書いたメッセージであると判断できます。 ・なぜわざわざCAを経由しているのでしょうか?A社が公開鍵を送ればいいと思うのですが... 通信中に CA を経由しているわけではありません。ブラウザが「これは信用できる CA だ」としてるルート証明書を持っており、A社がclientに渡す証明書には、それを認証した CA を認証した CA を認証した CA ... とたどっていって、ルート証明書にたどり着けばA社の証明書を正しいと判定できます。 ブラウザによっては組み込みの証明書が違います。モバイル端末を含む多くのブラウザに組み込まれれているルート証明書の CA は、「より信頼されている CA」というわけです。これが、CA によって値段がかなり違う意味でもあります。 よろしくお願いしますm(__)m