È questo il modo di implementare il CTR attorno a un sistema che implementa solo CBC, CFB, CTS, ECB e OFB?

8

La libreria di crittografia nel mio linguaggio di programmazione non supporta CTR, sebbene supporti CBC, CFB, CTS, ECB e OFB. Suppongo che sia teoricamente possibile implementare in modo sicuro il CTR attorno a una di queste altre modalità.

Quindi mi chiedo, queste citazioni descrivono l'implementazione corretta del CTR dal punto di vista della sicurezza? Per quanto ho letto penso che lo siano, ma voglio solo assicurarmi che non mi manchi qualcosa.

I studied a bit more and found out that the block transform for CTR mode is really just the result of XOR'ing the plaintext with an AES ECB transform of a monotinically-increasing counter. With that understanding, I was able to implement a AES CTR mode pretty easily on top of the AES ECB mode that is built into the .NET BCL.

E,

It is possible to implement AES crypto in CTR mode using the AesManaged class, though it requires some extra work. To implement CTR mode with the .NET AesManaged class, here's what I did: Use CipherMode.ECB, PaddingMode.None. [No padding is necessary in CTR mode because we are always encrypting a 16-byte counter.] When encrypting, call CreateEncryptor(). Using the resulting ICryptoTransform, for each block, transform a nonce of 16-bytes (Same as the AES block size), and then XOR the result of that transform with the plaintext to get the ciphertext. Increment the nonce after each block. Continue until there are no more blocks - don't forget the final block transform, for the last block of 16 or fewer bytes.

Per prima cosa, quando la citazione dice "incrementa", che tipo di incremento dovrebbe essere? Sicuramente non lineare?

    
posta jnm2 17.06.2011 - 12:47
fonte

1 risposta

11

I testi che citi sono corretti: la modalità CTR riguarda infatti la crittografia dei valori successivi di un contatore e XORing il flusso risultante di byte con i dati da crittografare.

La modalità CTR è una modalità operativa "approvata", come gli stati NIST . Per "incremento", può essere in qualsiasi modo di passare i valori a 128 bit come vuoi (sto assumendo un codice a blocchi con blocchi a 128 bit, come AES), ma se cerchi l'interoperabilità, allora "il" la modalità CTR standard è la seguente:

  • Il contatore è un intero senza segno a 128 bit, vale a dire un valore compreso tra 0 e 2 128 -1 .
  • Il contatore è codificato come una sequenza di 16 byte utilizzando la convenzione big-endian (il primo byte è il più significativo).
  • Il valore iniziale (IV) è la codifica big-endian del primo valore del contatore; in altre parole, con AES / CTR, i primi 16 byte del testo cifrato sono il risultato dello XOR dei primi 16 byte del testo in chiaro con la crittografia dell'IV (come blocco da 16 byte).

Poiché la maggior parte dei linguaggi di programmazione non ha valori integer a 128 bit, l'incremento del contatore viene solitamente eseguito byte per byte (iniziare con il byte 15, incrementarlo, se il risultato è 0, c'è un carry e si continua con il byte 14 e così via, altrimenti basta fermarsi lì.

La sicurezza in modalità CTR si basa su mai con lo stesso valore contatore da utilizzare due volte per una determinata chiave. I blocchi a 128 bit sono un grande spazio; scegliere la IV in modo casuale e uniforme è sufficiente per garantire questa politica di non riutilizzo. Usare la modalità CTR con un codice a blocchi che ha blocchi più piccoli (ad esempio 3DES e i suoi blocchi a 64 bit) potrebbe essere pericoloso, perché uno spazio 2 64 non è così grande.

Un modo di vedere la modalità CTR è che trasforma un cifrario a blocchi in un generatore per un lungo flusso di byte pseudo-casuali; XORando questo flusso con i dati da crittografare si ottiene una cifratura del flusso.

    
risposta data 17.06.2011 - 14:30
fonte

Leggi altre domande sui tag