Stream / Blocca la crittografia usando la funzione XOR e Hash?

2

È possibile utilizzare una funzione di hash come sha1 o ripemd-160 per la generazione sicura di chiavi in un codice di flusso / blocco? Ovviamente una chiave ripetuta come "abc123abc123abc123" sarebbe pessima, e una tastiera temporanea sarebbe impraticabile per i dati di grandi dimensioni ... ma se si usasse una funzione di hash per ricavare nuove chiavi dalla password originale come:

CODICE DUMMY:

$password = "secure password here!";
$round =0;
while(true){
$key = sha1($password . $round);
$data = READ 40 BYTES OF DATA HERE
$result .= XOR($data,$key);
$round++;
}

Non ho intenzione di usarlo per qualcosa, ma solo curioso, cosa sarebbe sicuro / insicuro su questo metodo ... grazie ...

    
posta Daniel Valland 17.05.2014 - 20:23
fonte

1 risposta

0

Ci sono sicuramente problemi con questo schema. Innanzitutto, sembra essere deterministico: ogni volta che crittografate un nuovo stream con la stessa password, inizia con $round=0 . Così il tuo stream è come un one-time-pad che viene usato ripetutamente - il time pad che è facilmente attaccabile da XORing insieme a flussi criptati e sfruttando modelli in testo in chiaro sottostante. Certo, questo potrebbe essere facilmente risolto facendo qualcosa come $round = generate_random_80_bit_number() e quindi aggiungendo questo numero di 80 bit all'inizio del testo cifrato.

Sono un po 'preoccupato per le funzioni di hash crittografiche basate su un Merkle-Damgard costruzioni che sono suscettibili di attacchi di estensione . Il motivo per cui HMAC non è H(K ++ m) , ma H(K1 ++ H(K2 ++ m)) . Non ho elaborato completamente i dettagli su come sfruttare il tuo schema con numeri tondi sequenziali, ma potrei immaginare attacchi alla costruzione MD e l'utilizzo di cicli sequenziali aggiunti alla fine di un prefisso comune.

    
risposta data 17.05.2014 - 20:45
fonte

Leggi altre domande sui tag