データの暗号技術

by 仲尾 和祥

はじめに

ブロックチェーンスタジオでは、ブロックチェーンを用いて自分たちのパーソナルデータを提供する代わりに、対価を得ることができるサービス「DataForward(データフォワード)」を開発しています。しかし、このサービスを実現するには、誰でも登録された情報を見ることができるブロックチェーンの中で、ある人や企業に対してのみに正確な情報を提供できる仕組みが必要になってきます。

今回は、その中で利用を検討しているデータ暗号技術の一部を、データ交換する人のスコープに分類し、簡単に紹介していきたいと思います。

データ交換のスコープ

知人同士:共通鍵暗号方式

このスコープの暗号化技術ついては、手紙で情報をやりとりするような、かなり古い時代から研究されてきている技術です。例えば、「縦書きで記載されている文章の各文の最初の文字だけ横に読む」といった符丁を合わせるといったような方式も、ある意味では共通鍵暗号方式になるかもしれません。
この方式では、データの交換を行う送信者と受信者の間で、極秘に共通鍵となる文字列を共有し、この共通鍵を用いてデータの暗号・復号を行います。
ちなみに、このようなアルゴリズムを公開しても実際に利用される鍵さえ漏洩しないように管理されていれば良いタイプの暗号方式は現代暗号と呼ばれており、コンピュータの世界で用いられるようになっています。

不特定多数→1人:公開鍵暗号方式

この暗号技術については、秘密鍵(鍵)とそれに対応した公開鍵(南京錠)を用意しておき、公開鍵をデータ送信者に送付することにより、受信者側でのみデータを復号できる技術です。公開鍵暗号方式のキモは、公開鍵で暗号化した暗号文は、公開鍵では復号できず、秘密鍵でのみ復号可能という点にあります。このため、公開鍵がいくら他の人にバラまかれようが、秘密鍵が漏洩しない限り、暗号化してデータを受信者へ送付することが可能という利点があります。

知らない人同士:Diffie-Hellmanの鍵交換方式

この暗号技術は、データを交換する前に、お互いに鍵を生成するためのパーツを交換し、そのパーツから共通鍵を生成し、同じ共通鍵を作り出すことで暗号・復号を行う技術です。
知らない人同士のため、極秘で鍵の交換ができない場合であっても、知っても良い情報だけを交換して暗号・復号する共通鍵を生成することができる技術となっています。
この共通鍵を生成する手順は下記の通りになっています。

  1. 送信者と受信者で素数 $p$ と整数 $x$ を決めておく
  2. 送信者は、秘密鍵 $a$ 、受信者は秘密鍵 $b$ を生成する
  3. 送信者と受信者は、互いに交換用の部品を生成する
    • 送信者:数式 $E = x^a \bmod  p$ を計算し、交換用の部品 $E$ を生成する
    • 受信者:数式 $F = x^b \bmod  p$ を計算し、交換用の部品 $F$ を生成する
  4. 送信者と受信者は、互いに交換用の部品 $E$$F$ を交換する
  5. 送信者と受信者は、互いに交換された部品から共通鍵を生成する
    • 送信者:数式 $Ga = F^a \bmod p$ を計算し、共通鍵 $Ga$ を生成する
    • 受信者:数式 $Gb = E^b \bmod p$ を計算し、共通鍵 $Gb$ を生成する

上記の手順を踏むことにより、送信者と受信者は、互いに共通鍵 $Ga = Gb = (x^{ab}) \bmod p$ を得ることができるため、通信時に共通鍵暗号方式を用いて通信することで、お互いにしか復号できないデータの授受が可能になります。
ちなみに、なぜこの共通鍵が安全なのかというと、 $Ga = x^a \bmod p$ となる $a$ の値を求めるためのアルゴリズムが、ほぼ総当たりをするしかないため(興味がある人は離散数学で調べてみてください)、どちらかの秘密鍵を算出するのが不可能に近いためです。

おわりに

暗号技術についていくつか紹介しましたが、どの暗号方式についても、秘密鍵の算出が困難であるだけであって不可能ではないことが共通しています。ただし、解読をすることは現実的でないという部分も共通しており、どこまで現実的に考えて実現するのかというセキュリティを考える上で最も基本的な部分に立ち還れたような気もします。
暗号技術については、奥が深く、鍵を生成するアルゴリズムから、どのようにデータを暗号化し、復号するのかというプロセスの部分まで、様々な研究がされているため、ブロックチェーンスタジオでも調べていく予定です。

Contact

Contact