インターネット通信において、セキュリティ強化のための技術である「公開鍵暗号」について紹介します。この技術はブロックチェーンを理解する上でも欠かせない暗号技術です。
目次
公開鍵暗号の概要
現在、二者間の通信を暗号化する際、一般的に使われる方式は「共通鍵暗号方式」と「公開鍵暗号方式」の二つです。この二つの暗号方式の違いは、暗号化と復号するときに、共通鍵だけを使うか、または秘密鍵と公開鍵のペアを使うかです。
共通鍵暗号方式
共通鍵暗号方式は、暗号化する際の鍵と復号する際に同じ鍵を使う暗号化方式です。この共通鍵の情報は、送信側と受信側の二者間のみで共有されています。
以下が通信の流れになります。
1.送信側が、共通鍵でデータを暗号化し、受信側へ送信する
2.受信側が受け取ったデータを、同じ共通鍵で復号し、データを取得する
公開鍵暗号方式
しかし、この共通鍵暗号方式には、鍵の受け渡しを安全に行うことが難しいという弱点があります。鍵を秘密にしたまま受け渡しを行うには限界があります。そこで、その限界を解決したのが「公開鍵暗号方式」です。公開鍵暗号方式は、暗号化/復号する際の鍵に、「公開鍵」と「秘密鍵」の二つを用いています。
以下が、通信の流れになります。
1.送信側は、受信側が公開している公開鍵を取得する
2.取得した公開鍵で、送信するデータを暗号化して送信する
3.受信側は、受け取ったデータを受信側のみ保持している秘密鍵で復号し、データを取得する
秘密鍵
秘密鍵とは、公開鍵暗号において公開鍵と対になる鍵です。ビットコインにおいては、送金時などで署名を行うために使われます。
秘密鍵は自分以外に教えてはいけない、自分だけが保持している鍵です。もし、他人に知られてしまうと、ブロックチェーン上のすべての権限を奪われたことになってしまいます。
公開鍵
公開鍵とは、秘密鍵から生成された秘密鍵と対になる鍵で、公開鍵暗号方式において第三者に公開する鍵です。
すなわち世界中に教えても問題ない、誰でも取得できるオープンな鍵です。
この秘密鍵と公開鍵を使った公開鍵暗号方式を使えば、データを復号できるのは秘密鍵を持っている受信者だけなので、第三者に暗号化したデータを盗まれてしまったとしても復号される心配がないことはない、というメリットがあります。
また、復号するために必要な情報を相手に送ることなく暗号通信をすることができるため、通信傍受による鍵の流出も防ぐことができます。
署名
また、公開鍵暗号の応用に「署名」という仕組みがあります。これは公開鍵暗号を用いた本人確認のシステムです。
公開鍵はその名の通り「公開」されているものなので、「私の公開鍵は〇〇です」と言っている人を無条件に信用することはできません。
そこで秘密鍵と公開鍵を入れ替えて使うことができるという公開鍵暗号の性質を利用して本人確認を行います。公開鍵を使って検証できるので、誰でも検証でき、流れは以下の通りです。
1. 本人であることを検証するための文字列を決める。この文字列は文書のハッシュ値など誰でも正解を得られる形で決める
2. 秘密鍵を持っている人がその文字列を、秘密鍵で暗号化する。ここまでの作業を署名と呼ぶ
3. 公開鍵を受け取った人は、暗号化された文字列を復号して元の文字列と比較する
4. 文字列が一致した場合、この公開鍵で正しく解読できる文章を作れるのは秘密鍵を持っている本人だけなので、本人確認ができる
どこで秘密鍵・公開鍵が使われているか
ブロックチェーン
ブロックチェーンにおける活用事例であるビットコインを例に紹介しましょう。公開鍵暗号の主な使用方法は「データの暗号化」と「署名」の二つがあると説明しましたが、ビットコインにおいては「署名」の方を使っています。
ビットコインの取引では、公開鍵から生成されるビットコインアドレスから支払いをする時に、そのアドレスの秘密鍵を持っているビットコイン所有者が秘密鍵を用いて署名します。他の人は、その署名と公開鍵を使ってその署名が秘密鍵を持った人が行ったこと、署名された後に本文が改ざんされていないことを確認することが出来ます。
具体的な送金の流れは以下のようになります。
1. 公開鍵と秘密鍵のペアを生成する(ビットコインでは秘密鍵から公開鍵への変換はsecp256k1という楕円曲線を利用します。)
2. 公開鍵からハッシュを2回とり、チェックサムを加えてBase58フォーマットしたアドレス(口座番号)を生成する
3. 送信するビットコイン、アドレス等の情報を含んだ送金情報(取引データ)に、アドレス所有者である送信者が秘密鍵を使い署名する
4. P2Pネットワークに送金情報である取引データをブロードキャストする
5.取引内に含まれる公開鍵と署名済みの送金情報を照合して取引が正しいことを検証する
SSL通信
Webで一般的に使われている、ブラウザなどサイトを閲覧する側であるWebクライアントと、サイトを公開している側であるWebサーバー間の通信の暗号化プロトコルである「SSL」でも、共通鍵暗号方式と公開鍵暗号方式の仕組みが採用されています。
SSLの暗号化通信は大まかに二段階に分かれています。
一段階目は公開鍵暗号方式を用いて、通信内容を暗号化するための共通鍵を、クライアント/サーバー間で共有します。
二段階目は共通鍵暗号方式を用いて、共有した共通鍵を利用し、個人情報やログイン情報といった実際の通信データを暗号化して通信します。
マイナンバーカード
マイナンバーカードには公的個人認証サービスのための電子証明書が格納されています。そして、そこでも公開鍵暗号方式が用いられています。
マイナンバーカードには署名用電子証明書と利用者証明用電子証明書が標準搭載されています。これは名前の通り電子文書の電子署名に用いられており、改ざんがないことや本人であることを証明するためのもので、署名用の公開鍵とともに、利用者証明用電子証明書には署名者の基本4情報(氏名・生年月日・住所・性別)も含まれます。
具体的に署名用電子証明書を使った場合は以下のような流れで認証されます。
1.マイナンバーカードに格納する秘密鍵で文書を暗号化する
2.文書本体と併せ、暗号化された文書と公開鍵・電子証明書を送付する
3.発信者から送付された公開鍵で暗号化された文書を復号する
4.文書本体と突合し、改ざんの有無を検知する
5.認証局へ電子証明書の有効性を照会し、有効であれば認証成功
このように、身の回りの様々なサービスにおいて公開鍵・秘密鍵が使われています。公開鍵暗号方式が利用されている、ブロックチェーンは、このような既存技術を使ってセキュリティを上げていることがお分かりいただけたと思います。