BGLS [1] ist ein aggregiertes Signaturschema von Boneh et al., das die Aggregation von Signaturen auf n verschiedenen Nachrichten von n verschiedenen Unterzeichnern ermöglicht. Was ich erreichen möchte, ist, solche Signaturen in einem Smart Contract zu verifizieren.
Die Überprüfung einer einzelnen Signatur (einer BLS-Signatur) erfolgt durch Überprüfung der Gleichheit e(g1, σ) == e(v, h)
, wobei:
Mit dem neuen vorkompilierten Vertrag bn256Pairing
, der in Byzanz (und auch bn256Add
und bn256ScalarMul
) eingeführt wurde, können wir die Gleichheit überprüfen und die Signatur verifizieren.
Problem:
Um nun eine aggregierte Signatur zu verifizieren, müssen wir Folgendes berechnen:
e(g1, σ) == product of e(vi, hi) for all signers i
wobei vi und hi der öffentliche Schlüssel und die gehashte Nachricht des Unterzeichners i sind.
Dies scheint schwieriger zu sein, da wir die Paarungen tatsächlich berechnen und multiplizieren müssen, bevor wir die Gleichheit überprüfen. Der vorgefertigte Vertrag lässt jedoch nur eine Gleichheitsprüfung zu. Außerdem habe ich auf GitHub (Project-Arda/bgls-on-evm [2]) eine Implementierung gefunden, die aber anscheinend nur einzelne Signaturen verifizieren kann.
Frage:
Hat jemand einen Vorschlag, wie man diese aggregierte Signatur in Solidity verifizieren kann?
Hinweis: BGLS ist ursprünglich nicht mit den von Ethereum unterstützten Typ-3-Paarungen kompatibel, aber das Schema kann wie von Chatterjee et al. [3].
Verweise:
Aktualisierung (8. Juli 2018):
Ein Beispiel dafür, wie ich BLS- und BGLS-Signaturen in Solidity verifiziere, finden Sie unter https://gist.github.com/BjornvdLaan/ca6dd4e3993e1ef392f363ec27fe74c4
Ich denke, das ist eigentlich nur ein Notationsproblem. In der Originalarbeit sind die Gruppen multiplikativ geschrieben, während die Gruppen in den Ethereum-Dokumenten additiv geschrieben sind.
Insbesondere,
e(g1, σ) = e(g1, x1*h1+x2*h2+...) = x1*e(g1,h1) + x2*e(g1,h2)+...+xn*e(g1,hn)
Dann können Sie die Überprüfung einfach durchführen, indem Sie die n-fache Paarungsprüfung verwenden
e(-g1, σ, v1, h1, v2, h2, ..., vn, hn)
Saffie
Saffie
Mohammed
Let PG be a pairing group generator that on input $1^k$ outputs descriptions of multiplicative groups $G_1$ and $G_T$ of prime order $p$ where $|p| =k$. Let and let $g \in G_1^{*}$ and $G_{1}^{*}=G_{1} \backslash\{1\}$ .The generated groups are such that there exists an admissible bilinear map $e : G_1 × G_1 → G_T$, meaning that (1) for all $a, b ∈ Z_p$ it holds that $e(g^a,g^b )=e(g,g)^{ab}$ (2) $e(g,g)≠1$
Tjaden Hess
Saffie
Heba Möhsen