かんがえる、かがんでいる人

考えたことをまとめます。

?

仮想通貨における暗号の使い方の話

f:id:ton96O:20180729010732j:plain

仮想通貨における暗号の使われ方を書きます。
これは、自分の復習用のためであり、知識の整理のためです。
他にもっと良質の解説があると思います。

 

今回は署名に関して、です。

 

 ----------------(‘ω’ っ )3 

 

まずは暗号の簡単なおさらいをします。

暗号は何かを隠したいときに利用される約束事です。
とても簡単な例を出すと、文字をずらすという約束事です。
これに沿った具体例。IBMを一文字ずらすとHALになります。
「一文字ずらす」という約束事で暗号化したので、逆に、暗号化したものから元の形を求めることができます。
HALが暗号化された後の結果なので、一文字ずらし直して、IBMに戻すことができます。

 

暗号は、戦争で発達しました。
暗号に限らず、多くの技術・仕組みが戦争において発達しています。
私は戦争が良い事だとは思いませんが、戦争はそれだけ人類がコスト(時間・金・エネルギー)をかけた出来事です。
そこから学ぶべきことはたくさんあります。穏やかな事に利用することは可能なはずです。

本部が作戦を立てて実行部隊に指令を送ります。
大事な指令が敵に漏れてはいけません。指令を暗号にして送ります。
実行部隊は暗号を受け取って、元に戻して指令を読み取り、実行します。

午前五時に東に進め → ごぜんごじにひがしにすすめ → gozennijinihigashi... → fnydmg.....

として実行部隊に輸送。

途中で敵に盗まれても敵がわかるのは「fnydmg.....」なので指令はわかりません。

実際の戦争では指令が届かない場合に備えて受け取った確認をすると思います。が、それはおいておいて基本的な性質だけを確認させてください。

 

 ----------------(‘ω’ っ )3 

 

仮想通貨は、英語でクリプトカレンシー、暗号通貨です。
(バーチャルカレンシーと言われることもあります。デジタルアセット、と他のものと包括して言われることもあります。)
知見ある方は仮想通貨というより暗号通貨という呼称を好みます。これはその仕組み上、暗号化技術が使われているから、のようです。
(私は仮想通貨という名称が良く使われているので仮想通貨という名称を使います。)

では、暗号通貨である仮想通貨で、暗号はどのように使われているのでしょうか?

 

 ----------------(‘ω’ っ )3 

 

結論を言ってしまうと署名に使われます。

どういうことなのかを、説明します。
前述した暗号はとても簡単なものです。仮想通貨で使うには「もろ過ぎ」ます。
仮想通貨で使われる暗号技術はとても複雑であり、さらに「暗号化するもの」と「暗号化されたものを元に戻すもの」という一組のモノに分かれます。
前者を「暗号化システム」後者を「原文復号システム」と呼ぶことにします。
(色自体に意味はありません、見やすくするためだけにつけました)

 

一組のモノという点と分割されている点にご留意ください。
「原文復号システム」しか持っていない人は、暗号化ができません。
何でもかんでも暗号化されたものを元に戻せるかというとそんなことはなく、つがいの「暗号化システム」で暗号化されたものだけを元に戻すことができます。

 

上記の道具をどのように使えば署名ができるでしょうか?

 

ここで「署名」の意味を確認します。
「これをやったのは自分です」と対外的に示すことです。
「自分がやった」と自分だけが認識するだけでは不十分で、他人に「確かにあなたがやった」と認知されて初めて意味があります。

 

じゃぁ、先ほどの言葉を言い換えます。
上記の道具を使って、自分がやったことを証拠として残し、赤の他人に「これはあなたはやった」と納得させるにはどうしたらいいでしょうか?

 

 ----------------(‘ω’ っ )3 

 

ここでも現状の仕組みを先に書いて、その説明をするという流れを取ります。


1)「私」が原文を「暗号化システム」を用いて暗号化します。
2)原文作られた暗号「原文復号システム」を公開します。
 (「暗号化システム」は公開されていないことに注意してください)
