Chainlink VRF: casualità verificabile On-Chain
Fonte Originale: https://blog.chain.link/verifiable-random-functions-vrf-random-number-generation-rng-feature/
Siamo entusiasti di annunciare Chainlink VRF, che utilizza funzioni casuali provabili per generare casualità verificabile on-chain. Vediamo molti grandi contratti intelligenti che beneficiano di Chainlink VRF, in particolare quelli che vorrebbero fornire la prova che stanno effettivamente utilizzando una fonte di casualità a prova di manomissione al di fuori del loro controllo.
Vorremmo ringraziare i nostri collaboratori accademici, la più ampia comunità di sviluppatori che ci ha fornito feedback su Chainlink VRF e i numerosi membri del team che hanno messo i loro sforzi per rendere questa implementazione iniziale una realtà funzionante, grazie.
Chainlink VRF aiuta ad abilitare e accelerare lo sviluppo di contratti intelligenti incentrati su giochi blockchain, sicurezza, protocolli di livello due e tanti altri casi d’uso. Gli sviluppatori possono integrare facilmente Chainlink VRF per utilizzare la casualità verificabile nei loro contratti intelligenti attraverso la nostra documentazione per sviluppatori rilasciata di recente .
La necessità di avere una casualità verificabile
È necessaria una mentalità sensibile alla sicurezza per creare e difendere con successo un contratto intelligente contro gli avversari che cercano di rubare i fondi detenuti da quel contratto. Gli sviluppatori di contratti intelligenti che utilizzano la casualità come input chiave dovrebbero anche vedere la manipolazione di tale casualità come un rischio critico. Sistemi ben fatti che si basano sulla casualità vorrebbero idealmente che fosse sia provabile in modo equo/ugualmente incerto per tutti i partecipanti al contratto, riducendo anche con successo il rischio che un avversario possa sfruttare il proprio contratto prevedendone i risultati.
Chainlink VRF cerca di soddisfare entrambi questi requisiti fornendo la sua casualità insieme a prove crittografiche che possono essere verificate sulla catena, dimostrando che la casualità è davvero imprevedibile. A causa della natura verificabile on-chain della casualità di Chainlink VRF, i nodi partecipanti possono solo trattenere una richiesta, per la quale sarebbero penalizzati finanziariamente utilizzando le imminenti capacità di staking di Chainlink, e possibilmente rimossi da query future che avrebbero pagato commissioni per la loro casualità.
Utilizzando Chainlink VRF, puoi creare contratti intelligenti affidabili per tutte le applicazioni che richiedono risultati imprevedibili per:
- Rendere i giochi più affidabili utilizzando una fonte di casualità verificabile in catena, consentendo agli sviluppatori di fornire ulteriori prove agli utenti sensibili alla sicurezza.
- Rendere i giochi più divertenti generando scenari e ambienti impegnativi e imprevedibili e assegnando ricompense imprevedibili ai giocatori come bottini.
- Generare assegnazioni casuali di compiti e risorse, ad esempio assegnando in modo casuale giudici ai casi o revisori alle aziende sottoposte a controllo.
- Scegliere un campione rappresentativo di osservatori idonei alla votazione su una proposta per la quale il contratto deve stabilire un consenso (i sondaggi sono un modo efficiente per fornire ulteriore resistenza a Sybil).
Limitazioni di sicurezza dei metodi esistenti
Le soluzioni esistenti per fornire casualità ai contratti intelligenti hanno limitazioni che vengono superate dalla casualità verificabile di Chainlink VRF. Sia l’uso di dati esistenti on-chain come un blockhash, sia varie casualità off-chain che devono essere poi collocate on-chain , presentano la propria serie di sfide uniche.
Un esempio di un exploit che gli sviluppatori di contratti intelligenti che cercano di fare affidamento su una blockchain per la casualità dovrebbero cercare di evitare è fare eccessivo affidamento sulle garanzie di casualità basate su blockhash. Ad esempio, supponiamo che un contratto prenda decisioni in base alla parità dell’ultimo bit nell’hash del blocco a una certa altezza. Sembra un risultato 50/50, ma considera che un miner (o una coalizione di miner) che produce in media un terzo dei blocchi, può decidere di buttare via i blocchi vincenti per i quali l’ultimo bit del blockhash è uno, rinunciando al blocco ricompensa di circa 2–3 ETH. In questo caso, il miner potrebbe falsare il risultato zero da una probabilità affidabile del 50% a una probabilità di 2/3, portando alla perdita di fondi degli utenti da qualsiasi contratto intelligente che si basa su questo metodo di generazione della casualità.
Nel tentativo di evitare problemi come questi, gli sviluppatori di contratti intelligenti si rivolgono già a soluzioni off-chain, in cui un numero casuale viene generato off-chain e portato on-chain. Tuttavia, senza la verifica crittografica che il valore fuori catena sia imparziale, c’è un’opportunità per il risultato di essere manipolato dal fornitore fuori catena e/o dal livello di trasporto dati che mette quel valore casuale sulla catena. Allo stesso modo, gli utenti dell’applicazione sono costretti a presumere che la casualità sia prodotta in modo equo e sia stata portata in catena senza essere modificata durante il percorso verso l’applicazione.
Ulteriori compromessi chiave e rischi per la sicurezza che riteniamo che gli sviluppatori di contratti intelligenti che considerano una fonte di casualità per il contratto intelligente dovrebbero cercare di evitare includono quanto segue:
- Inaccessibilità o incompatibilità con gli smart contract
- Manipolazione da parte dell’operatore centralizzato del generatore di numeri casuali
- Sfruttamento da parte dei minatori di una blockchain come uno degli utenti dell’applicazione
- Requisiti di attendibilità irragionevolmente elevati da parte degli utenti finali dell’applicazione
Per aiutare ad affrontare questi e altri rischi indesiderati per la sicurezza, Chainlink VRF offre trasparenza e prove crittografiche che ogni risultato è generato in modo equo.
Come funziona Chainlink VRF
In breve, un contratto intelligente richiede casualità fornendo un seme a Chainlink. Il seme, che dovrebbe essere imprevedibile per gli oracoli a cui viene fornito, viene utilizzato per generare un numero casuale, che viene quindi inviato al contratto on-chain. Ogni oracolo utilizza la propria chiave segreta quando genera casualità. Quando il risultato viene pubblicato on-chain insieme a una prova, viene verificato utilizzando la chiave pubblica dell’oracolo e il seme dell’applicazione. Basandosi sulle funzionalità di firma e verifica delle prove ampiamente accettate di una blockchain, è consentito ai contratti di consumare solo la casualità che è stata verificata anche dallo stesso ambiente on-chain che esegue il contratto stesso.
Il vantaggio fondamentale dell’utilizzo di Chainlink VRF è la sua casualità verificabile. Anche se un nodo è compromesso, non può manipolare e/o fornire risposte distorte: la prova crittografica su catena fallirebbe. Lo scenario peggiore è che il nodo compromesso non restituisca una risposta a una richiesta, che sarà immediatamente e per sempre visibile sulla blockchain. Gli utenti non farebbero più affidamento su nodi che smettono di rispondere e / o non forniscono alla casualità una prova valida. Anche nell’improbabile scenario in cui un nodo è compromesso, la sua casualità risultante non può essere manipolata. I nodi compromessi possono solo trattenere una richiesta, senza dare risposta, per la quale sarebbero penalizzati finanziariamente utilizzando le imminenti funzionalità di staking di Chainlink e rimossi da query future che avrebbero pagato commissioni per la loro casualità, creando una sostanziale perdita economica immediata ea lungo termine per gli operatori di nodi di bassa qualità e/o che si comportano male. In breve, Chainlink VRF non può manipolare un’applicazione che lo utilizza correttamente; può solo andare offline o trattenere un singolo risultato prima di essere rimosso come fonte di qualsiasi casualità futura. Ciò crea maggiore sicurezza per gli sviluppatori di contratti intelligenti e per i loro utenti.
Un ulteriore vantaggio di Chainlink VRF è che, man mano che più utenti lo utilizzano, le tariffe degli utenti pagate agli operatori di nodo aumentano, creando un incentivo per gli operatori di nodo a fornire quante più garanzie di sicurezza possibile. La sicurezza criptoeconomica attraverso lo staking sarà probabilmente qualcosa che gli utenti chiederanno di aumentare nel tempo e giustificare con le loro commissioni sempre più elevate, che pagano per una sicurezza aggiuntiva. Ciò porta a una risorsa globale condivisa che è supportata dalle tariffe degli utenti e consente agli utenti aggiuntivi che avrebbero speso fondi per realizzare la propria soluzione RNG di distribuire quegli stessi fondi per aumentare la sicurezza collettiva di una risorsa condivisa per l’intero ecosistema blockchain. La capacità di Chainlink di supportare varie catene, come Polkadot , Tezos e molti altri, significa che l’universo degli utenti che pagano per questa risorsa della comunità continuerà a crescere in un effetto di rete tra l’utenza e le garanzie di sicurezza criptoeconomiche in progressivo aumento.
Esempio di integrazione: PoolTogether
PoolTogether , il gioco di risparmio senza perdite su Ethereum, è qualcosa che troviamo davvero eccitante e siamo entusiasti del fatto che, dopo un’estesa ricerca tecnica da parte del loro team, utilizzeranno Chainlink VRF per fornire garanzie ai loro utenti sulla comprovata casualità del loro applicazione.
PoolTogether è un gioco di risparmio senza perdite che raggruppa i depositi degli utenti e distribuisce gli interessi guadagnati sul pool a un vincitore selezionato a caso in estrazioni giornaliere e settimanali. Il gioco incentiva il risparmio attraverso una meccanica della lotteria.
Implementando la casualità verificabile di Chainlink VRF, gli utenti di PoolTogether potranno verificare che ogni vincitore sia selezionato con una fonte imparziale di casualità. Oltre ad essere più sicuro della propria sicurezza, PoolTogether sarà anche in grado di dimostrare ai propri utenti che una parte fondamentale della loro architettura funziona in modo sicuro e verificabile in modo casuale, fornendo agli utenti maggiori motivi per credere che PoolTogether fornirà effettivamente un pagamento a loro se diventano un partecipante al loro contratto intelligente.
Guida tecnica
Chainlink VRF è un’implementazione della Verifiable Random Function (VRF) di Goldberg come descritto in questo documento. Il “casuale” in “funzione casuale verificabile” significa “completamente imprevedibile (distribuito uniformemente) a chiunque non conosca il seme o la chiave segreta”.
La chiave segreta VRF è un numero che l’oracolo sceglie dalla distribuzione uniforme su {0,…, # secp256k1–1}, in modo crittograficamente sicuro. (secp256k1 è la curva ellittica usata dalla crittografia di Ethereum.) Associata a questa chiave segreta c’è una chiave pubblica, che viene utilizzata per identificare l’oracolo. L’oracolo registra la chiave pubblica con il meccanismo della catena, insieme all’ID del lavoro a catena a cui risponderà.
Quando un contratto consumante fa una richiesta di casualità, fornisce un seme. Per garantire che l’output VRF sia difficile da prevedere, è bene incorporare valori imprevedibili e difficili da manipolare nel seme, come il blockhash più recente, e forse dati del mondo reale attestati crittograficamente come il prezzo più recente di alcune risorse . È possibile combinarli in un byte32 da utilizzare come input seme utilizzando keccak256. Il meccanismo VRF on-chain fornisce una protezione di base mescolando il seme fornito dal consumatore con altri dati per prevenire attacchi di replay, ma è essenziale fornire anche il proprio.
Una volta che il macchinario sulla catena ha determinato il seme, trasmette un registro ethereum che richiede l’output VRF corrispondente dall’oracolo specificato nella richiesta del consumatore. Su vedendo questo registro , l’oracolo costruisce l’output come segue:
In primo luogo, “ esegue l’hashing dell’input sulla curva “, ottenendo un campione casuale e crittograficamente sicuro da secp256k1, utilizzando il seed e la chiave pubblica dell’oracolo come input. Lo fa eseguendo l’ hashing ricorsivamente degli input utilizzando keccak256 fino a quando l’output è inferiore all’ordine del campo base di secp256k1 (“ p “ nella descrizione di secp256k1 ), ed è l’ordinata x di un punto (x, y) su secp256k1 (cioè, y2=x3+7 nel campo base). (x, y) è quindi l’hash dell’input alla curva.
Quindi moltiplica (x, y), come un punto della curva secp256k1, per la sua chiave segreta per ottenere un punto Ɣ. L’hash keccak256 di Ɣ, come uint256, è l’output del VRF. Genera una prova che Ɣ è lo stesso multiplo di (x, y) come la chiave pubblica dell’oracolo è del generatore secp256k1. Questa dimostrazione è molto simile a una firma di Schnorr : in primo luogo, campiona in modo sicuro un nonce n da {0,…, # secp256k1–1}, proprio come ha fatto per la sua chiave segreta, quindi calcola u = n × g , dove g è il generatore secp256k1 e prende l’indirizzo ethereum di u . Quindi calcola v = n × (x, y). Successivamente,questo hash insieme (x, y), la sua chiave pubblica VRF, Ɣ, l’indirizzo di ue v , prende il resto di quell’hash modulo # secp256k1 e lo chiama c. Infine, calcola s = nc × k modulo # secp256k1 , dove k è la sua chiave VRF segreta. La prova è quindi la sua chiave pubblica, Ɣ, c , s e il seme di input. Lo invia al macchinario VRF on-chain, che verifica la prova e invia l’output al contratto di consumo , supponendo che la prova sia verificata.
Per verificare la prova, il contratto dovrebbe idealmente
- Verificare che la chiave pubblica e Ɣ siano punti secp256k1 validi,
- Verificare che l’indirizzo del punto c × pk + s × g corrisponda all’indirizzo di u , (dove pk è la chiave pubblica di Oracle,
- Calcolare l’ “hash a curva” (x, y) dalla chiave pubblica e il seme, e controllare che l’hash h, la sua chiave pubblica, Ɣ, l’indirizzo di u , e c × Ɣ + s × (x, y ) corrisponde a c .
Per un’intuizione del motivo per cui questo è crittograficamente sicuro, vedere l’analogia con la freccia nella sezione “Firma e verifica” nel capitolo 3 del libro di Jimmy Song Programming Bitcoin . Nel nostro caso, il “bersaglio” speciale che stiamo cercando di colpire è c. Per una prova completa della sicurezza di questo schema, vedere l’Appendice B di “Rendere NSEC5 pratico per DNSSEC”.
Sfortunatamente, le moltiplicazioni scalari su secp256k1 come c × Ɣ sono estremamente costose da calcolare direttamente sull’EVM, quindi per l’efficienza, usiamo il trucco di Vitalik per verificare che un testimone passato alla dimostrazione come c × Ɣ, corrisponda effettivamente al prodotto c × Ɣ . In questo modo, spingiamo l’onere di calcolare effettivamente c × Ɣ fuori catena e dobbiamo solo verificare che il valore che ci è stato passato come c × Ɣ sia effettivamente c × Ɣ, che è molto più economico.
Pertanto, oltre agli input/passaggi precedenti, la verifica on-chain di una prova coinvolge testimoni per c × Ɣ e s × (x, y), e la verifica include il controllo che questi testimoni siano punti della curva secp256k1 validi e i prodotti che pretendono di essere, usando il trucco di Vitalik. Inoltre, usiamo l’indirizzo ethereum per u e controlliamo che corrisponda al punto c × pk + s × g usando il trucco di Vitalik.
L’evoluzione pianificata di Chainlink VRF
L’imminente approccio di Chainlink alla decentralizzazione altamente scalabile ed economica delle reti Oracle utilizzando le firme di soglia fornirà anche una decentralizzazione e una disponibilità estremi per Chainlink VRF. Combinando questi due approcci, otteniamo tutti i vantaggi della capacità unica di Chainlink VRF di fornire casualità verificabile on-chain, combinata con la capacità di avere migliaia di nodi in modo conveniente che forniscono uptime/disponibilità di Chainlink VRF.
Consentendo al più ampio ecosistema di nodi Chainlink di partecipare alla generazione di numeri casuali di Chainlink VRF, arriviamo a una rete distribuita a livello globale di operatori di nodi che sono economicamente incentivati a generare e trasmettere dati casuali verificabili su catena. L’uso di Chainlink Threshold Signature in combinazione con una rete altamente decentralizzata di operatori di nodi aiuterà a prevenire il furto dei fondi degli utenti da parte degli avversari. Non solo le risposte di Chainlink VRF saranno verificabili on-chain; avranno anche tempi di attività/disponibilità estremi, che in combinazione con garanzie criptoeconomiche e la disponibilità di Chainlink sui vari blockchain in cui sarebbe utile la casualità verificabile, è probabile che rendano Chainlink VRF uno standard per il modo in cui i contratti intelligenti consumano la casualità.
Oltre ai vantaggi sopra menzionati, stiamo attualmente migliorando Chainlink VRF e continuando sia la ricerca all’avanguardia sulla produzione di casualità decentralizzata che la collaborazione con altri sistemi RNG. Dalla nostra ricerca iniziale, riteniamo che Chainlink VRF possa essere combinato con VDF e altri metodi per generare casualità, sia on-chain che off-chain. Siamo entusiasti di collaborare sia con il più grande settore blockchain che con la più ampia comunità accademica su come creare la migliore fonte di casualità e dimostrabilmente equa possibile per i contratti intelligenti.
Prova Chainlink VRF e dai feedback
Se sei uno sviluppatore di contratti intelligenti e desideri sapere come utilizzare la nostra implementazione iniziale di Chainlink VRF, visita la documentazione per sviluppatori per integrarla su testnet e unisciti alla discussione tecnica su Discord .
Siamo nelle fasi finali della verifica della sicurezza per Chainlink VRF e vogliamo coinvolgere i nostri utenti sia nella comunità degli sviluppatori che in quella accademica. Se hai feedback sul nostro approccio al VRF e/o desideri fornire suggerimenti per il suo miglioramento, siamo entusiasti di sentirti a custom@chain.link .
Se fare e supportare contratti intelligenti sicuri e affidabili che risolvono problemi del mondo reale sembra interessante in generale, stiamo aggiungendo altri membri del team! Scopri di più sulla nostra pagina Carriere .
Se desideri saperne di più su Chainlink in generale, visita il sito web di Chainlink o seguici su Twitter o Reddit .