Upgrade to Pro — share decks privately, control downloads, hide ads and more …

x-only Public Key

x-only Public Key

GBECの解説動画の資料です:
https://goblockchain.network/2021/09/x-only-public-key/

C403a9e0b7bfed4c94020220b5ab89f7?s=128

shigeyuki azuchi

September 08, 2021
Tweet

Transcript

  1. x-only Public Key


  2. 1 楕円曲線暗号の公開鍵
 【秘密鍵】
  secp256k1の場合、256 bitのランダム値
 
 【公開鍵】
  xを秘密鍵とした場合、楕円曲線のベースポイントGに対して
  P =

    xGを計算したPが公開鍵
 
 楕円曲線の点は、その(x, y)座標がy2 = x3 + ax + bを満たす
 (secp256k1の場合、 a = 0, b = 7、つまりy2 = x3 + 7)
 

  3. 2 公開鍵の表現方法
 公開鍵 P = xGの(x, y)座標の値はそれぞれ32バイト=合計64バイト
 
 • 非圧縮公開鍵:65バイト


    04 || x座標 || y座標
 • 圧縮公開鍵:33バイト
 x座標が分かると、y2 = x3 + ax + b (mod p)からy座標が計算できる
 ◦ y座標が偶数の場合
 02 || x座標
 ◦ y座標が奇数の場合
 03 || x座標
 
 Segwit v0まではデータスペースの観点から圧縮公開鍵の使用が主流

  4. 3 x-only Public Key とは?
 x座標のみで表現される公開鍵で、圧縮公開鍵より1バイト小さい
 TaprootやLN Offerなどで採用
 
 •

    x座標のみだと、y座標が偶奇どちらか特定できないんじゃ?
 
 
 y座標が偶数の鍵を使用する
 
 • P = xGのy座標が奇数の場合、秘密鍵はどうする?
 
 
 変換後の秘密鍵x’ = 曲線の位数n - x
 (n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 )