暗号化と復号に公開鍵と秘密鍵、別々の鍵を使う暗号方式
公開鍵暗号方式では、暗号化と復号に用いる鍵をセットで生成し、暗号化の鍵のみ誰でも手に入れられる状態にして、秘密鍵は鍵を生成した側だけが保持することになる。送信側と受信側で保持する鍵が異なることが公開鍵暗号方式の特徴だ。
公開鍵暗号方式が登場する以前から使われている共通鍵暗号方式は、共通鍵を安全性高く配送する必要性(鍵配送問題)がボトルネックになっていた。また、共通鍵暗号方式には通信相手それぞれに個別の共通鍵を用意する必要があり、管理が煩雑になりがちだった。それらの課題への解決策として開発されたのが公開鍵暗号方式だ。
公開鍵暗号方式は、誰でも入手できる公開鍵と発行元しか知らない秘密鍵の2つで構成されている。
公開鍵は原則として、誰でも入手することが可能だ。しかし、公開鍵だけを手に入れても、秘密鍵がなければ暗号化された情報を復号することはできないため、先述の鍵配送問題が発生しないことがメリットだ。
さらに、相手を選ばず、公開鍵と秘密鍵のセットがあれば安全に通信できることから、鍵の管理がシンプルで済む。
ただし、デメリットもある。安全性とトレードオフの関係にあるのが処理速度だ。共通鍵暗号方式と比較して、公開鍵暗号方式では暗号化あるいは復号に数百~数千倍の時間がかかると言われている。その理由は暗号化・復号で用いられる演算が複雑なこと、そしてデータの鍵長を長くする必要があるためだ。このように、処理に要する時間が膨大となってしまうことから、現実的には解読が困難であり、暗号化に利用することができるのだ。
なお、この処理速度のデメリットを補いながら、鍵の事前共有が不要であるハイブリッド暗号方式も存在する。公開鍵暗号方式、共通鍵暗号方式を組み合わせることで双方のメリットを生かしたこの方式は、SSL/TLSなどの暗号化通信にて用いられている。
公開鍵暗号方式の仕組み
公開鍵暗号方式の通信では、以下のような流れで暗号化通信が行われる。
- 受信側で公開鍵と秘密鍵のセットを生成する
- 上記セットのうち、公開鍵を送信側へ送付する
- 送信側で公開鍵を使って通信を暗号化する
- 受信側で秘密鍵を使って復号する
公開鍵暗号方式では、受信者が公開鍵と秘密鍵を特定のアルゴリズムを用いて対に生成するところがポイントとなる。この場合だと、生成された公開鍵は送信側で暗号化に用いられ、秘密鍵は受信側で復号に使われる。鍵を生成した受信側のユーザーのみが秘密鍵を保持しているため、仮に通信内容が傍受されたとしても復号できないという仕組みだ。
公開鍵暗号方式で使われる暗号化の種類
次に公開鍵暗号方式で使われる暗号のうち、主要な3種類を以下に紹介していく。
RSA
公開鍵暗号方式で利用されている暗号化アルゴリズムの代表としてRSA(Rivest-Shamir-Adleman cryptosystem)が挙げられる。RSAは素数の積を元に公開鍵を生成し、元となる素数から秘密鍵を生成する。素数の積を計算することは容易ながら、膨大な桁数の数字を素因数分解することは現実的に難しいという点を応用している。
素数の桁数を増やすことで安全性が高まるものの、復号に要する時間も増えていくことになる。そのため、近年ではスーパーコンピューターでも解読が困難とされる、2,048bitの鍵長を利用することが一般的である。
DSA
DSA(Digital Signature Algorithm)はデジタル署名専用の暗号化アルゴリズムとして知られる。
RSAが素数の組み合わせを用いたアルゴリズムであるのに対して、DSAは「離散対数問題(DLP:Discrete Logarithm Problem)」を利用した整数を用いたアルゴリズムである。
ECDSA
ECDSA(Elliptic Curve Digital Signature Algorithm)はDSAよりも短い鍵長で、DSAと同等の安全性を担保することができる暗号化アルゴリズムだ。本人性を確認する場面でよく利用されており、入退室に用いるICカードやブロックチェーンに利用されている。