Optimal Asymmetric Encryption Padding

In crittografia, Optimal Asymmetric Encryption Padding (OAEP) è uno schema di padding spesso utilizzato assieme a RSA. OAEP è stato introdotto da Bellare e Rogaway,[1] e successivamente standardizzato in PKCS #1 v2 e RFC 2437.

L'algoritmo OAEP è una sorta di rete di Feistel che utilizza coppie di oracoli random G {\displaystyle G} e H {\displaystyle H} per effettuare un preprocessing su un messaggio da cifrare asimmetricamente. Se usato in combinazione con una funzione botola sicura, questo metodo è considerato semanticamente sicuro all'interno del modello a oracolo random contro attacchi di tipo chosen plaintext. In casi particolari (ad esempio, con RSA), OAEP è stato provato essere sicuro anche contro attacchi di tipo chosen ciphertext. OAEP può essere utilizzato per costruire una trasformazione all-or-nothing ("tutto o niente"), come spiegato in seguito.

OAEP soddisfa i due obiettivi seguenti:

  1. Aggiunge una componente di casualità che può essere usata per convertire uno schema di crittazione deterministico (come RSA) in uno probabilistico.
  2. Fa in modo che un possibile avversario non possa recuperare alcuna porzione del testo in chiaro, anche se fosse in grado di invertire la funzione botola su cui si basa l'algoritmo di crittazione.

Funzionamento

Diagramma dell'algoritmo OAEP

Nel diagramma a destra:

  • n {\displaystyle n} è il numero di bit nel modulo RSA.
  • k 0 {\displaystyle k_{0}} e k 1 {\displaystyle k_{1}} sono costanti intere fissate nel protocollo.
  • m {\displaystyle m} è il messaggio in chiaro, una stringa lunga n k 0 k 1 {\displaystyle n-k_{0}-k_{1}} bit
  • G {\displaystyle G} e H {\displaystyle H} sono due funzioni crittografiche di hash fissate nel protocollo.
  • ⊕ è l'operatore XOR.

Per cifrare:

  1. al messaggio m va applicato un padding di k 1 {\displaystyle k_{1}} zeri per arrivare ad una lunghezza di n k 0 {\displaystyle n-k_{0}} bit.
  2. r {\displaystyle r} è una stringa casualmente generata lunga k 0 {\displaystyle k_{0}} bit.
  3. G {\displaystyle G} espande i k 0 {\displaystyle k_{0}} bit di r {\displaystyle r} a n k 0 {\displaystyle n-k_{0}} bit.
  4. X = m 00..0 G ( r ) {\displaystyle X=m00..0\oplus G(r)}
  5. H {\displaystyle H} riduce gli n k 0 {\displaystyle n-k_{0}} bit di X {\displaystyle X} a k 0 {\displaystyle k_{0}} bit.
  6. Y = r H ( X ) {\displaystyle Y=r\oplus H(X)}
  7. L'output è X Y {\displaystyle X\|Y} , ovvero la concatenazione di X {\displaystyle X} e Y {\displaystyle Y} .

Per decifrare:

  1. recuperare r {\displaystyle r} calcolando Y H ( X ) {\displaystyle Y\oplus H(X)} ;
  2. recuperare il messaggio m {\displaystyle m} tramite m 00..0 = X G ( r ) {\displaystyle m00..0=X\oplus G(r)} .

La proprietà all-or-nothing deriva dal fatto che per recuperare il messaggio m {\displaystyle m} si ha bisogno delle intere stringhe X {\displaystyle X} e Y {\displaystyle Y} . X {\displaystyle X} è richiesto per ottenere r {\displaystyle r} da Y {\displaystyle Y} , e r {\displaystyle r} è richiesta per ottenere m {\displaystyle m} da X {\displaystyle X} . Dato anche una piccolissima modifica all'input di una funzione crittografica di hash cambia completamente il risultato, X {\displaystyle X} e Y {\displaystyle Y} devono essere interamente ottenute. Questo garantisce l'integrità del messaggio.

Note

  1. ^ M. Bellare, P. Rogaway. Optimal Asymmetric Encryption -- How to encrypt with RSA. L'abstract completo può essere trovato in: Advances in Cryptology - Eurocrypt '94 Proceedings, Lecture Notes in Computer Science Vol. 950, A. De Santis ed, Springer-Verlag, 1995. Versione integrale (pdf) Archiviato l'8 luglio 2008 in Internet Archive.

Voci correlate

  • RSA
  • Key encapsulation
  Portale Crittografia
  Portale Sicurezza informatica