Wait a moment...

【NEM技術勉強会】3.2 署名と検証【Symbol白書】

nem100xem (5)
610
0
2020-01-27 12:52:20
【NEM技術勉強会】3.2 署名と検証【Symbol白書】

NEMを含むブロックチェーンで、よく出てくる「署名」という言葉。これも何度聞いてもよくわからなくなるものの一つです。ある文章やメッセージが正しいものであることを証明するという意味合いです。今日は、この点について掘り下げてみたいと思います。

署名化と暗号化はよく混同されます。暗号化は相手の公開鍵でメッセージを変換して、秘密鍵を持つその人にしか読めないようにすること。署名化は、自分の秘密鍵でメッセージを変換して、誰でも公開鍵を使って読めるけれども同じ署名化をすることはできないことです。つまり鍵を使い分けることで、2つのことが可能になるところが、ややこしいのです。


3.2 署名と検証

 

Mというメッセージ、秘密鍵k、公開鍵Aが与えられた時、下記の手順で署名を行うことができる:

まずは、署名の作り方を順番に見ていきましょう。

(4)は、秘密鍵のハッシュを取り2進数に変換(秘密鍵をそのまま使わずハッシュを使用する)

(5)は、(4)の半分の256ビットをメッセージの頭にくっつけて、さらにハッシュを取りrを求める。

(6)は、rの数だけ楕円曲線の上で原点Bを移動させる(rは秘密鍵を知らないと作れないため、Rは署名者だけが作れる数値(座標)になる)

(7)は、まず、R, A, Mを並べてハッシュを計算し、前回式(2)で作った秘密鍵のハッシュの残り256ビットaをかけ合わせる。さらにrを足して素数qの剰余を取る

うーん、なんのためにこんなことをするのかさっぱりです(笑)。

 

(RS)はメッセージMの、秘密鍵kによる署名である(つまりRとSが検証のためにメッセージM、公開鍵Aとともに公開される)。S < qかつS > 0でなければ、署名の混乱が起きるので、それ以外は無効である(qは楕円曲線を作る時に出てきた大きな素数で、群に含まれる要素数を表します。それを超えたり、負の値になってはなりません)。

 

(RS)が送信者によってメッセージMと公開鍵Aから作られたことを検証するためには、まずS < qかつS > 0であることをチェックしたあとに、以下の計算をする。

そして、

であることを検証すればよい。Sが式(7)によって計算されていれば、

となり、(8)が成り立つ。

 

ここは、前回に出てきた式も使って地道に変形していきます。式(7)にBをかけ合わせてSBを求めると、

と書けます。(6)からrB = R、前回の式(3)からaB = Aですから、

SB = R + H(R, A, M)aB = R + H(R, A, M)A

です。つまり(8)の上の式の右辺は、

SB - H(R, A, M)A = R + H(R, A, M)A - H(R, A, M)A = R

となり、公開された署名Rと等しくなります。


こうやって書くと、狐につままれたような感じがしますね。Symbolの場合は、送金アカウントの秘密鍵を使って署名が作られます。トランザクション内容から署名を作れるのは、送金者の秘密鍵だけです。他のノードは送金者の公開鍵を知っていますから、それが正しいということを検証できるわけです。NEMでは、ノード間通信がhttpプロトコールで行われ、トランザクションの内容は公開情報になります。なので、トランザクションの中には個人情報などは載せてはいけません。このあたり、暗号化と署名化を混同していると間違えやすいので注意しないとならない点ですね。

 

目指せ北海道

この記事を書いた人
趣味はバイクでツーリングしながら、ブログを書いたり、動画配信したりすること。 ラズパイをバイクに積載して、ボタン一つでYoutubeライブ配信できるシステムを作りました。それを発展させて、XEMの価格を常時監視、取引するボットも作って活用してます。子供の頃から技術書を読むのが好きなので、NEMの技術文書を訳したりもしています。 本業は再生医療研究者です。歯の神経の中にいる「歯髄(しずい)細胞」を活用して新しい医療を開拓するために、しずい細胞プロジェクトを推進中。細胞の流通(トレーサビリティー)管理にNEMを使おうと思ってmijin v.2を導入したんですが、コロナで実用化が全然進みません。管理システムの名称は「ShizuiNet」。