【基本情報】共通鍵暗号方式と公開鍵暗号方式の違い

こんばんは。あんみつです。

今日は鍵暗号方式の基礎についてまとめます。

実は私は情報処理試験ではこの手の問題が苦手で、いつもうろ覚えの知識で試験に挑んでいました。

今回もなるべくややこしくならないよう、さっくりまとめたつもりです。
わかりづらかったらご指摘ください。

共通鍵暗号方式(秘密鍵暗号方式)とは

送信側(クライアント)と受信側(サーバ)で同じ鍵を使って暗号化/複合化する方式です。

通信処理の流れは以下のようなイメージになります。

1.二者間で共有する共通鍵を生成
2.送信側は共通鍵を使ってデータを暗号化し送信
3.受信側は同じ共通鍵を使ってデータを復号化し取得

共通鍵暗号方式は単純に、送信側と受信側があらかじめ同じ鍵で開け閉め可能な箱を用意しておいて、送信側が箱にデータを詰めて鍵をかける。受信側は箱を受け取ったら同じ鍵でその箱を開ける。というような流れをイメージすれば良いです。

公開鍵暗号方式とは

受信側(サーバ)が暗号化のためだけに用いる公開鍵とそれを復号化するために用いる秘密鍵両方生成し、公開鍵のみを外部に公開する方式です。

通信処理の流れは以下のようなイメージになります。

1.受信側は公開鍵と秘密鍵を生成し、公開鍵のみを外部に公開
2.送信側は公開されている公開鍵を使ってデータを暗号化し送信
3.受信側は秘密鍵を使ってデータを復号化し取得

公開鍵暗号方式のイメージとしては、受信側は錠前のような「一度閉めたら自分では開けられない」ものを大量生産して外部に公開し、送信側はデータを箱に詰めたらその錠前で鍵をかけて送る。受信側は自分だけが持っている、錠前を開ける鍵を使って箱を開ける。というようなものです。

それぞれのメリデメと代表的アルゴリズム

共通鍵暗号方式、公開鍵暗号方式のメリット/デメリットと代表的なアルゴリズムについて記します。

共通鍵暗号方式

◆メリット

処理速度が高速
暗号化も復号化も同じロジックを用いるため処理が単純になります。

◆デメリット

通信先が増えれば増えるほど鍵の数が増える
二者間で共有する鍵を生成する必要があるため通信相手の数が増えていくと鍵の数が膨大になります。
Aさん、Bさんの2者であれば鍵の数は2個。
Cさんが加わるとA⇔B、B⇔C、A⇔Cで3個。
Dさんが加わると A⇔B、A⇔C、A⇔D、B⇔C、B⇔D、C⇔Dで6個。
・・・
つまり、n者が相互に共通鍵暗号方式を用いる場合の鍵の数は「n×(n-1) / 2」で求めることができます。
ちなみに相互の通信先が100人いると鍵の数は4950個にも及びます。
1000人いたら49500個です。

鍵の安全な受け渡し方法が必要
鍵自体が悪用されては意味がないため、データをやり取りする前に鍵を安全に受け渡す方法が必要です。

◆代表的アルゴリズム

AES・・・ Advanced Encryption Standard の略。固定長のデータ単位で処理するブロック暗号。

情報処理試験で共通鍵暗号方式といったらAESです。

公開鍵暗号方式

◆メリット

鍵の数が少なく済む
公開鍵は最低1種類外部に公開すれば事足りるため通信相手が増えても鍵を増やす必要がありません。
Aさん、Bさんの2者であればAの秘密鍵と公開鍵、Bの秘密鍵と公開鍵で4個。
Cさんが加わると6個。
Dさんが加わると8個。
・・・
ここだけ読むと共通鍵暗号方式より多く見えますが、重要なのは増え方です。
外部に公開する公開鍵は通信相手がどんなに増えても1つで固定なので、
n者が相互に公開鍵暗号方式を用いる場合の鍵の数は「2n」で求めることができます。
よって、相互の通信先が100人いた場合、鍵の数は200個になります。
1000人いたら2000個です。

公開鍵の受け渡しが容易
暗号化用途の鍵は外部に公開するものであるため複雑な受け渡しが不要です。

◆デメリット

処理速度が遅い
暗号化と復号化で2種類の鍵を用いるため共通鍵暗号方式と比べて処理速度が遅くなります。

◆代表的アルゴリズム

RSA・・・表記は発明者の頭文字を繋げたもの。桁数が大きい合成数の素因数分解問題の解が困難であることを安全性の根拠とした暗号方式。

情報処理試験で公開鍵暗号方式といったらRSAです。

SSLの仕組み

一般になじみ深いWebサイト上の通信で最もポピュラーな暗号化方式が、SSLです。
「SSL」というよりは「HTTPS」のほうがわかりやすいかもしれません。
余談となりますが、HTTPSは「HTTP over SSL/TLS」の略で、HTTP通信にSSL/TLSという暗号化機能を付与したプロトコル、ということです。

このSSLですが、実は、共通鍵暗号方式と公開鍵暗号方式を両方組み合わせて成り立っています。
このように両方の暗号方式を組み合わせることを「ハイブリッド暗号方式」と呼びます。

SSL通信の流れを概要レベルで記載すると、以下のようなイメージになります。

1.送信側(クライアント)が 受信側(サーバ)へSSL通信を要求
2.受信側(サーバ)は公開鍵と秘密鍵を生成しておき、公開鍵や接続情報をサーバ証明書に纏めて送信側に返送
3.送信側はブラウザのルート証明書でサーバ証明書を検証し、不正なサーバでないことを確認
4.送信側は続いて、サーバ証明書上で公開されている公開鍵を使って、この後の暗号通信で使用する共通鍵自体を暗号化し送信
5.受信側は秘密鍵を使って、送信された共通鍵を復号化し取得
6.以降、共通鍵を用いて受信側と送信側で暗号化通信

2~5までが公開鍵暗号方式、6が共通鍵暗号方式を用いていることになります。

ポイントは、
「最終的に共通鍵暗号方式による通信を行うために、公開鍵暗号方式の仕組みを利用して安全に共通鍵を受け渡している」
ということです。

おわりに

いかがでしたでしょうか。
非常に簡単にではありますが、共通鍵暗号方式、公開鍵暗号方式の違いがわかっていただけたら幸いです。

不明な点や間違いがありましたら、お問い合わせフォームやコメント、Twitterでご連絡ください。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA