~ 修正追記以下 ~
※2020/03/22 7:30改定
弊ブログに @angel_p_57 さんよりコメントをいただきましたので、そちらを引用させていただき修正しています。
修正部分は修正追記コメントを入れております。
ブログの方に @angel_p_57 さんよりコメントいただいておりますので、そちらも参照ください。
~ 修正追記以上 ~
ディジタル署名の問題でよくこんがらがります。
デジタルではなくディジタルなんですね。まずはそこで引っかかります。
まずは基本なのですがディジタル署名とでディジタル証明書(SSL証明書)の区別をつけましょう!
恥ずかしながら混同していた時期があり、理解の遅れにつながっていました。
では諸々攻略していきます!
#■ディジタル署名
過去問を見てみてわかったのですが、問題の方で用語が統一されていないんですよね
##応用情報技術者平成22年春期 午前問40
ディジタル署名を生成するときに,発信者がメッセージのハッシュ値をディジタル署名に変換するのに使う鍵はどれか。
ア 受信者の公開鍵
イ 受信者の秘密鍵
ウ 発信者の公開鍵
エ 発信者の秘密鍵
##応用情報技術者平成24年春期 午前問40
ディジタル署名における署名鍵の使い方と,ディジタル署名を行う目的のうち,適切なものはどれか。
ア 受信者が署名鍵を使って,暗号文を元のメッセージに戻すことができるようにする。
イ 送信者が固定文字列を付加したメッセージを,署名鍵を使って暗号化することによって,受信者がメッセージの改ざん部位を特定できるようにする。
ウ 送信者が署名鍵を使って署名を作成し,それをメッセージに付加することによって,受信者が送信者を確認できるようにする。
エ 送信者が署名鍵を使ってメッセージを暗号化することによって,メッセージの内容を関係者以外に分からないようにする。
方や「受信者」の方は同じなのですが「発信者」、だったり「送信者」だったり。
~ 以下ディジタル署名修正追記あり ~
※元記事(誤り部分)
●ディジタル署名の付与・検証手順
・「発信者(送信者)」
メッセージからメッセージダイジェストを作成して、それを秘密鍵で暗号化しでディジタル署名にして、メッセージと一緒に送信。
・「受信者」
もらったメッセージからメッセージダイジェストを作成して、ディジタル署名を公開鍵で複合して、もらったメッセージダイジェストと自分の作成したメッセージダイジェストを比較。
これで同じなら
「文書の作成者が署名を行った本人」、「メッセージが改ざんされていない」が確認できます。
※以下修正追記
●ディジタル署名の付与・検証手順
前提:
署名の作り方、検証の仕方を説明するのはムリです。説明できているように見えるのは、解説書の空想です。
なぜなら、署名にも複数方式があり、内部の処理は様々違うからです。
それは情処出題側も分かってるので、試験でそこまで出すとは思えません。
誤り:
「秘密鍵で暗号化して」「公開鍵で復号して」という処理。そんな事実はありません。
備考1:
問題文で「ハッシュ値をディジタル署名に変換する」と、わざわざぼかしたような書き方になっているところが注目のポイントです。
主題側も、これを暗号化・復号と書くと誤りであることを分かっているということでしょう。
※試験を運営しているIPAは暗号技術の調査も行っているので、流石に知っていると思われる。
備考2:
用語の違いに注目するなら、「秘密鍵・公開鍵」ではなく「署名鍵・検証鍵」という表現が重要です。
もちろんどちらを使っても正解なのですが、大事なのは、
「公開鍵暗号の暗号化で使う鍵(秘密鍵・公開鍵)を逆に使うと署名になる」ではなく、
「署名で使う署名鍵・検証鍵もそれぞれ(特定の人だけが使うかどうかという観点で)秘密鍵・公開鍵と呼ぶ」という点です。
公開鍵暗号の暗号化機能と、署名(ディジタル署名)は基本的に別技術だと考えてないと誤解の元です。
※ただし、一部方式では暗号化機能・署名に両用できるものがある … それが誤解の元凶
~ 以上ディジタル署名修正追記 ~
#■ディジタル証明書(SSL証明書)
SSLと書かれていたり、SSL/TLSと書かれていたりしますが、実際はTLSなんです。
詳しくは以下の記事がわかりやすかったです。
https://zenlogic.jp/aossl/basic/ssl-tls/
大まかにいうとSSLは脆弱性があってTLSに置き換わったんだけど、名称的に浸透しているのでSSL/TLSと書いているわけです。
~ 以下ディジタル証明書修正追記あり ~
※元記事(誤り部分)
ディジタル証明書ですが「クライアント①」と「サーバー②」だけの関係だけで覚えると応用問題でつまずくように思います。
「認証局(CA)③」の役割も含めて覚えてしまいましょう。
以下やり取りを記載しますが①~③の数字は上記を参照ください
①から②に接続要求
②は③のディジタル署名がつけられたディジタル証明書を①に送付
①は③の公開鍵を使いディジタル証明書の正当性を確認
~~ ディジタル証明書から②の公開鍵を取得~~
~~ 共通鍵生成用のデータを作成~~
~~ 共通鍵生成用のデータを②の公開鍵で暗号化して②に送信~~
②は②の秘密鍵でデータを複号し、共通鍵生成データを共有
①と②で共有したデータから暗号化通信のための共通鍵を作成
以後共通鍵を使って暗号化通信を行う
通常暗号化したデータを送付するときに使うのは「秘密鍵」を使用することが多いのですが、クライアントからサーバへ送る共通鍵生成用のデータを暗号化するのは「サーバの共通鍵」です。
バカの一つ覚えで「秘密鍵」で作成、だと考えると間違えますよ。
※修正追記以下
誤り:
「以下やり取りを記載しますが①~③の数字は上記を参照ください」にある手順。
数年前から非推奨になって、最新の規格では廃止されている方式です。
昔の話だとしても、あくまで一方式であって、もともと別のやり方があります。
注意点:
「証明書の使い方の一例として」とことわった上でならまだありえる説明なのですが、
ただこの路線で説明すると、証明書の役割が不十分になります。
以下のtweetでGoogleのサイトの証明書を挙げてますが、「サーバ認証」という役割、これが説明しきれないからです。
https://twitter.com/angel_p_57/status/1224682280163008512
備考:
応用情報レベルでは、SSL/TLSでのやり取りのことまで細かく言及できないと思います。
しかし、SSHの公開鍵認証を題材にした出題例があるので、
「サーバが署名を作って、クライアントが検証する。それが成功すれば、本物のサーバと判断できる」
くらいのことはネタにしてくるかもしれません。( これが証明書の公開鍵の基本的な使い方 )
~ ディジタル証明書修正追記以上 ~
ちなみにディジタル証明書が失効しているかどうかをオンラインでリアルタイムに確認するためのプロトコルは『OCSP(Online Certificate Status Protocol)』ですので覚えておきましょう。
#■最後に
あとの項目は次回攻略していきます!
応用情報試験ですが、新型コロナの影響でどうするか検討中です。
皆さんはどうされますか?
~ 修正追記以下 ~
#■修正にあたり
今回のディジタル署名、ディジタル証明書は複数の参考書やwebの仮説をもとに作成しました。
理解不足のまま作成してしまったため間違った記事を上げてしまっています。
指摘いただいて非常に助かりました。自分自身の理解にもつながりました。
応用情報技術者試験の勉強を行う上で、過去問を活用している方は多いかと思います。
私も随時過去20年分くらいの過去問をやり直しているのですが、その問題の中でも表現や設問が適当でないもの、時代の変化に対応していないものなども含まれており、修正されていっているのだと思います。
そこを理解せずに進めているのが、良くないですね。
せっかく勉強しても正しい理解出ないのであれば意味がないですから。
これから記事を作成する時にはより一層気を付けて作成したいと思います。
~ 修正追記以上 ~