Podpisy BLS jsou všude, od konsensu Ethereum až po EigenLayer. Je však snadné je použít špatně. Co jsou podpisy BLS? Promluvme si o správném a špatném způsobu jejich použití:
Nejprve se ale zeptejte, co jsou to BLS podpisy? Podpisy BLS jsou kryptografické primitivum používané pro podepisování zpráv, jako je ECDSA. Zde je návod, jak matematika funguje. Je postaven na párování eliptických křivek. Čím jsou ale tak výjimečné? Proč používat tyto efektní páry?
Zabijácká funkce BLS: agregace podpisů. Mnoho BLS podpisů můžete sloučit do jednoho podpisu. To vám umožní přenášet a kontrolovat N podpisů najednou, což je prostorově a časově efektivnější! A v řetězci jsou optimalizace nesmírně důležité pro úsporu plynu.
Chcete-li se podrobně podívat na to, jak fungují podpisy BLS spolu s procesem vytváření agregace a vícenásobných podpisů, podívejte se na celý příspěvek na blogu, na který odkazujeme na konci tohoto vlákna! Nyní se podívejme, jak se mohou podpisy BLS pokazit a jak je EigenLayer používá (správně, aby se vyhnul těmto nástrahám)!
EigenLayer je vrstva pro sázení Etherea. V EigenLayer AVS validátoři podepisují výsledky svých validačních výpočtů. Agregátor shromažďuje všechny tyto podpisy a odesílá je do řetězce. Agregované podpisy se ověřují v řetězci.
Úloha obsahuje číslo bloku při vytvoření úlohy a prahovou hodnotu označující procento ověření operátora, které je nezbytné pro ověření úlohy. Operátoři, kteří se přihlásili do AVS, mohou tyto úlohy získat pro výpočet odpovědi na úlohu a operátor pak může odeslat odpověď se svým podpisem BLS úlohy do agregátoru. Jakmile je dosaženo prahu shodných odpovědí, agregátor sloučí všechny BLS podpisy do unikátního agregovaného podpisu a odešle jej zpět do kontraktu AVS. Kontrakt ověřuje, zda je podpis správný, a otevírá náročné období, kdy vyzyvatel může prokázat, že ověření bylo nesprávné, a pokud ano, špatně se chovající operátoři jsou ořezáni.
Ve smlouvě probíhá ověření ve funkci 'trySignatureAndApkVerification':
Pokud jsou však vícenásobné podpisy použity nesprávně, přicházejí s vážným problémem zvaným útoky nepoctivými klíči. Řekněme, že poctivý uživatel má veřejný klíč, 'pk_0'. Útočník, který již dříve viděl "pk_0", si může zvolit svůj veřejný klíč jako pk_1 = sk_1⋅G_1—pk_0. Útočník by nepoznal soukromý klíč spojený s veřejným klíčem. Ověření více podpisů by však poskytlo následující:
K podepsání zprávy, jejímž výsledkem je platný vícenásobný podpis, je potřeba pouze "sk_1", i když ji první uživatel nemusel podepsat. To lze snadno zobecnit na jakékoli číslo 'r' poctivých uživatelů výběrem škodlivého klíče, kterým je:
Jedná se o nebezpečnou hrozbu, protože v našem předchozím příkladu AVS by škodlivý agregátor, který by dříve zaregistroval škodlivý klíč, mohl odesílat agregované podpisy, které nebyly podepsány validátory, ale přesto byly smlouvou akceptovány. To by vedlo k osekání validátorů, i když se nechovaly špatně.
Aby se zabránilo útoku pomocí podvodného klíče, je běžnou metodou požádat uživatele, aby prokázali, že vědí, že soukromý klíč odpovídá jejich veřejnému klíči, což je známé jako důkaz o vlastnictví. V prvním kroku registrace je tedy uživatel požádán, aby zaregistroval svůj veřejný klíč spolu s dokladem o vlastnictví π tak, aby:
V podstatě je uživatel požádán, aby podepsal svůj veřejný klíč nebo jakoukoli jinou identifikační zprávu. V AVS je zpráva adresou operátora. Ve smlouvě EigenLayer je důkaz vlastnictví ověřován funkcí 'registerBLSPublicKey':
Funkce "pubkeyRegistrationMessageHash" se používá k hashování vlastního oddělovače domén "PUBKEY_REGISTRATION_TYPEHASH" a adresy operátora.
Po registraci je veřejný klíč přidán do kontraktu. Jeho hodnotu můžeme ověřit voláním funkce 'getRegisteredPubkey'. Zde je příklad veřejného klíče BLS registrovaného pro EigenDA AVS:
Důkaz o vlastnictví je v podstatě podpis BLS. Nedoporučuje se však používat vícenásobné podpisy během kroku důkazu vlastnictví, například k registraci více veřejných klíčů pro jednoho účastníka. Pokud ano, účastník by dosáhl útoku rozdělující nuly. V tomto případě by účastník mohl zaregistrovat klíče, které by se po sečtení vyrušily a mohly by obejít důkaz o vlastnictví.
Viděli jsme, že BLS multi-signatures nabízí významnou příležitost k optimalizaci. Implementace EigenLayer demonstruje sílu podpisů BLS a také zdůrazňuje složitost jejich praktického nasazení. Vícenásobné podpisy však představují bezpečnostní rizika, jako jsou útoky pomocí nepoctivých klíčů, které vyžadují ochranná opatření, jako je důkaz o vlastnictví. Ale s upgradem Pectra podporujícím BLS12-381 se můžeme dočkat další implementace a vylepšení v Solidity, a proto doufáme, že tento příspěvek pomůže vyhnout se známým implementačním chybám a zranitelnostem.
Chcete-li se hlouběji ponořit do podpisů BLS, vytváření agregace a více podpisů, podívejte se na náš nedávno publikovaný příspěvek na blogu níže:
64,17K