První dva známé exploity proti živým ZK obvodům se právě staly a nešlo o jemné, podomezené chyby. Byli to ověřovatelé Groth16, nasazení bez dokončení důvěryhodného ceremoniálu nastavení. Jeden byl zachráněn bílým kloboukem za ~1,5 milionu dolarů, druhý vyprázdněn za 5 ETH. 🧵
Oba protokoly používaly Circom + snarkjs, nejběžnější stack pro nasazení Groth16. Chyba? Přeskočili druhou fázi důvěryhodného nastavení: krok příspěvku specifický pro obvod. Bez něj jsou parametry γ a δ ověřovacího klíče nastaveny na stejnou hodnotu: generátory G2
Proč γ = δ všechno rozbije? Ověřování Groth16: e(-A, B) · e(α, β) · e(vk_x, γ) · e(C, δ) = 1 Když γ = δ, útočník může nastavit C = -vk_x pro zrušení obou členů, poté nastavit A = α, B = β zrušit zbytek. Rovnice se mění na 1 · 1 = 1. Svědek není potřeba.
Foom Protocol (~$1,4M) byl loterijní dApp na Base a Ethereum. Záchrana whitehatu @duha_real a další nezávislá whitehat vyčerpala smlouvy dříve, než to stihl zlomyslný aktér, přičemž zfalšované důkazy získaly 99,97–99,99 % tokenů.
Veil Protocol (~$5K) byl fork Tornado Cash na základně. Útočník vyčerpal celý fond v jedné transakci, 29 padělaných výběrů pomocí falešných neutralizátorů jako 0xdead0000, čímž získal plný zůstatek 2,9 ETH fondu.
To jsou snarkjs fungující podle návrhu. Když spustíte nastavení groth16, inicializuje γ a δ generátor G2 jako zástupný systém. Očekává se, že spustíte zkey a přispějete k náhodnému δ. Přeskočte tento krok a váš ověřovatel přijme jakýkoli důkaz.
Děsivé na tom bylo: nešlo o hlubokou kryptografickou chybu ani jemnou chybu v obvodu. Byla to chyba při nasazení: chyběl jeden příkaz CLI. A zůstal ve výrobě s reálnými prostředky v ohrožení.
Závěry: - Vždy kontrolujte skripty nasazení, nejen kód obvodů - Zkontrolujte své ověřovací klíče: pokud vk_gamma_2 == vk_delta_2, vaše důkazy jsou padělatelné - Spolupracovali jsme s @DedaubSecurity na prohledání EVM řetězců kvůli dalším postiženým kontraktům, žádné vysoce hodnotné nebyly nalezeny, ale některé existují
4,07K