卒論から始まるBlockchain

卒論から始まるBlockchain

俺の屍を越えて行け

日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう③ ~ 電子署名編 ~

前回までのおさらい

1)「ビザンチン障害を含む不特定多数のノードを用い、時間の経過とともにその時点の合意が覆る確率が0へ収束するプロトコル、またはその実装をブロックチェーンと呼ぶ。」

出典:「ブロックチェーンの定義」を公開しましたJBA

 前回は太字部分を「ファイナリティーを確保する」という言葉に置き換えて説明しました。じゃあファイナリティーってなに?というのは以下のようなものを指しますとお話しました。

(1)受け取ったおかねが後になって紙くずになったり消えてしまったりしない、また決済方法について(2)行われた決済が後から絶対に取り消されない――そういう決済が「ファイナリティーのある決済」と呼ばれます。 

出典:第7章 決済の実行 : 日本銀行 Bank of Japan

ではなぜこれが定義の太字部分に関係あるかはブロックチェーンのある特徴に由来しますよ。それは「一定時間ごとにデータを繋げていく」、「より長くつながったデータを正しい合意とする」という二点によります(前回は説明を簡略化するためあえてこの二点に絞った)、と説明しました。

Q:ブロックチェーンは「どんな」データを合意しているのか?

A:ある計算を一番早く、正しくした者のデータをみんなで合意する(ビットコインの場合&データの中身についての話は省略)。そして、合意したブロックを一定時間ごとに繋げていく。

注意点

1:ある瞬間に、正しいデータが複数提案される(これをフォークといいます)ことがある。

2:その場合、より長くなった方を正しいデータとして合意し、繋げていく。短い方(その他のブロック)は無効になる。

f:id:mochi-mochi-0397:20180604165151p:plain

これによりブロックチェーンでは、一時期は正当な取引であると合意されていたものが時間が経つと無効になる、覆される可能性があります。だからブロックチェーンでは「一定時間」ごとにネットワークで合意されたデータを繋いでいき、それらが後で「無効・覆る可能性」が限りなく0に近くなっていく(0%にはならない)ことでデータの正当性を担保しています。と説明し、最後に(1)のまとめをして終わりました。

ブロックチェーンとは:応答を返さない、誤った応答を返す可能性がある不特定多数の参加者を含むネットワークにおいて、時間が経つにつれてその合意内容が覆される確率が限りなく0に近くなっていくプロトコル、実装のこと

 

 

ということで、今回から(2)の説明をしていきたいと思います。では改めて定義を見て見ましょう。

2)「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと呼ぶ。」

出典:「ブロックチェーンの定義」を公開しました | JBA

 

・・・まあ、なぞだよね。画面たたき割りたくなるよね。だって最初の一語「電子署名」がわからんもん。

定義だからしょうがない?うるせぇ!もっとわかりやすく言えねえのかよ!

そんな方々のために、私頑張りたいと思います。

 

署名とは

 そもそも署名とは何でしょうか。Google先生に聞くと、以下のような文が見つかりました。

行為者の同一性を示し、行為者の責任を明らかにするために行為者が自己の氏名を手書き(自署)すること。

出典:日本大百科事典(全書)、署名とは - コトバンク

 これは間違いなく私(署名者)が行った・確認したものですよ。ということを証明するものなどで使われるものです。ここでは手書き(自書)と書かれていますが、ネットの世界にも証明しなくてはならない事があります。そして、ブロックチェーンにも必然的にあるわけです。

では一体どんな場面でそれは必要になってくるのでしょうか。ここではビットコインを例に説明していきます。

 

ブロックチェーンで必要な署名とは

 アリスがボブに10BTC送る状況を考るとき、超大まかなステップは以下のようになります。

  1. 「アリスからボブに10BTC送る」という取引内容をアリスがネットワークに知らせる。
  2. 取引内容に問題がないかみんなで検証する。
  3. 正しければ約束事(コンセンサスアルゴリズム)に沿って合意し、ブロックを繋げる。

※今回は電子署名の話だけしたいので、色々省略してます。ごめんなさい。

※アリスとボブは暗号学などでよく出てくるので使っています。特に意味はないです

※BTC:ビットコインの略

 ここで問題です。1.「アリスからボブに10BTC送る」という取引内容をアリスがネットワークに知らせる、と書きました。では、この取引内容は本当にアリスがネットワークに知らせた(発行した)のでしょうか?

もしかしたらボブが勝手に発行したのかもしれません。もしくはネットワーク全体に知らせる途中で、誰かが取引内容を改ざんしているかもしれません(本当は10BTCではなく1BTCだったなど)。でもそんなことはありません!確実にアリスが発信したものです!取引内容にも間違いありません!!という確証を得るにはどうすればいいのでしょうか。

 これこそがブロックチェーンで必要な署名です。そして、こんな時に使われるものが「電子署名(デジタル署名)」です。

※他にも確認しなければならないことは多くあります。しかし、今回は説明簡略化のために絞っています。ご理解ください。