3)他人は、公開された暗号を公開された「原文復号システム」で原文に直します。
  原文それ自体も公開されていますので、「原文そのもの」と「暗号から復活した原文」を答え合わせができます。
4)「原文復号システム」はそれとつがいの「暗号化システム」に対するものです。
  「原文=復活した原文」であることが確認できれば、それは「原文などを公開した人=原文の暗号化を行った人」だと確認したのと同義です。

 

なので、「私」が「原文と作られた暗号と「原文復号システム」を公開することが署名をしたといえるのですね。
(公開が署名というとおかしな感じがしますが、この記事内では署名とは他人が確認できることを念頭に置いています。なので公開するまでが署名をすること、です。)

 

抽象的な言い方だとイメージがわきずらいので、具体的に考えます。
1)私が、「おでん」という言葉を暗号化しました。「0a0s0d9f9g9h8j8k」という文字列が得られました
2)私が、「おでん」と「0a0s0d9f9g9h8j8k」と私の「原文復号システム」を公開します
3)「私が「おでん」を「0a0s0d9f9g9h8j8k」に変換できるのか」を確かめたい人が、公開されている道具を使います。
  「原文復号システム」に「0a0s0d9f9g9h8j8k」をいう暗号を投入します。
 原文として公開された「おでん」 = 「原文復号システム」で原文に直された結果としての「おでん」
 となれば、「0a0s0d9f9g9h8j8k」は、公開された「原文復号システム」と対になる「暗号化システム」で「おでん」(=公開された原文)を暗号化した文字列である、と言えます。
 逆に言えば、公開された「原文復号システム」「暗号化システム」と対になったものでなければ、「0a0s0d9f9g9h8j8k」は「おでん」に変換されないのです。
 私は、私の「暗号化システム」公開せずに「公開した暗号を暗号化したのが自分である」ことを証明できました。

 

長いですが、何とかイメージしていただけましたでしょうか?

 

どうやら、私は私の「暗号化システム」を公開したくないようです。
逆に、原文と、作られた暗号と、「原文復号システム」は公開してもよさそうです。
これはなぜでしょう?


 ----------------(‘ω’ っ )3 

 

ここで、現状の仮想通貨において、上記それぞれの要素が何に当たるかを説明します。
暗号と暗号を署名として使う事の説明から、仮想通貨における暗号署名の使われ方の説明に立ち位置を移します。

 

「暗号化システム」は仮想通貨の世界では秘密鍵と言われます。
 とてもよく出てくる言葉で、「他の人に教えちゃいけないんだよね」と理解されている方がほとんどだと思います。

原文は仮想通貨の世界では取引データです。
 「私がAさんに1BTC送付します。」←これです。

「原文復号システム」は仮想通貨の世界では公開鍵と言われます。

 

「私がAさんに1BTC送付します。」というデータと公開鍵がトランザクションに乗ります。なので、トランザクションデータを得た者はそのデータが真正のものであるかどうかを検証できます。

ここで真正のものというのは、取引データ作成者が秘密鍵の持ち主と同一であるという事です。
検証者は取引データと、公開鍵で復号されたデータが同一であることをもって上記を納得するのでした。
公開鍵で復号される取引データと同じ内容を作り暗号化できるのは秘密鍵の持ち主だけなのです。
だから、秘密鍵は他の人に漏らしてはいけません。
他の人に秘密鍵を教えてしまい、おかしな取引データを作られても、検証する人にとってはあなたが作った取引データとしか認識できないからです。
(野暮ですが補足です。実際上は秘密鍵を持った人が作ったトランザクションであるか?が確認されます。しかし、我々にとっては、どういうデータとして検証されるかではなく、自分の秘密鍵を持った他人が作ったデータがどう扱われるかが重要なので上記の表現になっています。)

 

いかがでしょうか?

暗号それ自体は、約束事を知らない人に見られても内容がわからない形にし、約束事を知っている人同士で情報のやり取りをできるようにするものでした。

その仕組みを応用し、署名という仕組みを使えるようにしました。

その署名が仮想通貨の世界では使われています。

?