Dopo tanta attesa e infiniti rumors, Facebook ha annunciato ufficialmente il lancio della sua criptovaluta Libra. Contestualmente all'annuncio, ne ha pubblicato il whitepaper e i dettagli tecnici.

In questo articolo vogliamo condividere la mia prima esperienza con Libra per iniziare a capire quali informazioni potrebbero avere valore per un investigatore o un analista.

Diamo il via ai test!

Oltre ad averne pubblicato il whitepaper e i dettagli tecnici, Facebook ha reso disponibile un ambiente di test dove e' possibile provare in prima persona il funzionamento di Libra. Anche se per ora questo ambiente si limita ad un client a riga di comando i cui contenuti vengono eliminati ad ogni riavvio dell'ambiente, è sufficiente per iniziare a toccare con mano la struttura di questa criptovaluta.

Per installarlo (in ambiente Linux) dovremo eseguire i seguenti comandi in un terminale con privilegi di amministratore. In questo articolo utilizzeremo la distro linux Tsurugi per:

  • clonare Libra: git clone https://github.com/libra/libra.git && cd libra
  • installare le dipendenze: ./scripts/dev_setup.sh
  • eseguire Libra Core (riga di comando): ./scripts/cli/start_cli_testnet.sh

Il programma di setup installerà le seguenti applicazioni:

  • Rustup, necessario per far funzionare il linguaggio di programmazione Rust;
  • Cmake, per gestire i processi;
  • Protoc, un compilatore per buffer di protocollo, fornito da Google;
  • Go, un linguaggio di programmazione open source sviluppato da Google.

Installazione della CLI

Potrebbe non andare tutto liscio...

Può capitare che l’esecuzione di Libra Core non vada a buon fine a causa di problemi di dipendenze legati ad una versione troppo vecchia di Protoc. Per installare l’ultima versione utilizzate la seguente serie di comandi:

<code>PROTOC_ZIP=protoc-3.7.1-linux-x86_64.zip curl -OL https://github.com/google/protobuf/releases/download/v3.7.1/$PROTOC_ZIP sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc sudo unzip -o $PROTOC_ZIP -d /usr/local include/* rm -f $PROTOC_ZIP </code>

In altri casi, i problemi potrebbero essere dovuti ad errori presenti in un file, Rust.lock, generato in fase di installazione all'interno della directory corrente. Per superare questo intoppo possiamo provare ad eliminare il file tramite il comando rm -rf Rust.lock.

Nella nostra prova, dopo aver risolto i problemi incontrati, siamo riusciti ad avviare il client Libra.

Prima esecuzione

Dopo una breve descrizione delle funzioni disponibili, troviamo il prompt "libra%" in attesa delle nostre istruzioni.

Due account, il minimo per effettuare delle transazioni

Tramite il comando account possiamo visualizzare le opzioni disponibili relative agli account, l'equivalente nell'ambiente di Facebook degli indirizzi pubblici dei bitcoin.

Opzioni account disponibili

Il primo comando da digitare è senz'altro account create che ci permetterà di generare il nostro primo account, o meglio, il nostro primo indirizzo.

Creazione del primo account

Nel precedente output del comando potete notare l’identificatore #0 seguito dalla parola Address e dall'indirizzo pubblico dell'account generato. Quest'ultimo è una stringa esadecimale di 64 caratteri composta dalle cifre da 0 a 9 e dalle lettere minuscole comprese tra a e f.

L’identificatore #0 indica che il primo account generato nella propria macchina è identificato dal carattere 0. In questo modo possiamo riferirci all'indirizzo in questione senza che vi sia bisogno di riscriverlo interamente ogni volta.

Teniamo a mente che l’identificativo fornito in fase di creazione dell’indirizzo ha valenza puramente locale: un altro utente, all'interno del client installato nella propria macchina, avrà un altro indirizzo con identificatore 0.