※赤文字は修正した部分です。大事な部分を赤にしているわけではありません。

 

電子署名とは

 この電子署名をするために、アリスやその他のノードはどのような動きをするのか、超簡単にまとめてみます。

<アリス>

  1. 秘密鍵・公開鍵という二つのカギを用意します。
  2. 証明したい取引内容を、秘密鍵署名(暗号化)します。
  3. 公開鍵と、暗号化していない元の情報(取引内容)に署名を添付したものをネットワークに公開する。

暗号化していない元の情報=平文。暗号化した情報=暗号文といいます。以下それぞれを、平文・暗号文と表記。

 

f:id:mochi-mochi-0397:20180613004157p:plain

 

<その他のノード>

  1. アリスが公開した公開鍵を使って、(暗号化した取引内容を元に戻す(以下、復号と表記)。)署名検証する。
  2. (復号したものと、平文を比べる。同じであれば、)署名検証が正しければアリスが本当に署名したものと判断。違っていれば正しい署名がなされていないと判断し、その取引は無視。

 

f:id:mochi-mochi-0397:20180613004420p:plain

 

では要点を絞って説明していきます。

 

秘密鍵・公開鍵

最初にアリス(署名者)は以下の二つの鍵を用意します。

秘密鍵:アリス(署名者)だけが知る鍵。誰にも知らせてはいけない。

公開鍵:(今回は)署名検証(平文を復号化)するための鍵。ネットワーク上に公開するため誰でも知っている。

 

 おそらく理解しがたいのは公開鍵ではないでしょうか。特にネットワーク上に公開するという点。鍵なのに公開していいの!?と思うかもしれませんが、大丈夫です。

何故なら公開鍵から秘密鍵を知ることは実質不可能だからです。ここで「実質」とつけているのには訳があります。というのも、現在の暗号技術は数学的計算量によって担保されたものを使用しています。つまり、計算すればいつかは暗号が解読できるかもしれないが、それは何万年、何十万年かければ解けるよ、ということです。一つの暗号解読にそれだけの年月がかかるならば、それは実質解読不可能と考えられます。この先に出てくる「実質」も同じ意味です。

※次回のハッシュの話をするので、その時に詳しく説明するかも?

f:id:mochi-mochi-0397:20180612002240p:plain

 次いで重要なポイントは秘密鍵は文字通り「秘密」にしなければなりません。これを知られたら、ほかの人々はいつでもアリスに成り代わることが出来てしまいます。しかもそれはネットワーク上では本物のアリスとして完全に認められてしまいます。その為、秘密鍵は絶対に知られてはいけません。絶対にですよ!!

 また、電子署名では秘密鍵を用いて署名(平文を暗号化)します。この署名(この暗号文)はもちろんアリス(署名者)以外は実質解読することができません。

そして、この署名(暗号文)はアリスの秘密鍵からしか作れません。大事なのでもう一度いいます。この署名(暗号文)はアリスの秘密鍵からし作れません。

これが後々、署名として活きてきます。

 

 署名検証

 その他のノードは、アリスの公開鍵を用いて署名検証暗号文を解読)します。そして同じくアリスが公開した署名平文)とを比べます。そこで、両者が一致していればアリスが署名したもの、つまりは正当な発起人が出した情報だと確認できます。

 でもなぜそんなことが言えるのでしょうか。先ほどの一文を覚えていますか?「この署名暗号文)はアリスの秘密鍵からしか作れません。」といいました。

 つまり、公開された署名暗号文)を作れるのは全世界で秘密鍵を持っている者のみ。今回でいうアリス本人でしかありえないということになります。

 これでアリスが本当に署名をしたと確認することができます。

 

f:id:mochi-mochi-0397:20180613004451p:plain

 

まとめ

 秘密鍵・公開鍵の二種類の鍵を用いることで。電子署名という技術が成り立っているとお話しました。

これは署名者しか知りえない情報(秘密鍵)でしか作れない署名を作る暗号文を用いる)ことで、その情報の正当性を得る技術になります。

本当はハッシュ関数を用いての説明の方がよかったかもしれませんが、それはまた次回ということにしました。

ということで今回はここまでです!お疲れ様でした。ここまでお読みいただきありがとうございました!!

何か不備等ありましたらご指摘下さると幸いですm(_ _)m

 

修正:2018/06/13

公開鍵暗号秘密鍵・公開鍵の役割と、電子署名秘密鍵・公開鍵の役割を勘違いしていたため一部修正を入れました。少々読みづらくなってはいますが、どこで勘違いしていたかがわかるように()に打消し線を引き、赤文字で修正しました。重要な部分という意味で勘違いされるかもしれない(あながち間違っていない?)ので、ある程度時間が経ったら黒文字にします。

ちなみに同じような勘違いをしている方は以下のブログがおすすめです!

「電子署名=『秘密鍵で暗号化』」という良くある誤解の話

 

あときっかけは以下のツイート。上のブログもその流れの紹介です。ありがたや(*´ω`)

 

参考資料