2017/07/19

[勉]ECDHのshared secret

FPGAのことばかりやっているように見えるが、実はほとんどやっていない。
やりかけの作業があると、あまり集中できなくてね。


そのやりかけの作業が、ECDHだ。
楕円曲線ディフィー・ヘルマン鍵共有 - Wikipedia
なんか、字面だけで威圧感を与えられるし、説明文も読んでいて訳がわからんごとなってくる。

が、実装だけで言えば、秘密鍵を作り、楕円曲線の公開鍵を作り、その公開鍵をお互いが交換して、自分の秘密鍵ともらった公開鍵を乗算したものを共有鍵とする、というだけのことだ。


ネットで見ても、本で読んでも、そこまでは説明してある。
が、だ。
秘密鍵は、値だ。
公開鍵は、楕円曲線上の座標だ。
両者を乗算すると、楕円曲線空間での乗算ルールに従って計算される。
その結果は、楕円曲線上の座標になる。


それでは困るのだ。
秘密鍵は、単なる鍵なので、座標なんかで表されると計算に使えない。
なんらかの数値に変換して欲しいのだ。

Wikipediaでは、

ECDHを元にしたほとんどの規格化プロトコルでは、この秘密を元に、ハッシュ関数などを利用して共通鍵を生成する。

と、曖昧に書かれている。
曖昧というか、得られた座標から共有鍵を生成する方法に規定はないということを言っているのだ。


ちなみに、私がよく使うmbedTLSでは、単にX座標を使うようになっていた。
https://github.com/ARMmbed/mbedtls/blob/development/library/ecdh.c#L77

だが、このやり方がすべてというわけではなく、それ以外もありうるので、実装する人は注意しよう。

ああ、仕様をよく確認して注意するのがよいさ、私のように数時間悩まないようにね。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。