Ottimo lavoro davvero!
A livello tecnico non ci capisco una mazza e non entro assolutamente nel merito ma a livello concettuale sembra una figata e se dovesse riuscire...
Comunque immagino esistano dei rimedi/correttivi. Prima di fare qualsiasi azione studierei le eventuali azioni di contrasto così da anticiparle.
Per la traduzione in inglese gbianchi mi ha chiesto in pvt ma al momento non riesco prima di qualche giorno. Se qualcuno vuole iniziare...
Mah ci ho riflettuto, e visto che io ho iniziato a studiare ethereum una settimana fa...
se mi confronto con la comunita' possono succedere queste cose:
0) Espongo alla comunita'
1) l'idea e' buona e la usano... che in fondo e' quello che mi interessa.
2) Mi criticano in eventuali punti deboli, e magari riesco a lavorarci su e tornare al punto 0
3) Mi motivano (
seriamente) che e' una cagata. Mi sono divertito un po' ed e' morta li'.
Direi che in ogni caso va bene, in pieno spirito open source
alla questione delle possibili contromisure ci avevo pensato anch'io. Mi metto nell'ottica di chi ha un interesse da difendere in ethereum, soprattutto chi gestisce i nodi validatori. Avevi già scritto che oltre la metà sono in cloud, se vedessi diminuire le prestazioni dei miei server per aumento del carico, la cosa più banale da fare sarebbe aggiungere altre risorse hw per compensare. Ovviamente aumenterebbero i costi, ma questo potrebbe essere bilanciato dal beneficio di mantenere stabile il valore di ETH.
Se poi oltre a validatore sono anche miner, comunque
aumenterebbero le mie entrate provenienti dal gas sprecato [questo punto in realtà non mi è ancora chiaro: se lo smart contract esaurisce il gas prima di terminare, e quindi i nodi validatori lo rigettano, cosa viene finalizzato su blockchain? Le fees vengono comunque incamerate dai miner?]
Infatti questo e' un punto cardine... e mi fa piacere che hai colto molto bene il punto dell'attacco,
e anche la dinamica... mi sa che sei l'unico per ora
Pero' considera un po' di cose:
1) in ethereum, le fee le prendono i miner. mentre tutto il lavoro di calcolo degli smart contract lo fanno i nodi!
(in bitcoin succede un qualcosa di simile, ma almeno i nodi fanno un lavoro direi monotono, di verifica di correttezza delle transazioni e basta)
Qui invece essendo il codice programmabile, i nodi si possono beccare delle sberle di carico computazionale
non indifferente... ed infatti e' importante capie come fanno ad eseguire il vari task, come li ordinano per priorita', come gestiscono il multitask...
praticamente la EVM deve avere anche tutta la logica di un sistema operativo integrata, per la suddivisione delle risorse tra i vari smart contract in esecuzione.
2) poi le EVM in esecuzione sui vari nodi devono giungere ad un consenso, quindi dovranno anche scambiarsi delle info.... e se studi uno smart contract
che ad ogni esecuzione fa calcoli random, quindi ogni EVM potrebbe giungere ad un risultato diverso... come fanno a giungere ad un consenso?
3) Inoltre le EVM che girano sui nodi debbono continuamente controllare se hanno sforato il le risorse disponibili
(ossia se il gas consumato, al valore attuale (ma di quando?) ha superato il deposito ethereum disponibile). Questo mi fa pensare ad un overhead per ogni opcode eseguito mostruoso!
Ho provato a leggere lo yellow paper su questo punto, ma lui stesso lo descrive "la parte piu' ostica del protocollo ethereum", e
per ora non ho capito come i vari nodi convergono al consenso.
Comunque, se le cose vanno cosi', man mano dovrebbero sparire i nodi gestiti da utenti, e tutti i nodi concentrarsi in clud centralizzati
(e probabilmente gestiti dallo staff ethereum) anche perche' ribadisco che il carico computazionale gestito dai nodi e' in continuo aumento,
e i nodi non ci guadagnano nulla. (e mi sembra che sia proprio la dinamica in corso).
Tra l'altro e' proprio seguendo questa dinamica che mi sono iniziate a venire le idee per questo potenziale attacco.
Insomma, magari non avro' centrato in pieno il bersaglio, ma sono convintissimo di aver messo le mani su una zona davvero "delicata".
Inoltre ribadisco il fatto che sia sparita la possibilita' di mettere delle tag e quindi usare direttamente la jump e la jumpdest in assembler mi puzza proprio molto.