集約署名

2b122ebba5b1f20111a6e9b161787258?s=47 YH
September 20, 2019

 集約署名

Road to Devcon 4.0

2b122ebba5b1f20111a6e9b161787258?s=128

YH

September 20, 2019
Tweet

Transcript

  1. 2.

    • ペアリングの応用と実装研究 • https://github.com/herumi/bls ; BLS署名 • https://github.com/herumi/mcl ; ペアリング

    • Linux/Windows/Mac/Android/iPhone/WebAssembly対応 • used by DFINITY, libsnark, Harmony.one, 0CHAIN, ChainSafe, spacemesh, Prysmatic Labs Ethereum 2.0, AZTEC protocol, .etc. • https://github.com/herumi/xbyak ; JITアセンブラ • used by Intel MKL-DNN, etc. • 『クラウドを支えるこれからの暗号技術』 @herumi 2 / 12
  2. 3.

    • あるメッセージに対して自分しか知らない秘密鍵で署名を作る • だれもが知ってる公開鍵を使って(, )が改竄されていないことを検証できる • 秘密鍵を知らない人は検証をパスする偽の署名(′, ′)を偽造できない • はの暗号文ではない(通常は定数サイズ,

    は任意のサイズ) • 署名アルゴリズム • 鍵生成 • 安全性レベルを示すセキュリティパラメータを元に(, )を生成 • 署名 • メッセージとから署名を作成 • = , • 検証 • メッセージと署名とを元にtrue/falseを返す • , , = true/false 電子署名 3 / 12
  3. 4.

    • 一つのメッセージに対して複数人がそれぞれ署名する • 1 = 1 , , 2 =

    2 , , 3 = 3 , • それぞれの署名を一つずつ検証するのではなくまとめて検証したい • Pragmatic signature aggregation with BLS • https://ethresear.ch/t/pragmatic-signature-aggregation-with-bls/2105 • aggregate 1 , 2 , 3 → ? • 署名サイズの削減(数千個) • 検証時間の削減 • お父さん1 、お母さん2 、子ども3 に対してどれか2個の署名があれば有効としたい • 1 , 3 → ?, 2 , 3 → ? • -of- ; 人のうち人が署名すれば全体として有効 マルチシグ(multi-signature)・集約可能署名 4 / 12
  4. 5.

    • : 「足し算」ができる個の点からなる集合 • とりあえず中身はブラックボックスでよい • 0 ; 足し算におけるゼロを表す値(点) •

    ; 0以外の特定の点(固定しておく) • = 0, , 2, 3, … , − 1 • = 0 ; 倍したら0に戻る • 一方向性 • の整数倍を計算するのは容易 : , ↦ • とを知っていてもを求めるのは困難:(, ) ↦ • 楕円離散対数問題(ECDLP)の困難性 • が秘密鍵でが公開鍵のパターンが多い • secp256k1という曲線がよく使われる 楕円曲線 5 / 12
  5. 6.

    • 楕円曲線を2個使う • 1 = {0, , 2, … ,

    − 1 }, 2 = {0, , 2, … , − 1 } • 楕円曲線の2個の点からある集合 = {, 2, 3, … , −1}への写像で , = for , ∈ ℤ where = , を満たすもの • BN254, BLS12-381という曲線がよく使われる • BN254は100~110ビット安全性 • 従来128ビット安全と思われていたが攻撃改良により安全性が低下 • BLS12-381は128ビット安全なものとして設計される • BLS12-381のBLS(Barreto-Lynn-Scott)と BLS署名のBLS(Boneh–Lynn–Shacham)は別物なので注意 ペアリング 6 / 12
  6. 7.

    • 集約のナイーブなアイデア • 1 , 2 , … , ;

    各メンバー の秘密鍵 • 1 , 2 , … , ; の公開鍵 • 公開鍵を足す • ≔ 1 + 2 + ⋯ + = 1 + ⋯ + • これに対応する秘密鍵 ≔ 1 + ⋯ + はお互い誰も知らない • Rogue-key攻撃( が攻撃者とする) • 乱数を使って自分の公開鍵を ≔ − (1 + ⋯ + −1 )とする • 公開鍵を足すと = 1 + ⋯ + = ; はを知っている • 対策例 : PoP/KoSK(Proof of possesion/Knowledge of secret key) • 各 を各自の で署名させる • は に対応する秘密鍵( − 1 − 2 − ⋯ − −1 )は知らないので署名できない Rogue-key攻撃 7 / 12
  7. 8.

    • 楕円曲線ベース • Schnorr署名の派生バージョン • BCJ, MWLD, CoSi, MuSig1(MPSW18a),,... •

    ペアリングベース • BLS署名の派生バージョン いろいろな方式 8 / 12
  8. 10.

    • 前述の論文Table 1 • -out-of- multisig wallets • tx=1500, inp=3,

    n=3 • 今回はMSPを紹介 • 注 : ペアリングの計算は重たい(BLS12-381で0.75msec@core i7-8700) • スカラー倍算の20倍弱 サイズ比較 10 / 12
  9. 11.

    • 1 = ⟨⟩, 2 = ⟨⟩, : 1 ×

    2 → • 1 : → 1 • 鍵生成 • ; 秘密鍵, = ; 公開鍵 • 署名 • ; メッセージ, = Sign , ≔ 1 () • 検証 • Verify , , = true if , == (1 , ) BLS署名 11 / 12
  10. 12.

    • 鍵生成 • ; の秘密鍵, ; の公開鍵 • 集約 •

    ≔ , 1 , … , where : → ℤ • ≔ 1 1 + ⋯ + • input : { , } ; メッセージに対する の署名, ≔ 1 () • verify each ( , ) • ≔ 1 1 + ⋯ + • 検証 • Verify , , = true if , == (1 , ) ; original BLS署名の検証と同じ • = σ 1 () = σ 1 • LHS= σ 1 , = 1 , σ =RHS Multi-Signatures from pairings (MSP) 12 / 12