Verifica il tuo certificato
"Proof of Knowledge"

Se stai leggendo questa pagina, molto probabilmente hai ricevuto un certificato "Proof of Knowledge" per il corso Cypherpunk 2140 che hai frequentato. Congratulazioni per il tuo risultato!

In questo tutorial, scopriremo come il Corso Cypherpunk 2140 emette prove verificabili per i certificati "Proof of Knowledge". Successivamente, descriveremo come verificare l'autenticità di queste prove.

Meccanismo di firma e verifica dei certificati

Il Corso Cypherpunk 2140 prende ispirazione dalla certificazione ₿-CERT di Plan₿ Network sia nella modalità d'esame, sia nel meccanismo di firma e verifica dei cartificati. Anche nel corso Cypherpunk 2140 firmiamo crittograficamente i certificati e li marchiamo temporalmente utilizzando la Timechain (cioè la blockchain di Bitcoin), attraverso un meccanismo di prova che si basa su due operazioni crittografiche:

  • Una firma GPG su un file di testo che sintetizza i tuoi risultati e i dettagli del certificato.
  • La marcatura temporale (timestamping) dello stesso file firmato tramite OpenTimestamps.

La prima operazione ti permette di confermare l'emittente del certificato (il prof. Marco Farina che ha tenuto il corso Cypherpunk 2140), mentre la seconda ti consente di verificare la data della sua emissione. Questo semplice meccanismo di prova ci permette di emettere certificati con prove crittografiche che chiunque può verificare in modo indipendente.

Grazie a questo meccanismo, qualsiasi tentativo di alterare anche il più piccolo dettaglio del tuo certificato risulterà in un hash SHA-256 completamente diverso del file firmato, rivelando istantaneamente qualsiasi manomissione, poiché sia la firma che la marcatura temporale non saranno più valide. Inoltre, se qualcuno tentasse di falsificare maliziosamente certificati per conto del Corso Cypherpunk 2140, una semplice verifica della firma smaschererebbe la frode.

Come funziona la firma GPG?

La firma GPG è generata utilizzando un software open-source chiamato GNU Privacy Guard (GnuPG o GPG). Questo software permette agli utenti di creare facilmente chiavi private, firmare e verificare firme, e cifrare e decifrare file. Ai fini di questo tutorial, è importante notare che il corso Cypherpunk 2140 utilizza GPG per creare le proprie chiavi privata/pubblica e per firmare tutti i certificati "Proof of Knowledge" ottenuti dagli studenti.

Se qualcuno vuole verificare l'autenticità di un file firmato, può usare GPG per importare la chiave pubblica dell'emittente e verificarla.

Per coloro che sono curiosi e vogliono saperne di più su questo fantastico software, potete fare riferimento al "Manuale di GNU Privacy Guard" (o altre risorse online).

Come funziona il timestamping?

Chiunque può usare OpenTimestamps per marcare temporalmente un file e ottenere una prova verificabile della sua esistenza. In altre parole, non fornisce la prova di quando il file è stato creato, ma piuttosto la prova che il file esisteva prima di un momento specifico nel tempo.

OpenTimestamps fornisce questo servizio gratuitamente utilizzando un metodo altamente efficiente per memorizzare la prova di esistenza del file all'interno di un blocco della blockchain di Bitcoin. Impiega l'algoritmo di hash SHA-256 per creare un identificatore univoco del tuo file e costruisce un albero di Merkle utilizzando gli hash dei file inviati da altri utenti. Solo l'hash della struttura dell'albero di Merkle viene successivamente inserito in una transazione OP_RETURN, garantendo un modo sicuro e compatto per verificare l'esistenza del file.

Una volta che questa transazione entra in un blocco, chiunque con il file iniziale e il file .ots associato può verificare matematicamente l'autenticità della marcatura temporale del file. Nella seconda parte del tutorial, vedremo come verificare il tuo certificato attraverso un terminale e attraverso l'interfaccia grafica sul sito di OpenTimestamps.

Come verificare un certificato "Proof of Knowledge"

Passo 1: scarica i file del tuo certificato

Dovresti aver ricevuto (o poter scaricare dal Drive della scuola) un file compresso (solitamente .zip) contenente i materiali del tuo certificato.

Estrai il contenuto cliccando con il tasto destro sul file .zip e selezionando "Estrai" o un comando simile. Troverai tre file diversi:

  • Un file di testo firmato (es. certificato_cypherpunk2140_COGNOME.txt.asc)
  • Un file OpenTimestamps (OTS) (es. certificato_cypherpunk2140_COGNOME.txt.ots)
  • Un certificato in formato PDF (es. certificato_cypherpunk2140_COGNOME.pdf)

