RC6

Da Wikipedia, l'enciclopedia libera.
RC6
RC6 Cryptography Algorithm.JPG
La Funzione di Feistel nell'algoritmo RC6
Generale
Progettisti Ron Rivest, Matt Robshaw, Ray Sidney, Yiqun Lisa Yin
Prima pubblicazione 1998
Derivato da RC5
Dettagli
Dimensione chiave 128, 192, o 256 bit
Dimensione blocco 128 bit
Struttura Rete di Feistel
Numero di passaggi 20

In crittografia, RC6 è un cifrario a blocchi a chiave simmetrica derivato da RC5. È stato ideato da Ron Rivest, Matt Robshaw, Ray Sidney, e Yiqun Lisa Yin per soddisfare i requisiti della competizione indetta per Advanced Encryption Standard (AES), uno standard di cifratura adottato dal governo USA. L'algoritmo è stato uno dei cinque finalisti, ed è stato anche presentato ai progetti NESSIE e CRYPTREC. Si tratta di un algoritmo proprietario, brevettato da RSA Security.

Descrizione[modifica | modifica sorgente]

L'RC6 lavora su blocchi di 128 bit e supporta chiavi di 128, 192 e 256 bit ma, come l'RC5, può essere reso parametrico per supportare una vasta gamma di lunghezze della word, della dimensione della chiave e del numero di passaggi. L'RC6 è molto simile all'RC5 nella struttura, utilizzando rotazioni che dipendono dai dati, addizioni modulari e operazioni di XOR; in effetti, l'RC6 potrebbe essere considerato come due processi paralleli di crittografia RC5 "intrecciati". Tuttavia l'RC6 utilizza un'ulteriore operazione di moltiplicazione non presente nell'RC5 al fine di rendere la rotazione dipendente da ogni bit di una word, e non solo dai meno significativi.

Cifratura/Decifratura[modifica | modifica sorgente]

// Cifratura/Decifratura con RC6-w/r/b
// 
// Input: Testo in chiaro memorizzato in quattro registri d'ingresso A, B, C e D
//        di dimensione pari a w bit
//        r è il numero di passaggi chiavi di iterazione S[0, ... , 2r + 3]
//        di dimensione pari a w bit
// 
// Output: Testo cifrato memorizzato in A, B, C, D
// 
// '''Procedura di Cifratura:'''
 
	B = B + S[0]
	D = D + S[1]
	for i = 1 to r do
	{
		t = (B(2B + 1)) <<< lg w
		u = (D(2D + 1)) <<< lg w
		A = ((A ^ t) <<< u) + S[2i]
		C = ((C ^ u) <<< t) + S[2i + 1] 
                (A, B, C, D)  =  (B, C, D, A)
 
	}
	A = A + S[2r + 2]
	C = C + S[2r + 3]
 
 
// '''Procedura di Decifratura:'''
 
	C = C - S[2r + 3]
	A = A - S[2r + 2]
 
	for i = r downto 1 do
	{
	   (A, B, C, D) = (D, A, B, C)
	    u = (D.(2D + 1)) <<< lg w
	    t = (B.(2B + 1)) <<< lg w
	    C = ((C - S[2i + 1]) >>> t) ^ u
	    A = ((A - S[2i]) >>> u) ^ t
	}
	D = D - S[1]
	B = B - S[0]

Licenza[modifica | modifica sorgente]

Anche se l'RC6 non è stato selezionato come algoritmo per l'Advanced Encryption Standard, non è garantito che sia gratuito. A gennaio 2007, una pagina web sul sito ufficiale degli sviluppatori di RC6, RSA Laboratories, affermava quanto segue:

"Sottolineiamo che se RC6 sarà selezionato per l'AES, RSA Security non richiederà alcuna concessione di licenza o pagamento per i prodotti che utilizzano l'algoritmo".

L'enfasi sulla parola se porta a pensare che RSA Security Inc. potrebbe ora richiedere un pagamento per la licenza d'uso per tutti quei prodotti che utilizzano l'algoritmo RC6. RC6 è un algoritmo di cifratura brevettato (U.S. Patent 5,724,428 e U.S. Patent 5,835,600 ).

Voci correlate[modifica | modifica sorgente]

Riferimenti[modifica | modifica sorgente]

Collegamenti esterni[modifica | modifica sorgente]