【SC試験対策】鍵を利用した暗号化とディジタル署名の図解と具体例

# 目的
SC試験でも頻出の鍵を利用した技術に関して整理したので記録を残しておきます。
技術的に深いところを理解するというより技術の概要理解を目的としています。
お気付きの点（技術的な点や本記事の構成などなんでも）ありましたら、コメントいただけると幸いです。

# 鍵を利用した暗号化とディジタル署名の目的
まず、それぞれの技術について目的を確認しましょう。
鍵を利用した暗号化の目的の目的は、【盗聴対策】です。
送信側で、平文を***暗号化***し、受信側で***復号***することで盗聴の心配なく、ネットワーク上にデータを流すことができます。
<img width="400" alt="toutyou.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607942/5a6c399a-7fa4-a42a-eb22-46a42b92c204.png">

一方、ディジタル署名の目的は【改ざん対策】と【なりすまし対策】です。
インターネットという荒波を超える途中で攻撃者による改ざんが行われていないことを保証する技術です。
また、相手が本当に通信したい相手なのかという真正性を保証する技術となります。
ディジタル署名は、鍵を利用した暗号化が行われていますが、目的が異なることに注意してください。
<img width="400" alt="narisumasi.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607942/a2d8d7c8-1f50-7b5f-3f58-9ab610d91d01.png">


これらの技術については、【共通鍵方式】→【公開鍵方式】→【ディジタル署名】の流れで覚えておくと理解が深まります。
T君（送信者）とR君（受信者）の手紙のやり取りを例にそれぞれの特徴を押さえましょう。


# 共通鍵方式
送信側と受信側で同じ鍵（共通鍵）を利用します。
共通鍵方式における特徴は
> 共通鍵で暗号化を行なった暗号は、共通鍵でしか復号することができない

という点です。

<img width="400" alt="secret.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607942/66b74f56-37ef-ffee-20b2-40db75454713.png">

特徴を知った上で、実際に具体例を見てみましょう。
①T君が手紙に鍵をかけて送信します。
②R君は事前に手に入れていた共通鍵で鍵を解除して、手紙を読みます。

シンプルな技術ですね。
ここでみなさん疑問に思われるのはどうやって二人は鍵を事前に交換したのかという点だと思います。
盗聴される可能性のあるネットワーク上でどのように鍵を交換すれば良いのでしょうか・・・。
鍵交換の必要性をなくし、この課題を解決した技術が【公開鍵方式】です。



# 公開鍵方式
まず、公開鍵方式では公開鍵（Public Key）と秘密鍵(Private Key)という二つの鍵が登場します。
これら二つの鍵の特徴を抑えることが理解への近道です。
公開鍵方式の特徴は、
> 公開鍵で暗号化した暗号は、秘密鍵でしか復号できない

という点です。
(【秘密鍵で暗号化した暗号は、公開鍵でしか復号できない】という特徴もあるのですが、こちらはディジタル署名で利用します)
<img width="400" alt="public.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607942/be94ef8b-5662-c58c-83c9-827925c5cac7.png">

特徴を知った上で、実際に具体例を見てみましょう。
①R君は公開鍵を公開します。（暗号化しかできないので、公開しても安全です）
②T君はR君の公開鍵で、手紙に鍵をかけて送信します。
③R君は自分の秘密鍵で、鍵を解除して、手紙を読みます。


# ハイブリッド方式
ここで、共通鍵と鍵を併せて利用したハイブリッド方式についても参考に触れておきます。
共通鍵方式の課題を解決したように見えた公開鍵方式でしたが、計算量が多いという課題があります。
そこで提案されたのがハイブリッド方式です。
ハイブリッド方式の特徴は、
> 公開鍵方式を利用して、共通鍵を交換する

という点です。

実際に具体例を考えてみましょう。
絵を描きながら手順を復習すると、共通鍵と秘密鍵の理解を深めると思います。
①R君は公開鍵をネットワーク上に公開します。
②T君はR君の公開鍵で、共通鍵を入れた封筒に鍵をかけて送信します。
③R君は自分の秘密鍵で、鍵を解除して、共通鍵を手に入れます。
④以降、T君とR君は共通鍵を利用して通信します。


# ディジタル署名
ここまで読んでいただきありがとうございます。
鍵を利用した暗号化については、理解していただけたでしょうか。
最後に、鍵の暗号化を利用したディジタル署名についても理解してしまいましょう。
ディジタル署名は、秘密鍵と公開鍵の特徴を利用することで、送られたきた手紙が改ざんされていないか、通信の相手が確認する技術です。
公開鍵と秘密鍵の特徴は
> 秘密鍵で暗号化した暗号は、公開鍵でしか復号できない

という点です。
秘密鍵で暗号化されたものが公開鍵で複合できることを確認することで、秘密鍵を持っているT君と手紙のやり取りをしているという確証を得ているのです。
***公開鍵暗号方式と逆の手順を踏む***ことが、ディジタル署名のポイントです。
今回はT君の秘密鍵と公開鍵も利用するので、少し複雑ですが順を追って理解しましょう。
<img width="400" alt="digital.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607942/097fab71-693b-4e1c-e86b-8207b625f532.png">

特徴を知った上で、実際に具体例を見てみましょう。
①T君とR君は自分の公開鍵を公開します。
②T君は、手紙をR君の公開鍵を使って暗号化します。
③T君は、手紙をT君の秘密鍵を使って暗号化して、ディジタル署名を作成します。※
④R君は、T君からの手紙をR君の秘密鍵を利用して、復号します。
⑤R君は、T君の公開鍵で復号します。
⑥手紙を復号したものとディジタル署名を復号したものが一致するか確認します。
※ハッシュダイジェストを暗号化することが多いですが今回は流れを重視し、シンプルに流れを追います。

これらの工程を踏むことで、T君の秘密鍵を利用しているから通信相手はT君という【真正性】と複合後の平文が一致するから【改ざんされていない】ということを保証することができます。

# まとめ
それぞれの技術に関する特徴をまとめておきます。
共通鍵方式
> 共通鍵で暗号化を行なった暗号は、共通鍵でしか復号することができない

公開鍵方式
> 公開鍵で暗号化した暗号は、秘密鍵でしか復号できない

ハイブリッド方式
> 公開鍵方式を利用して、共通鍵を交換する

ディジタル署名
> 秘密鍵で暗号化した暗号は、公開鍵でしか復号できない

それぞれの技術の流れを理解しておくことはSC試験や基本情報・応用情報で求められるので、みなさんの理解の一助になれば幸いです。



# PKI（公開鍵基盤）
さて、これでめでたくT君とR君は内緒の話を、【盗聴されず】【改ざんされず】【なりすましされず】楽しむことができるようになりました。
しかし、公開鍵を公開して通信しているR君は本物なのでしょうか。。。
通信している相手が、公開鍵とペアとなる秘密鍵を持つ人であることは保証されていますが、本当に現実世界のT君なのかまでは保証されていないのです。

秘密の話をしている相手が偽物でないか確認するための技術が、***PKI(公開鍵基盤)***です。
ディジタル世界の相手と現実世界の相手が一致していることを確認するための技術となります。
こちらについても記事を準備しておりますので、気になる方は、ご参考ください。


# 参考文献
- 情報処理安全確保支援士合格教本