Bitcoinで使われる楕円曲線の鍵について、bitcoin-rubyを使って鍵交換(ECDH)と楕円曲線の加算をしてみる。 鍵共有(ECDH) アリスとボブが持つ鍵を使って共通鍵を生成してみる。 アリスとボブはそれぞれお互いの公開鍵を知っており、秘密鍵をそれぞれa、b、楕円曲線のベースポイントPとすると、 アリスの公開鍵は、 Q(a) = a*P ボブの公開鍵は Q(b) = b*P となる。 この前提でアリスとボブがお互いに相手の公開鍵を自分の秘密鍵を使ってスカラー倍算する。 アリスは a * Q(b) = ab*P ボブは、 b * Q(a) = ba*P 楕円曲線上でab*P=ba*Pとなるため、お互いが計算した値は同じ点を指す。この時アリスはaをボブはbを相手に公開していないので、安全に共通鍵を生成できる。 この楕円曲線を使ったDH鍵共有をbitcoin-rubyを使って書くと↓