Nota che i file .asc sono semplicemente file di testo ASCII con una firma GPG allegata. Puoi aprirli con qualsiasi editor di testo (come Notepad su Windows o TextEdit su macOS) e visualizzare il contenuto. Non è necessario alcun software speciale per aprirli.

Passo 2: come puoi verificare la firma del file di testo?

Per prima cosa, vai nella cartella in cui hai estratto i file e apri un terminale (su Windows, puoi cliccare con il tasto destro tenendo premuto Shift nella finestra della cartella e selezionare "Apri finestra PowerShell qui" o "Apri nel Terminale"; su Linux/macOS, solitamente "Apri nel terminale"). Quindi, segui le istruzioni qui sotto.

Importa la chiave PGP pubblica del Corso Cypherpunk 2140 con il seguente comando. Nota: Sostituisci l'URL sottostante con quello corretto fornito per la chiave pubblica del corso.

curl -s https://raw.githubusercontent.com/marcofarina/cypherpunk2140/34f33efcae2301bcbb9c88eba0d8bc87b24d5387/static/marcofarina_pk.asc | gpg --import

Dovresti vedere un messaggio simile al seguente se hai importato con successo la Chiave PGP:

gpg: key XXXXXXXX: public key "Prof. Marco Farina <marco.farina@jcmaxwell.it>" imported
gpg: Total number processed: 1
gpg:               imported: 1

NOTA: se vedi che 1 chiave è stata elaborata e 0 chiavi sono state importate, probabilmente significa che hai già importato la stessa chiave in precedenza, il che va benissimo.

Verifica la firma del certificato usando il seguente comando (sostituisci nome_file_certificato.txt.asc con il nome effettivo del tuo file .asc):

gpg --verify nome_file_certificato.txt.asc

Questo comando dovrebbe mostrarti i dettagli sulla firma, inclusi:

  • Chi l'ha firmato (prof. Marco Farina)
  • Quando è stato firmato
  • Se la firma è valida o meno

Questo è un esempio del risultato:

gpg: Firma effettuata Sab 17 Mag 02:02:36 2025 CEST
gpg: utilizzando la chiave EDDSA 44021BD1F34AE971889CF873C03EE33A2FFE9173
gpg: Firma valida da "Marco Farina (Chiave per firma certificati Cypherpunk2140) marco.farina@jcmaxwell.it" [definitivo]

Se vedi un messaggio come "BAD signature" (Firma NON VALIDA), significa che il file è stato manomesso.

Passo 3: verifica del timestamp di OpenTimestamps

Verifica tramite Interfaccia Grafica
  1. Visita il sito di OpenTimestamps: https://opentimestamps.org/
  2. Clicca sul pulsante "Stamp & Verify".
  3. Trascina il file OTS (es. nome_file_certificato.txt.ots) nell'area designata.
  4. Trascina il file marcato temporalmente (es. nome_file_certificato.txt.asc) nell'area designata.

Il sito verificherà automaticamente il timestamp di OpenTimestamps e mostrerà il risultato. Se vedi un messaggio che indica che il timestamp è valido e attesta l'esistenza del file in un determinato blocco Bitcoin, la verifica è positiva.

Metodo tramite riga di comando (CLI)

NOTA: questa procedura richiederà un nodo Bitcoin locale in esecuzione per una verifica completamente trustless, oppure si affiderà a calendari pubblici.

Installa il client OpenTimestamps dal repository ufficiale eseguendo il seguente comando (potrebbe richiedere Python e pip installati):

pip install opentimestamps-client

Naviga nella directory contenente i file del certificato estratti. Esegui il seguente comando per verificare il timestamp (sostituisci nome_file_certificato.txt.ots con il nome effettivo del tuo file .ots):

ots verify nome_file_certificato.txt.ots

Questo comando:

  • Controllerà il timestamp rispetto alla blockchain di Bitcoin (o calendari pubblici).
  • Ti mostrerà esattamente quando il file è stato marcato temporalmente.
  • Confermerà l'autenticità del timestamp.

Conclusioni

La verifica ha successo se vengono visualizzati entrambi i seguenti messaggi:

  • La firma GPG è riportata come "Firma effettuata da Marco Farina" (o simile, indicando una firma valida).
  • La verifica di OpenTimestamps mostra un timestamp specifico di un blocco Bitcoin e riporta "Success! Bitcoin block [altezza_blocco] attests data existed as of [timestamp]" (o un messaggio equivalente di successo).

Ora che sai come il Corso Cypherpunk 2140 emette prove verificabili per qualsiasi certificato "Proof of Knowledge" e puoi facilmente verificarne l'integrità.

Un ringraziamento non formale va a Plan₿ Network per aver ispirato questo meccanismo di prova e per il loro lavoro nel rendere la certificazione Bitcoin accessibile a tutti.