Blog.

Oblivious Transfer (OT)


Autore
Andrea Provino
Data
Tempo di lettura
3 minuti
Categoria
Privacy Preserving

oblivious-transfer-spiegazione-italiano-ot-explanation

In crittografia, l’oblivious transfer (OT) è un tipo di protocollo in cui il mittente trasmette un pezzo di informazione a un ricevitore, tra tante potenziali, ma rimane ignaro al mittente quale pezzo di informazione sia stato trasmesso.

Ammetto che la parola oblivious mi abbia inizialmente tratto in inganno, poiché da me erroneamente tradotta in ovvio. Significa invece ignaro. In effetti la somiglianza con la parola obvious porta in errore facilmente.

Paranoie grammaticali a parte, lasciami dirti una cosa.

Prima di addentarci nei meandri di quello che pare essere un argomento contorto e logicamente senza senso (i.e. Spiegami per quale motivo il mittente di un messaggio non dovrebbe conoscere quale informazione venga inviata? Spoiler, a breve ci arriviamo!), ripassiamo molto velocemente la storia dell’Oblivious Transfer.

La breve storia dell’Oblivious Transfer (OT)

Il primo protocollo di Oblivious Transfer (OT) fu introdotto nel 1981 da Michale O. Rabin, un matematico israeliano oggi quasi novantenne.

Nella sua forma iniziale, il protocollo consentiva a un mittente di inviare un messaggio con una probabilità del 50%, rimanendo così ignaro dell’effettiva ricezione da parte del destinatario.

Qualche anno dopo, altri ricercatori svilupparono una variante nota come 1-2 oblivious transfer affinché potesse essere usata per costruire protocolli di Secure Multiparty computation.

Questa variante particolare può essere generalizzata nella forma 1 out of n oblivious transfer, che applicata a un contesto client-server, permette a un utente di interrogare un database, senza che il server sappia quale elemento sia stato richiesto e senza che l’utente apprenda informazioni sugli dati presenti a database.

Ora si che inizia ad avere senso.

Come funziona l’OT?

Chiamiamo i nostri cari amici Alice e Bob, da sempre amanti della crittografia, affinché ci aiutino a capire come funzioni l’oblivious transfer.

Alice ha due messaggi, M0 e M1.

Bob è interessato a leggere il messaggio M0, e non vuole che Alice sappia che Bob abbia letto esattamente M0, e non M1 per esempio.

In effetti, l’intesa tra Alice e Bob è finita e oggi non si sopportano più. However…

Entrambe le parti concordano nel definire un generatore g, e scelgono un numero a testa, a e b, che mantengono privato.

Servono ancora alcune operazioni per rendere effettivo il nostro protocollo di oblivious transfer.

Ora entrambi calcolano un nuovo numero con l’ausilio del generatore e del numero privato, come segue:

  • Alice calcola A = g^a
  • Bob calcola B = g^b oppure B = A*g^b ( in base al messaggio che intende leggere)

Bob procede a inviare B ad Alice che può ora calcolare due valori, uno per messaggio grazie a B. Lo fa come segue:

  • K0 = Hash( B^a )
  • K1 = Hash( (B/A)^a )

Ora avviene la cifratura del messaggio. Usando le chiavi K0 e K1, Alice cripta i messaggi M0 e M1 generando E0 ed E1. Entrambi i messaggi cifrati sono quindi inviati a Bob.

Adesso Bob calcola la chiave di decifratura K = Hash( A ^b ) e prova a decifrare i messaggi E0 ed E1.

Ora, posso svelarti la meraviglia dell’oblivious transfer.

Il sistema attraverso cui abbiamo gestito i segreti e i messaggi, ci garantisce che Bob sia in grado di accedere unicamente al messaggio da lui scelto, e che non possa in alcun modo decifrare gli altri. Alice, dal canto suo, non può mai sapere quale messaggio sia stato decifrato, quindi letto.

A meno che i due non facciano pace e si rivelino vicendevolmente informazioni confidenziali.

L‘Oblivious Transfer è un concetto alla base delle Zero Knowledge Proofs, attraverso cui riuscire a creare un circuito che permetta a una persona di generare una funzione e a un’altra di calcolarla (evaluation) ottenendo il risultato.

Descriveremo questo passaggio esaminando i Garble Circuit.

Per il momento è tutto.

Per aspera, ad astra.

Un caldo abbraccio, Andrea

Taggedprivacy


Ultimi post

Patricia Merkle Trie

Il Practical Algorithm To Retrieve Information Coded In Alphanumeric Merkle Trie, o Patricia Merkle Trie è una struttura dati chiave-valore usatada Ethereum e particolarmente efficiente per il salvataggio e la verifica dell’integrità dell’informazione. In questo post ne studieremo le caratteristiche. Prima di procedere, ci conviene ripassare l’introduzione al Merkle Tree nella quale abbiamo chiarito il […]

Andrea Provino
ethereum-patricia-merkle-tree
Tree Data Structure: cos’è un Merkle Tree

Un Merkle Tree è una struttura dati efficiente per verificare che un dato appartenga a un insieme esteso di elementi. È comunemente impiegato nelle Peer to Peer network in cui la generazione efficiente di prove (proof) contribuisce alla scalabilità della rete. Capire i vantaggi di questa struttura ci tornerà utile nel nostro percorso di esplorazione […]

Andrea Provino
merkle-tree-cover
UTXO: come funziona il modello Unspent Transaction Outputs

Per tenere traccia dei bilanci utente, la blockchain di Bitcoin sfrutta un modello di contabilità definito UTXO o Unspent Transaction Outputs. In questo articolo ne esaminiamo le caratteristiche. Ogni blockchain è dotata di un sistema di contabilità, un meccanismo attraverso cui tenere traccia dei bilanci di ciascun utente. I due grandi modelli di riferimento nel […]

Andrea Provino
bitcoin-utxo
Cos’è Ethereum

Possiamo definire Ethereum come una macchina a stati distribuita che traccia le transizioni di un archivio dati general-purpose (i.e. una memoria in grado di registrare qualsiasi dato esprimibile come coppia di chiave e valore o key-value) all’interno della Ethereum Blockchain. È arrivato il momento di esplorare uno dei progetti tecnologici più innovativi e interessanti degli […]

Andrea Provino
ethereum