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