第21回 暗号化方式(共通鍵、公開鍵、秘密鍵、デジタル認証)の概要

公開日:2020-01-14 更新日:2020-01-14

1. 概要

暗号化方式(共通鍵、公開鍵、秘密鍵、デジタル認証)の概要についてです。

2. 動画



3. 暗号化の必要性

インターネットの通信はハガキと仕組みが似ています。
ハガキは表に宛先、裏に内容が書いてあり、相手に届くまでの間に、盗聴や改ざんされる可能性がありますが、 インターネットの通信も同様に、いくつかの中継地点を経由して送信されるため、盗聴や改ざんされる可能性があります。 そのため、それを防ぐために、データの暗号化を行う必要があります。

また、最近のサイトは暗号化(常時SSL化)されていることが多くなってきましたが、
暗号化されていないサイトは、ハッキングされて改ざんされていなくても、
中継地点で改ざんされ、自分だけ異なる内容が表示される可能性があります。
インターネットを使う場合は、暗号化されているか常に注意してください。

4. 共通鍵暗号方式

共通鍵(数値)を使って、データの暗号化と復号(解読)を行うことができます。

データ、共通鍵 ---> 暗号化処理() ---> 暗号

暗号  、共通鍵 ---> 復号処理()   ---> データ

共通鍵で復号する場合は、暗号化した時と同じ鍵を使う必要があります。
異なる鍵では復号できません。
鍵をコピーして他の人に渡せば、誰でも同様に暗号化・復号が行えます。
鍵を紛失した場合は、暗号化した本人でも復号ができなくなります。

また、インターネットの通信を共通鍵を使って暗号化する場合、
送信側と受信側で、同じ共通鍵を持つ必要があります。
そのため、事前に共通鍵を暗号化して受け渡す必要があります。
(後述する公開鍵暗号方式を使用します)

主な共通鍵暗号方式
AES  DESに代わる暗号を公募して、Rijndael(ラインダール)が採用された。
3DES トリプルデス。3つの鍵でDESの「暗号化-復号-暗号化」を行って暗号化する。復号はその逆。
DES  非推奨。時間をかけると復号できてしまう。

5. 公開鍵暗号方式

公開鍵を使って暗号化して、秘密鍵を使って復号します。

データ、公開鍵 ---> 暗号化処理() ---> 暗号

暗号  、秘密鍵 ---> 復号処理()   ---> データ

公開鍵と秘密鍵はペアで作成します。
公開鍵は誰でも取得することができます。
秘密鍵は鍵の作成者のみが保持します。

これは、公開鍵を使って誰でも暗号化できますが、
復号できるのは秘密鍵を持っている鍵の作成者のみであることを意味します。

用途としては、共通鍵暗号方式の共通鍵の受け渡しで使用されます。
例えば、Web サーバーとブラウザ間を共通鍵暗号方式で暗号化通信をする場合、
事前に共通鍵を安全に受け渡しする必要がありますが、この時に公開鍵暗号方式が使用されます。
(実際には共通鍵の作成に必要な情報の受け渡し)

6. デジタル署名(電子署名)


6.1 概要

あるデータに対して、押印の役割をするのがデジタル署名です。
実際のハンコよりも強力で、デジタル署名(ハンコ)と対象データを検証することにより、
データが変更されていないことと、デジタル署名した人物を保証することができます。

例えば、デジタル署名後にデータを変更した場合、デジタル署名の検証でエラーとなり、署名が無効となります。
逆に、検証でエラーにならない場合は、都合が悪くなっても、署名していないと否認することができなくなります。

6.2 仕組み

デジタル署名は、公開鍵暗号方式を使って実現されます。

公開鍵暗号方式の1つである RSA では、
秘密鍵で暗号化して、公開鍵で復号することができます。

データ、秘密鍵 ---> 暗号化処理() ---> 暗号

暗号  、公開鍵 ---> 復号処理()   ---> データ

秘密鍵で暗号化したデータは、公開鍵で誰でも復号できます。
これは、盗聴防止としての暗号化の意味はありませんが、
公開鍵で復号できると言う事実が、秘密鍵を持っている人が暗号化したと言う証明になります。
これを利用したのがデジタル署名(電子署名)です。
(暗号化方式によって、検証のみ行える場合もあります)

実際に秘密鍵で暗号化する場合(デジタル署名する場合)は、
デジタル署名をする対象データのハッシュ値(※)を求め、それに対して暗号化を行います。
署名の検証は、署名から復号したハッシュ値と、実データのハッシュ値を比較して行います。
(ハッシュ値を使うのは、比較を簡単にするためと、署名データ量を減らすためです)

※ハッシュ値とは、任意のデータをあるサイズに収まるように不可逆的な圧縮をした値です。
また、データを操作して、任意をハッシュ値を算出させることもできません。
例えば、SHA-256(シャー・トゥー・フィフティーシックス)では、
どんなデータでも、256ビット(32バイト)の値に変換します。