Tweet前回は、暗号の記事を書きました。第三者に見られたくないメッセージを、ワケのわからない数字に変えてしまう、これが暗号化でしたね。この種類の鍵を使うと、暗号化とは全く別の用途である、「電子データへの署名」を行うことができます。今回は、これをご紹介します。何か紙に書かれた文書があったとき、それに自分の名前を書き込むことを署名と言いますよね。署名をすれば、署名した人は、その契約内容に同意したことになります。署名された契約書を受け取った人は、「あぁ、これは、あの人の字だな」と言って、その文書が、確かに本人によって署名されたことを確認します。筆跡鑑定をすれば、確認が取れますね。筆跡だけで本人確認するのが不安なら、名前の隣に印鑑も押してやれば、さらに確実になります。加えて、紙に書かれた文書は、改ざんするのがとても大変。消しゴムで消せないように、文字はインクで書かれてるでしょうし、修正液なんか使ったら一発でバレます。紙の文書における「署名」て、1確かに、本人が名前を書いたものだと確認できる2改ざんされづらいという二つの長所があるんですよね。ファイルで作成して、それをメールでやり取りすれば、ペーパーレスを実現できますね。自分の名前をキーボードで打ち込むことで、電子データ上に名前を記入できますが、それでは本人の筆跡の「クセ」が現れませんから、文書を受け取った人は、それが本当に本人が署名したものなのか、確認できません。`修正液の跡'なんて残りませんから、改ざんも簡単です。紙と違って、電子データへの「署名」て難しそう。ところが!秘密鍵、公開鍵を使うことで、電子データへの署名(=電子署名)を成立させることができます。送信の過程で、第三者によって改ざんされていないことを確かめることができるんです。基本的な考え方としては、秘密鍵を使って、「その秘密鍵の所有者にしか作れない印鑑」を作り出し、それをデータに押すことで、本人確認ができるようにしよう、というものです。詳しく見ていきましょう。前回と同様、「エルガマル暗号」と呼ばれる暗号を簡略化したものを例にとって、電子署名の原理を見てみましょう。一人一人に発行される秘密の数字のことでした。自分以外の誰にも知られてはいけません。次に、ある数字をみんなで予め決めておきます。ここでは簡単のため、3としておきましょう。四人は、「3の(自分の秘密鍵の数字)乗」を計算して、みんなに公開します。公開する数字のことを、公開鍵と呼びました。ここまでは前回と一緒です。名前の通りです!今回は、「ハッシュ値(はっしゅち)」というのを使います。「ハッシュ」は、英語で『ごたまぜ』とか、『めちゃくちゃ』という意味があります。く複雑な方法で、数字に変換した値のことです。こちらのサイトで簡単に具体例を確かめることができますよ。いう数字が出てきます。アルファベットが入ってて数字っぽくないですが、これは16進法を採用しているため。れっきとした数字です。『B860CD2907B289DA3E6AAB88BE162EF6BA3048DA12E88E331B21C4FD7E8F75AA』というハッシュ値に変換されました。『ねむろぐ』を『ねむるぐ』とちょっと変えて、ハッシュ値を出してみましょう。25E215514A8472D7B10E7966193C87211C97EB5C4078275634A471F93C7B84F5↑のように、一文字変えただけで、ハッシュ値は全く違うものになってしまいます。これはハッシュ値の特徴の一つです。元の文章を、ちょっとでも改ざんしようものなら、とたんに全く違う数字になってしまうハッシュ値。文書を改ざんしようとする悪い人間からしたら、暴れ馬のように厄介なものになります。ひとたび文章をハッシュ値に変えてしまうと、元の文章を知らない人が、ハッシュ値から元の文書を逆算するのは不可能です。これもハッシュ値の特徴です。※ハッシュ値にもいろいろ種類がありますが、今回は「SHA256ハッシュ」という名前のものを例にとります。電子署名の作法Aさん(本名アリス)が電子化された契約書に署名をし、Bさんにそれを確認してもらう状況を考えましょう。アリス」というものだったとしましょう。この文章のハッシュ値を計算すると、BED6D6F88198374AF8F243F075B4AE1371819ACA9293BFE4E9BD410424925664となります。いう数字だったとしちゃいます。2039だったとします。この二つの数字のペアが、印鑑の役割を果たします。電子データに貼り付け、Bさんに送る。場合と違って、文書は第三者に見られてもよいものを想定しています。「文書を改ざんされないようにする」のが目的。上図のように、文書の内容は剥き出しでそのまま送っちゃいます。いった小さい数字を使っていますが、本来はもっともっと巨大な数字を使います。逆算されないようになっています。計算できるわけですね。みんなに公開されていて、誰でも見られるようになっているのでした。1、2の数字は送られてきた文書に貼り付けられているので、Bさんは(II)も計算できます。・なおかつ文書が第三者によって改ざんされていない場合のみ、(I)=(II)という等式が成立するようになっているんです(上図でも(I)=(II)となっている)。使って印鑑を作ることができるのは、19という数字を知っているAさんただ一人。(I)=(II)が成り立つということは、Aさん本人が署名したことの証明になります。(I)=(II)が成り立つことを確かめることで、「Aさん本人が文書に署名したこと」、そして、「文書が改ざんされていないこと」を同時に確認する。※厳密にいうと、秘密鍵が正しくなかったり、改ざんがなされていたとしても、(I)=(II)が成り立つことはあるんですが、それはとてもとても低い確率で、ほぼ起こらないと考えてよいということです。(I)=(II)のからくり前回も扱った指数法則を使います。作られていたことを思い出しましょう。4と作られていました。ここで指数法則を使います。キャンセルされてと、計算されます。指数法則を使うととなって、(I)と一致するわけですね。使って数字2が計算されており、なおかつ文書も改ざんされていなければ、(I)=(II)となるのです。使って数字2が計算されていると、と、途中式が変わってしまいます。計算結果も変わってしまうワケですね。なりすまして、テキトーな秘密鍵を使って印鑑を作ると、(II)の計算結果が変わってしまい、(I)=(II)が成り立たなくなってしまうんです。違うものになってしまいます。値も、全く違うものになってしまいます。計算結果が変わってしまい、(I)=(II)が成り立たなくなってしまうのです。サトシ・ナカモトがやりたかったことサトシ・ナカモトの論文によると、ビットコインというのは、電子署名の連続です。最後にそれについて触れておきます。※(自分の理解が曖昧なところがあるので、正しくない部分があったらご指摘ください。)※(原論文では、「この暗号・署名システムを使う!」と特定のものが宣言されているわけではありません。今回ご紹介しているのは、現実でビットコインで使われている電子署名システムとは異なるものですが、イメージを掴むのに役立てていただければと思います。受け取ったBさんが、Cさんにコインを送って。Cさんが、Dさんにコインを送って。・不正送金が行われていないか?というのが心配になります。そこで、今回の電子署名を考えてみましょう。送り手の秘密鍵の数字、の二つでしたね。(ii)から、印鑑(=数字のペア(81,125))を作り出しました。送り手であるBさんの秘密鍵の数字、の二つを使って`印鑑'を作り出します。従うと、以下のような感じです:この印鑑をコインに貼り付け、Cさんに送ります。行うことで、「確かにコインがBさんからコインが送られたこと」を確認できます。上の例では、「直前の、AさんとBさんの取引」のハッシュ値が使われているため、検証によって、AさんとBさんの取引が改ざんされていないこと、まで証明されます。コインを受け取った人が、他の誰かに送金する度に印鑑を押しますので、コインには次から次へと印鑑が押印された記録が残っていくわけですね。なりすましてCさんにコインを送ったことにする、ということができなくなります。簡単にできてしまうんだそうです。1Xemだけ消費して、十人に1Xemずつ投げネムするようなもんです。いうのをコインの二重使用と言います。「BさんがCさんだけにしかコインを送っていない」ことは証明できないんです。サトシ・ナカモトの論文が提案すること。「ブロックチェーン」という技術を使うことで、二重使用も防げるようになるんだ、ということです。今回ご紹介した電子署名の足りない部分をカバーするのが、ブロックチェーンなんですね。暗号理論を勉強したおかげで、やっと、サトシ・ナカモトの論文のスタートラインに立てた気がします。どんなふうに二重使用を防ぐのか。しながら、論文の続きを読み進めてみたいと思います。)...数式.../(^o^)\またA.Bが...謎解きしたあとだから頭がーごちゃんこーこんな感じだけど、経験積んできまーす。今回の記事では、論文の「2.取引」の部分を紹介した感じです。ファイルが検索されたり、わかりやすい解説本が見つかったりするんですよね。「あぁ、あの授業で先生が言ってたのはこういうことだったのか!」て良い復習になったりします。03:48:02ID:144693>>やってみよう::さん最近、何でもかんでも数学系の授業でやった気がになってもっとちゃんと勉強してたらなぁと後悔中です。いつも、わかりやすい解説記事ありがとうございます。数学ってこういうところでも使われるんだなぁと、僕自身勉強になりました。articleやってみよう「やってみよう」は、プログラマであるタノウエと、数学を勉強しているカナクボが、共同で管理しているアカウントです。知識や数学の話題を、随時投稿していく予定です。4AWSでサーバー建てるチャレンジ参加しました。