Dobbiamo inoltre tenere presente che, anche se abbiamo generato l’indirizzo, questo sarà realmente esistente solo dopo aver ricevuto la prima transazione. Questo aspetto è caratteristico anche con gli indirizzi Bitcoin: seppur generati e presenti nei propri wallet, possiamo trovarli nella blockchain solo dopo che hanno ricevuto almeno una transazione.

Per poter
testare opportunamente il funzionamento di Libra, creiamo un secondo indirizzo,
in modo da poter poi effettuare delle transazioni di prova.

Creazione secondo account

La procedura da seguire è esattamente la stessa. Da notare come il secondo indirizzo creato, poiché diverso dal primo, viene identificato con #1.

Possiamo ottenere una lista di tutti gli indirizzi generati nell'ambiente di test tramite il comando account list.

Rifornimento!

Ora che abbiamo i nostri indirizzi, per poter effettuare una transazione ci manca un ultimo tassello: la valuta!

Per ottenerla, basta digitare i comandi account mint 0 100, tramite cui potremo caricare l'account 0 con 100 "libra coin", e account mint 1 60, tramite cui potremo caricare l'account 1 con 60 "libra coin".

richiesta monete

Purtroppo si tratta di un test: la valuta caricata “sparirà” una volta che l'applicativo verrà chiuso e riaperto... quindi non c’è bisogno di essere avidi :-)

Dobbiamo assolutamente tenere a mente che, nonostante stiamo operando in un ambiente di test, tutte le operazioni eseguite verranno validate da un nodo esterno controllato, per ora, da Facebook. Dato che un numero eccessivo di richieste fatte con un intervallo troppo ridotto potrebbe generare un messaggio di errore, come nel precedente esempio, è meglio lasciar passare qualche minuto tra i tentativi di caricare nuove libra coin nell’indirizzo 1.

Verifica del saldo

Se non viene visualizzato alcun messaggio d'errore, possiamo verificare se le LC sono state accreditate tramite il comando query balance seguito dall'identificativo dell’account di cui vogliamo conoscere il saldo.

verifica saldo

Se il valore di Balance_is è diverso da 0, come nell'esempio precedente, l'indirizzo analizzato è ora presente nella blockchain di Libra in quanto destinatario di una transazione e da ora in poi la sua attività sarà visibile a tutti gli altri utenti.

Inviamo la nostra prima transazione

Per inviare la nostra prima transazione utilizziamo il comando transfer 0 1 15, dove 0 è l’identificativo del primo account, 1 l’identificativo del secondo e 15 il quantitativo di monete da trasferire.

transazione

A questo punto la richiesta di transazione è stata inviata
al nodo validatore.

Per verificarne lo stato si può usare il comando suggerito nell'immagine precedente, query txn_acc_seq 0 0, ed ottenere tutti i dettagli della transazione.

verifica transazione

Come possiamo vedere qui sopra, in realtà le transazioni che inviamo sono molti più complesse rispetto a quelle che inviamo tramite linea di comando.

Sono, principalmente, composte dai seguenti campi:

  • l'indirizzo mittente: l'indirizzo oggetto delle azioni indicate nello script di transazione;
  • lo script di transazione: qui sono indicate le azioni che il client richiede di poter eseguire ai nodi validatori (in questo campo potrebbe anche essere incluso l’indirizzo destinatario in base al tipo di azioni richieste);
  • il Gas Price il prezzo a cui pagare la potenza di calcolo necessaria per l’effettuazione della transazione, che può variare in base alla priorità che vogliamo darle;
  • Max Gas Account, dove è indicato il valore massimo che si è disposti a pagare come commissione per l'utilizzo della potenza di calcolo necessaria all'effettuazione della transazione;
  • Il sequence number: un valore progressivo che indica quante operazioni sono già state effettuate dall'indirizzo mittente nell'ambiente di test;
  • La data di scadenza: oltre la quale, la transazione, se non è stata ancora inclusa nella blockchain, deve essere scartata.

Vorrei concentrare la nostra attenzione sul “sequence number”. Questo e' un campo particolare: si tratta del numero progressivo delle transazioni da noi eseguite per uno specifico account che viene sempre indicato nel codice di ogni transazione inviata (cd. raw transaction) ai validatori. Se questo valore è diverso dal numero di transazioni già effettuate, verificabile tramite il comando query sequence, la transazione verrà annullata.

