Key Feature
Pocket

インターネット通信において、セキュリティ強化のための技術である「公開鍵暗号」について紹介します。この技術はブロックチェーンを理解する上でも欠かせない暗号技術です。

公開鍵暗号の概要

現在、二者間の通信を暗号化する際、一般的に使われる方式は「共通鍵暗号方式」と「公開鍵暗号方式」の二つです。この二つの暗号方式の違いは、暗号化と復号化をするときに、共通鍵だけを使うか、または秘密鍵と公開鍵のペアを使うかです。

共通鍵暗号方式

共通鍵暗号方式は、暗号化する際の鍵と復号化する際に同じ鍵を使う暗号化方式です。この共通鍵の情報は、送信側と受信側の二者間のみで共有されています。

以下が通信の流れになります。

1.送信側が、共通鍵でデータを暗号化し、受信側へ送信する
2.受信側が受け取ったデータを、同じ共通鍵で復号化し、データを取得する

公開鍵暗号方式

しかしこの共通鍵暗号方式には、鍵の受け渡しを安全に行うのが難しいという弱点があり、鍵を秘密にする方法には限界があります。そこで、その限界を解決したのが「公開鍵暗号」です。公開鍵暗号方式は、暗号化/復号化する際の鍵に、「公開鍵」と「秘密鍵」の二つを用いています。

以下が、通信の流れになります。

1.送信側は、受信側が公開している公開鍵を取得する
2.取得した公開鍵で、送信するデータを暗号化して送信する
3.受信側は、受け取ったデータを受信側のみ保持している秘密鍵で復号化して、データを取得する

秘密鍵

秘密鍵とは、公開鍵暗号において公開鍵と対になる鍵です。ビットコインにおいては、送金時の取引で署名を行うために必要です。
秘密鍵は自分以外に教えてはいけない、受信側のみ保持している鍵となります。もし、他人に知られてしまうと、ブロックチェーン上のすべての権限を渡したことになってしまいます。

公開鍵

公開鍵とは、公開鍵暗号における第三者にも公開する鍵です。公開鍵は秘密鍵と対になっています。
公開鍵は世界中に教えても問題ない、誰でも取得できるオープンな鍵です。

この方法を使えば、データを復号できるのは受信者のみであるので、第三者にデータを盗まれても復号されない、という利点があります。
また、復号化するために必要な情報を相手に知らせることなく暗号通信をすることができます。

key_image1署名

また、公開鍵暗号の応用に「署名」という仕組みがあります。これは公開鍵を用いた本人確認のシステムです。
公開鍵はその名の通り「公開」されているものなので、「私の公開鍵は〇〇です」と言っている人を無条件に信用することはできません。
そこで秘密鍵と公開鍵を入れ替えて使うことができる、という公開鍵暗号の性質を利用して本人確認を行います。
流れは以下の通りです。

1.秘密鍵を持っている人がある文字列を、秘密鍵で暗号化する
2.公開鍵を受け取った人は、暗号化された文字列を復号化して元の文字列と比較する
3.一致した場合、この公開鍵で正しく解読できる文章を作れるのは秘密鍵を持っている本人だけなので、本人確認ができる

 

どこで秘密鍵・公開鍵が使われているか

ブロックチェーン

ブロックチェーンの技術を使っている仮想通貨の一つにビットコインがあります。公開鍵暗号の主な使用方法は「データの暗号化」と「署名」の二つがあると説明しましたが、ビットコインにおいては「署名」の方を使っています。

ビットコインの取引では、公開鍵から生成されるビットコインアドレスから支払いをする時に、そのアドレスの秘密鍵を持っているビットコイン所有者が秘密鍵を用いて署名します。他の人は、その署名と公開鍵を使ってその署名が秘密鍵を持った人が行ったこと、署名された後に本文が改ざんされていないことを確認することが出来ます。

 

具体的な送金の流れは以下のようになります。

1.公開鍵と秘密鍵のペアを生成する(ビットコインでは秘密鍵から公開鍵への変換はsecp256k1という楕円曲線を利用します。)
2.公開鍵からハッシュを2回とり、チェックサムを加えてBase58フォーマットしたアドレス(口座番号)を生成する
3.送信するビットコイン、アドレス等の情報を含んだ送金情報(取引データ)に、アドレス所有者である送信者が秘密鍵を使い署名する
4.P2Pネットワークに送金情報である取引データをブロードキャストする
5.取引内に含まれる公開鍵と署名済みの送金情報を照合して取引が正しいことを検証する

key_blockchain

key_blockchain-2
SSL通信

Webで一般的に使われている、ブラウザなどサイトを閲覧する側であるWebクライアントと、サイトを公開している側であるWebサーバー間の通信の暗号化プロトコルである「SSL」でも、共通鍵暗号方式と公開鍵暗号方式の仕組みが採用されています。

SSLの暗号化通信は大まかに二段階に分かれています。
一段階目は公開鍵暗号方式を用いて、通信内容を暗号化するための共通鍵を、クライアント/サーバー間で共有します。
二段階目は共通鍵暗号方式を用いて、共有した共通鍵を利用し、個人情報やログイン情報といった実際の通信データを暗号化して通信します。

 

マイナンバーカード

マイナンバーカードには公的個人認証サービスのための電子証明書が格納されています。そして、そこでも公開鍵暗号方式が用いられています。

マイナンバーカードには署名電子証明書が標準搭載されています。これは名前の通り電子文書の電子署名に用いられており、改ざんがないことを証明するためのもので、署名用の公開鍵とともに、署名者の基本4情報(氏名・生年月日・住所・性別)が含まれます。

具体的には以下のような流れで認証されます。
1.マイナンバーカードに格納する秘密鍵で文書を暗号化する
2.文書本体と併せ、暗号化された文書と公開鍵・電子証明書を送付する
3.発信者から送付された公開鍵で暗号化された文書を復号化する
4.文書本体と突合し、改ざんの有無を検知する
5.認証局へ電子証明書の有効性を照会し、有効であれば認証成功

 

このように、身の回りの様々なサービスにおいて公開鍵・秘密鍵が使われています。公開鍵暗号方式が利用されている、ブロックチェーンは、このような既存技術を使ってセキュリティを上げていることがお分かりいただけたと思います。

Pocket

Aram Mine

Gaiax技術マネージャ。研究開発チーム「さきがけ」リーダー。新たな事業のシーズ探しを牽引。2015年11月『イーサリアム(Ethereum)』 デベロッパーカンファレンス in ロンドンに参加しブロックチェーンの持つ可能性に魅入られる。以降ブロックチェーン分野について集中的に取り組む。

Search