Salta ai contenuti

Meccanismo della Prova di Lavoro

Il meccanismo della prova di lavoro è progettato per prevenire abusi automatizzati e spam richiedendo ai visitatori del sito web di svolgere un compito computazionale. Questo compito consiste nel trovare un numero specifico determinato dal server e utilizza l’hashing SHA per la generazione e la verifica della sfida. Il sistema utilizza un salt casualizzato e un numero segreto per creare una sfida che gli utenti devono risolvere per inviare il modulo o accedere al sito web.

Generazione della sfida

  1. Creazione di un salt casuale
    Un server genera una stringa casuale (salt) di lunghezza sufficiente (di solito almeno 10 caratteri). Questo salt serve come un’ulteriore input per garantire l’unicità e la complessità della sfida per ogni utente.

  2. Generazione di un numero segreto
    Il server genera un numero segreto, un numero intero positivo, che rimane nascosto dal client. Questo numero determina la complessità della sfida.

  3. Calcolo della sfida
    Il server concatena il salt e il numero segreto, creando una stringa unica. Questa stringa concatenata viene hashata utilizzando l’algoritmo SHA, producendo un hash di dimensione fissa, che rappresenta la sfida.

  4. Creazione della firma del server
    Viene utilizzata una chiave HMAC per creare una firma basata sulla sfida. Questa firma funge da meccanismo di verifica per la correttezza della soluzione inviata dall’utente.

In questo meccanismo della prova di lavoro, il compito del client consiste nel calcolare in modo iterativo una soluzione corrispondente alla sfida fornita dal server.

Compito lato client

Il compito del client comporta l’iterazione continua attraverso numeri, combinarli con il salt fornito e fare l’hashing utilizzando SHA fino a scoprire un numero che, hashato con il salt, corrisponda alla sfida ricevuta dal server. Questo processo iterativo richiede sforzo computazionale da parte del client per trovare una soluzione che soddisfi i criteri stabiliti dal server.

Una volta trovata una soluzione corrispondente, il client invia la soluzione insieme alla sfida originale di nuovo al server per la convalida. Se la soluzione inviata corrisponde alla sfida originale, secondo il processo di verifica del server, il client ottiene l’accesso ai servizi del sito web, dimostrando di aver completato con successo il compito della prova di lavoro.

  1. Calcolo iterativo

    • Partendo da zero, il client itera attraverso i numeri, incrementando in modo sequenziale.
    • Per ogni iterazione, concatena il salt ricevuto dal server con il numero corrente in fase di test.
    • Applica l’algoritmo di hashing SHA alla stringa concatenata.
    • L’hash risultante viene confrontato con la sfida ricevuta dal server.
  2. Soluzione corrispondente
    Il client continua questo processo iterativo fino a trovare un numero che, combinato con il salt fornito, produca un hash SHA che corrisponda alla sfida fornita dal server.

Verifica della soluzione

  1. Convalida della sfida
    Utilizzando il salt e il numero ricevuti dal client, il server ricomputa la sfida concatenando questi valori e applicando l’algoritmo di hashing SHA. Confronta poi questa sfida calcolata con quella ricevuta dal client per confermare la loro uguaglianza.

  2. Convalida della firma
    Il server ricostruisce la firma basata sulla sfida e sulla chiave HMAC. Confronta questa firma ricostruita con quella inviata dall’utente per autenticare la correttezza della soluzione.

  3. Controllo di verifica
    La richiesta viene considerata verificata solo se supera entrambi i controlli di convalida (sfida e firma). Se riuscito, il server concede l’accesso o elabora la richiesta dell’utente; altrimenti, nega l’accesso o tratta la richiesta come potenzialmente dannosa.

Consultare la guida all’integrazione del server per esempi e dettagli di implementazione.