Per verificare il valore progressivo di un account, digitate query sequence 0, dove 0 è l’identificativo dell’account da verificare.

Verifica del sequence number

Nell'esempio precedente, entrambi gli account verificati presenteranno valore 0 dato che si tratta di indirizzi appena creati che non sono stati oggetto di alcuna transazione.

Tornando alla nostra PRIMA transazione, verifichiamo nuovamente il saldo degli indirizzi per avere conferma dell'effettuazione della transazione.

verifica saldi

Per conoscere, in qualsiasi momento, le informazioni dettagliate su un proprio indirizzo, è possibile usare il comando query account_state 0.

verifica stato indirizzo

E se non usassimo gli identificatori?

Finora abbiamo utilizzato gli identificatori degli account, cosa possibile perché si tratta di account nella nostra disponibilità. Tuttavia, al loro posto, avremmo potuto specificare gli indirizzi per esteso, operazione assolutamente necessaria per inviare monete ad account di altre persone.

transazione con indirizzo per esteso

Allo stesso modo, inserendo l’indirizzo per esteso con il comando query account_state è possibile visualizzare le informazioni relative ad indirizzi in possesso di altri utenti.

stato di altri account

In tal modo, possiamo immediatamente conoscere il saldo e il numero di transazioni in cui è coinvolto uno specifico indirizzo.

Se invece ci interessa conoscere lo stato di una specifica transazione, possiamo usare il comando txn_acc_seq e9c271be7abb706bf9cc5dc78c71ec1912433d786543f96da0abe4e56a6f79c0 0 true, dove la stringa più lunga è l’indirizzo osservato, 0 è il progressivo della transazione che ci interessa.

verificare qualunque transazione

Un'ultima considerazione, ovviamente, se proviamo a spendere monete di un indirizzo che non è stato ancora creato, ci verrà restituito un messaggio di errore.

errore spesa indirizzo di altri

Conclusioni

Il lancio di questa nuova moneta dimostra come un buon investigatore, oltre ad avere ottime e specifiche competenze, deve anche puntare ad un aggiornamento costante così da essere sempre a proprio agio in qualsiasi scenario di riferimento.

Il lancio di una moneta virtuale sorretta da un'infrastruttura come quella di Facebook, ha tutte le carte in regola per dare una spinta determinante verso l'adozione di massa di strumenti di pagamento virtuali... con il conseguente strascico di tentativi di frodi, furti di identità ecc. ecc.

In questo articolo abbiamo cercato di approcciare Libra tenendo un atteggiamento da investigatori. Oltre al nostro approccio, in questi giorni è possibile trovare in rete sempre più articoli che trattano vari aspetti di questa nuova moneta. In particolare ci e' piaciuta l'intervista fatta a diversi esperti del settore. Vorremmo evidenziare la frase del nostro amico Stefano Capaccioli: "... la soluzione che LIBRA intende offrire è quella di una valuta alternativa a quella a corso corrente trasferendo la centralità della relazione finanziaria dalle banche ai giganti dei Big Data, aprendo scenari tutti da analizzare e da scoprire...”.

UB&AR

Note a margine:

Rileggendo questo articolo e soprattutto vari altri commenti presenti online mi ponendo delle domande:

  • Come aumenteranno le misure di sicurezza riguardanti i profili Facebook in particolare quelle tese ad evitare il furto di identità? e come impatteranno sulle attività legate all'OSInt?
  • Misure AML: che misure saranno implementate? in merito condivido alcune posizioni presentate in questo articolo apparso sul sole 24ore.

Sandro Rossetti
Post by Sandro Rossetti
June 26, 2019
Sandro is interested in CTI and Osint by day, reads and blogs by night. He lives and works in Rome. He is the one with a fixation on language (and that says it all!) who corrects and puts his hand to almost every article that is published on this blog.

Comments