Signature

我們如何在 Solidity 中驗證 BGLS 聚合簽名?

  • September 24, 2018

EVXS

$$ 1 $$是 Boneh 等人的聚合簽名方案,它允許聚合來自 n 個不同簽名者的 n 個不同消息的簽名。我想要實現的是在智能合約中驗證此類簽名。 通過檢查相等性來驗證單個簽名(BLS 簽名)e(g1, σ) == e(v, h),其中:

  • e : G1 x G2 -> GT 是雙線性配對/映射
  • g1 是 G1 的生成器
  • σ 是簽名
  • v 是簽名者的公鑰
  • h 是簽名消息的雜湊值

使用拜占庭引入的新預編譯合約bn256Pairing(以及bn256Addand bn256ScalarMul),我們可以檢查相等性並驗證簽名。

問題:

現在,為了驗證聚合簽名,我們需要計算:

e(g1, σ) == product of e(vi, hi) for all signers i

其中 vi 和 hi 是簽名者 i 的公鑰和散列消息。

這似乎更加困難,因為我們必須在檢查相等性之前實際計算配對並將它們相乘。但是,預編譯的合約只允許檢查相等性。另外,我在 GitHub 上找到了一個實現(Project-Arda/bgls-on-evm

$$ 2 $$),但它似乎只能驗證單個簽名。 問題:

有人對如何在 Solidity 中驗證此聚合簽名有任何建議嗎?

注意:BGLS 最初與乙太坊支持的類型 3 配對不兼容,但該方案可以按照 Chatterjee 等人的建議進行修改。

$$ 3 $$. 參考:

更新(2018 年 7 月 8 日):

我如何在 Solidity 中驗證 BLS 和 BGLS 簽名的範例位於https://gist.github.com/BjornvdLaan/ca6dd4e3993e1ef392f363ec27fe74c4

我認為這實際上只是一個符號問題。在原始論文中,組是乘法編寫的,而乙太坊文件中的組是加法編寫的。

尤其,

e(g1, σ) = e(g1, x1*h1+x2*h2+...) = x1*e(g1,h1) + x2*e(g1,h2)+...+xn*e(g1,hn)

然後您可以簡單地使用 n 元配對檢查來進行檢查

e(-g1, σ, v1, h1, v2, h2, ..., vn, hn)

引用自:https://ethereum.stackexchange.com/questions/51421