Quanto è brutto troncare un hash?

31

Mi chiedo quanto sia brutto troncare un SHA1 e confrontare solo, ad esempio, i primi 10/12 byte, ecc. Sto lavorando con una lunghezza fissa di 8 byte che ho bisogno di hash per l'unicità ma archiviare con il minimo ingombro possibile (8 altri byte sarebbero belli, ma immagino non fattibili).

Un po 'più di informazioni senza sacrificare i segreti professionali:

  • Alcuni blackbox prendono un valore di 8 byte, lo trasformano e li trasmettono a un server, dove viene verificata la validità rispetto a una tabella di elementi noti.
  • Né il blackbox né il server dovrebbero essere in grado di conoscere gli 8 byte originali.

La soluzione migliore sarebbe una sorta di 1 a 1, una relazione unidirezionale, come la crittografia asimmetrica. Ma non penso che nessun meccanismo di crittografia emetta così pochi byte.

    
posta Agnar 10.11.2014 - 19:02
fonte

2 risposte

40

Non esiste una risposta assoluta, perché dipende dal modello di attacco . Troncando l'hash, si facilitano alcune operazioni; questo è un male se l'attaccante vuole eseguire queste operazioni e renderle più facili effettivamente le rende fattibili .

Ci sono tre caratteristiche principali che le funzioni di hash crittografiche cercano di soddisfare:

  • Resistenza alle preimmagini: data x , dovrebbe essere impossibile trovare m tale che h (m) = x .
  • Resistenza alle seconde preimmagini: data m , dovrebbe essere impossibile trovare m '≠ m tale che h (m) = h (m ') .
  • Resistenza alle collisioni: dovrebbe essere impossibile trovare m '≠ m tale che h (m) = h (m') .

Per una perfetta funzione di hash che ha un output di bit n , i costi per trovare pre-immagini, seconde pre-immagini o collisioni saranno, rispettivamente, 2 n , 2 n e 2 n / 2 . Troncando l'output dell'hash, abbassi questi costi in modo corrispondente. Come regola generale, un costo di 2 64 è molto difficile (fattibile, ma richiede più di una dozzina di PC) e 2 80 è impossibile.

Nel tuo caso, se una collisione è interessante per l'attaccante, e può scegliere cosa è stato cancellato, quindi l'attaccante proverà a inserire due elementi di dati che implica una collisione hash (sul tuo hash troncato). Troncare a 12 byte rende l'attacco abbastanza fattibile, facile se si scende a 8 byte. D'altra parte, se tutto ciò che l'utente malintenzionato può fare è cercare di trovare qualche elemento dati corrispondente a un dato hash troncato (secondo preimage), quindi a 10 o 12 byte questo è ancora troppo difficile per essere fattibile, e con 8 byte è semplicemente "molto costoso" (quindi probabilmente non ne vale la pena).

Se non ci sono attaccanti e stai solo combattendo la sfortuna, allora il troncamento a 8 byte comporta il rischio di collisioni spurie; dovresti raggiungere la prima collisione dopo (in media) inserendo alcuni miliardi di voci. A seconda della situazione, questo può o non può essere tollerato.

    
risposta data 10.11.2014 - 19:31
fonte
17

Per quanto riguarda il troncamento in generale, non è necessariamente negativo. In effetti, il L'algoritmo SHA-384 è definito come un SHA-512 (leggermente modificato) e quindi troncando il risultato a 384 bit. Vorrei aggiungere alle risposte esistenti fornendo il materiale relativo al troncamento dallo standard SHA.

FIPS 180-4 , lo standard SHA, consente esplicitamente troncamento dei bit più a sinistra.

Some application may require a hash function with a message digest length different than those provided by the hash functions in this Standard. In such cases, a truncated message digest may be used, whereby a hash function with a larger message digest length is applied to the data to be hashed, and the resulting message digest is truncated by selecting an appropriate number of the leftmost bits. For guidelines on choosing the length of the truncated message digest and information about its security implications for the cryptographic application that uses it, see SP 800‑107 [SP 800‑107].

SP 800-107 spiega le regole per troncamento:

Let the (shortened) message digest be called a truncated message digest, and let λ be its desired length in bits. A truncated message digest may be used if the following requirements are met:

  1. The length of the output block of the approved hash function to be used shall be greater than λ (i.e., L > λ).

  2. The λ left-most bits of the full-length message digest shall be selected as the truncated message digest.

    For example, if a truncated message digest of 96 bits is desired, the SHA‑256 hash function could be used (e.g., because it is available to the application, and provides an output larger than 96 bits). The leftmost 96 bits of the 256-bit message digest generated by SHA‑256 are selected as the truncated message digest, and the rightmost 160 bits of the message digest are discarded.

  3. If collision resistance is required, λ shall be at least twice the required collision resistance strength s (in bits) for the truncated message digest (i.e., λ ≥ 2s).

Termina la sezione sul troncamento con questo avviso sulla sicurezza di a hash troncato.

Truncating the message digest can impact the security of an application. By truncating a message digest, the expected collision resistance strength is reduced from L/2 to λ/2 (in bits). For the example in item 2 above, even though SHA‑256 provides 128 bits of collision resistance, the collision resistance provided by the 96-bit truncated message digest is half the length of the truncated message digest, which is 48 bits, in this case.

    
risposta data 10.11.2014 - 22:05
fonte

Leggi altre domande sui tag