暗号とは、情報を第三者が見ただけでは内容がわからないようにする方法である。
概要
我々が情報をやりとりする際、何らかの形で情報が漏れてしまう可能性は十分にある。それが外部に知られてはいけない場合、仮に情報が漏れたとしても、それだけでは内容がわからないようにする必要がある。その手段として暗号がある。現代は高度情報化社会にあるため、暗号技術は必要不可欠である。もし暗号がなければ、大切な人に送ったメールや、通販で注文した商品情報もダダ漏れしてしまう。
「鍵」とは
これまでに様々な暗号が考え出されてきたが、暗号にとって特に重要な概念が「鍵」である。これは、変数を自由に設定できる暗号で登場する概念である。
暗号化において、方法が1通りしかないものは優れているとはいえない。なぜなら、それがよく知られた方法である場合、暗号化の方法がわかれば簡単に元に戻せてしまうからである。現代において用いられている暗号は、変数を用意し、値を自由に設定できるものが多い。これなら暗号化の方法がわかっても、変数の値がわからなければ元に戻せないのである。
その際、暗号化、復号(元に戻すこと)に使えるように変数を加工したものを鍵という。変数の値を加工して鍵を得ることを、鍵を「生成する」という。復号に用いる鍵は秘密鍵とも言い、特に他人に知られてはいけない。暗号化と復号で同じ鍵を用いる暗号を共通鍵暗号、異なる鍵を用いる暗号を公開鍵暗号という。公開鍵暗号では、暗号化に用いる鍵を公開鍵という。
公開鍵暗号のメリット
共通鍵暗号は暗号化と復号に同じ鍵を用いるので、どちらも第三者に知られてはいけない。よって情報を送信する側と受信する側の間で予め鍵を決めておかなければならない。
公開鍵暗号はその問題を解決する画期的な暗号方式である。まず受信者は鍵を作成しなければならない。
鍵は公開鍵と秘密鍵がセットで作成される。その中で公開鍵だけを送信者(全世界でもよい)に公開し、秘密鍵は厳重に保管して置く必要がある。秘密鍵は受信者のみが知っているので、公開鍵から秘密鍵が推測できなければ、暗号としての役目を果たすのである。全体の流れはこんな感じ。
- 送信者Bは受信者Aが公開している公開鍵を使って送るデータを暗号化する。
- 送信者Bは受信者Aに暗号化されたデータを送信する。この際、データは受信者Aの公開鍵で暗号化されているので復号化には受信者Aの秘密鍵が必要である。よって受信者A以外にデータを復号化することは出来ない。
- 受信者Aは送信者Bから受け取ったデータを自分の秘密鍵で復号し、平文を手にすることが出来る。
更に簡単に説明すると以下の通りになる。
送「送りたい情報があるんだけど、外部に漏れるとマズいんだよね」
受「じゃあ、鍵を公開するからこの方法で暗号化してから送って」
送「(公開鍵で暗号化)送ったよ!」
受「(秘密鍵で復号)おk、把握した。」
ハイブリッド暗号方式
公開鍵暗号をそのまま情報の暗号化に使うと様々な問題があるため、そのような行為はアンチパターンとされる。代わりに推奨されるのが公開鍵暗号と共通鍵暗号を組み合わせる方式であり、ハイブリッド暗号方式と呼ばれる。
- 公開鍵暗号方式を使って、今回の通信で使う秘密のデータを相手と共有する。秘密のデータは基本的に使い捨てである。
- 送信者Bは共有した秘密のデータを使い、送るデータを暗号化する。
- 送信者Bは受信者Aに暗号化されたデータを送信する。
- 受信者Aは送信者Bから受け取ったデータを共有した秘密のデータで復号し、平文を手にすることが出来る。
「素因数分解の困難性」
代表的な公開鍵暗号システムであるRSA暗号は「素因数分解の困難性」を安全性の根拠としている。例えば7387といったある程度大きな素因数分解はすぐにはできないが、83・89という因数が与えられれば83×89=7387であることがすぐに分かるという非対称性を用いている。実際は遥かに大きな桁数の素数2個の積を公開鍵に使う事で安全性を高めている。(2022年現在、典型的には素数は約300桁、積は約600桁。)これは大きな数の素因数分解を実用的な時間で行う解法が発見されておらず、コンピュータを用いても天文学的な時間が必要である事によるものである。
実際のやり取りでは、情報を相手に送ってもらう際に「7387」のような大きな数、2つの素数の積を使って暗号化して情報を送ってほしいと依頼をする(公開鍵)。相手はその公開鍵である「7387」を使って平文(数)を暗号化し、暗号文(数)を依頼主に送る。暗号文(数)を受け取った依頼主は、「7387」を素因数分解した「83」と「89」の2つの素数を知っているので、これを用いて暗号文を原文に戻す事(復号)が出来る。
関連動画
関連商品
関連項目
子記事
兄弟記事
- なし
- 6
- 0pt