Complessità
La “complessità” nel meccanismo del proof-of-work si riferisce al livello di sforzo computazionale richiesto da un client per risolvere la sfida presentata dal server. La complessità è controllata regolando il valore massimo del numero casuale generato dal server durante la creazione della sfida.
Impostando la complessità si bilancia la sicurezza contro l’abuso/spam automatizzato e l’esperienza utente. Controllando l’intervallo del numero generato casualmente, il sistema regola la difficoltà del compito computazionale richiesto dal client.
Adjust the number of iterations and test the computational complexity on your device.
Regolazione della complessità
La complessità può essere regolata modificando i valori minimi e massimi del numero segreto generato casualmente sul lato del server. Un valore massimo inferiore crea una sfida meno complessa, richiedendo meno iterazioni computazionali per il client per trovare una soluzione corrispondente. Al contrario, un valore massimo più alto aumenta la complessità, richiedendo più risorse computazionali e tempo da parte del client.
Benchmark delle Prestazioni
Questi benchmark illustrano il tempo richiesto da diversi dispositivi per risolvere una sfida ALTCHA. La tabella seguente mostra il numero di calcoli (operazioni) che ogni dispositivo può eseguire al secondo e il tempo corrispondente per risolvere una sfida con una complessità di 100.000. Un numero maggiore di operazioni al secondo indica migliori prestazioni.
Dispositivo | Prestazioni | Tempo per Risolvere |
---|---|---|
MacBook Pro M3-Pro (2023) | 3 ops/s | 0,33 sec |
iPhone 12 mini (2020) | 1,2 ops/s | 0,83 sec |
AWS EC2 (c6a.xlarge) | 1 ops/s | 1 sec |
Samsung Galaxy A14 (2023) | 0,4 ops/s | 2,5 sec |
AWS Lambda (1GB) | 0,12 ops/s | 8 sec |
Considerazioni
-
Impatto sulle performance
Una maggiore complessità potrebbe aumentare significativamente il carico computazionale sui dispositivi client, influenzando potenzialmente l’esperienza utente.
-
Dispositivi di fascia bassa rispetto a dispositivi di fascia alta
Ciò che richiede meno di un secondo su un nuovo iPhone, potrebbe richiedere 30 secondi su uno smartphone Android di fascia bassa. Testare con dispositivi fisici tipici dei vostri utenti.
-
Compromessi di sicurezza
Una complessità inferiore potrebbe ridurre la sicurezza contro gli attacchi automatizzati ma potrebbe migliorare l’accessibilità dell’utente.
Pratiche consigliate
-
Complessità dinamica
Implementare un sistema dinamico che adatta la complessità in base al carico del server o al comportamento dell’utente, garantendo un equilibrio tra sicurezza e usabilità.
-
Test e ottimizzazione
Condurre test approfonditi per determinare un livello di complessità ottimale che prevenga l’abuso senza sovraccaricare eccessivamente gli utenti legittimi.