Crittografia XOR di base per messaggi più lunghi

1

Quanta forza efficace è la seguente aggiunta a una cifratura XOR a 512 bit di base?

Chiave privata = Chiave0 costituita da 512 bit generati casualmente. Questa chiave non viene mai utilizzata per crittografare o decrittografare nulla.

Il messaggio di testo normale deve essere crittografato.

  1. Genera un unico sale casuale a 16 byte per questo particolare messaggio.

  2. Salt Key0 ed esegui l'hash SHA512 per creare Key1.

  3. Primo blocco XOR con Key1.

  4. Esegui il Key1 (non salmiato qui e in tutti gli altri blocchi) tramite SHA512 per creare Key2.

  5. Secondo blocco XOR con Key2.

  6. Continua fino a quando l'intero messaggio non è stato crittografato.

  7. Conserva sale + testo cifrato.

    Poiché ogni singolo blocco di ogni singolo messaggio è crittografato con una chiave diversa, a condizione che la stessa quantità di sale venga generata casualmente più di una volta e collisioni di hash, dovrebbe evitare il pattern ripetuto. Inoltre, l'invio di una stringa di 0 binari rivelerebbe solo l'hash salato della chiave, quindi sarebbe inutile su altri messaggi. Sarebbe possibile forzare l'hash della chiave per recuperare la chiave effettiva?

posta tartstbwtp 18.07.2015 - 03:09
fonte

1 risposta

1

Quello che stai essenzialmente cercando di fare è costruire un generatore di numeri pseudocasuali (con sale + Key0 come seme) e usare l'output di esso come flusso chiave per costruire un codice di flusso. Alcuni commenti:

  1. Considera che se il primo blocco è tutto 0 , allora tutte le chiavi successive possono essere recuperate. Ciò deriva dal fatto che il primo blocco è XOR-ed con Key1 e Key1 XOR 0 = Key1 . Se è noto Key1 , può essere passato a SHA512 per produrre Key2 e così via.
  2. Questo non è uno scenario forzato, anche se il primo blocco non è tutto 0 , supponiamo che si tratti di una sorta di dati di intestazione in cui sono noti k bit. Quegli k bit possono ora essere XORed rispetto al primo blocco di testo cifrato per recuperare k bit di Key1 . Lo spazio di ricerca ora è ridotto a 2^(512-k) .
  3. (Crittografia) Le funzioni hash in generale forniscono solo garanzie che non possono essere invertite (dato H(m) non puoi trovare m ) e sono resistenti alle collisioni (è difficile trovare m' != m tale che H(m) == H(m') . Non dicono nulla sul fornire un output indistinguibile dal caso, che è richiesto da un generatore di numeri pseudocasuali crittograficamente sicuro.

Supponendo un modello di oracolo casuale (quindi il punto 3 può essere ignorato e l'output di un hash è considerato come casuale reale) e un testo in chiaro casuale uniforme dovrebbe avere una sicurezza di 512 bit. Dubito strongmente che sia così, anche se è difficile mettere un numero esatto sulla sicurezza dello schema. La mia raccomandazione è di utilizzare una codifica stream ben studiata con caratteri casuali.

    
risposta data 18.07.2015 - 04:41
fonte

Leggi altre domande sui tag