Uscita SHA-3 più corta

8

Ho notato nel nuovo standard SHA-3 che ha una dimensione di output variabile. Sapendo che un output più lungo è ovviamente migliore (maggiore entropia), qual è il limite inferiore della dimensione dell'output? Può il mio output con hash, ad es. essere lungo 8 bit? So che per la maggior parte degli scenari questo non sarebbe sicuro.

    
posta Sebastian 16.08.2015 - 12:06
fonte

4 risposte

4

Hai un'idea sbagliata:
Con SHA3 / Keccak, essendo un po 'strano rispetto alle precedenti funzioni di hash, la dimensione dell'output non è paragonabile alla sicurezza. Un certo livello di sicurezza richiede una dimensione di output minima, ma l'output può essere reso più lungo senza aumentare la sicurezza come hash.

La dimensione minima dell'hash (di Keccak in generale, non del sottoinsieme standardizzato chiamato SHA3) è di 1 bit:

Nella costruzione della spugna il valore della somma c+r è limitato, ma quanto di% è c e quanto r è liberamente selezionabile. Crea r=1 e fai una sola iterazione nella parte di spremitura (dopo la linea verticale), quindi l'output hash z0 ha esattamente 1 bit.

    
risposta data 16.08.2015 - 12:24
fonte
3

Lo standard SHA-3 è vecchio e nuovo.

È "vecchio" perché la competizione per la selezione della funzione hash SHA-3 è iniziata nel 2009 e sappiamo che dal 2012 Keccak ha vinto.

D'altra parte, la standardizzazione di SHA-3 è abbastanza nuova, considerando che FIPS-202 è stato standardizzato nell'agosto 2015.

Se si desidera utilizzare SHA-3, la lunghezza di uscita più breve è 224 bit (SHA3-224), la lunghezza di uscita più lunga per SHA-3 è 512 bit (SHA3-512).

Tuttavia FIPS-202: Standard SHA-3: hash ed estensibili basati su permutazione -Output Functions definisce anche due funzioni di output exentdible (XOF): SHAKE128 e SHAKE256 che hanno entrambe una lunghezza di output variabile. Notare che SHAKE128-256 non è lo stesso di SHA3-256 a causa di diversi padding.

Le funzioni SHAKE consentono lunghezze di output arbitrarie, a patto che Keccak lo supporti. Dato che Keccak si basa sulla costruzione spugnosa delle lunghe uscite non è un problema, tuttavia è possibile ottenere uscite corte e arbitrarie con un semplice troncamento. Le funzioni SHAKE accettano la lunghezza del digest in bit e non eseguono alcun controllo del limite inferiore, il che significa che 1 bit è l'output più breve possibile di queste funzioni.

    
risposta data 16.08.2015 - 17:28
fonte
0

Se guardi FIPS 202 (il documento standard SHA-3), le funzioni di output estensibili SHAKE (XOF) sono definite in questo modo (pagine 20-21):

SHAKE128(M, d) = KECCAK[256](M || 1111, d),
SHAKE256(M, d) = KECCAK[512](M || 1111, d).

... dove M è il messaggio da sottoporre a hash e d è la lunghezza di output desiderata. La funzione KECCAK è definita a pagina 20:

KECCAK[c](N, d) = SPONGE[KECCAK-p[1600, 24], pad10*1, 1600–c](N, d).

L'algoritmo SPONGE è definito in p. 18 e specificano che il valore di d può essere un numero intero non negativo.

Ne consegue che la dimensione dell'output consentito più breve per le funzioni SHAKE è in realtà di 0 bit .

Tabella 4 di p. 23 del documento riepiloga i livelli di sicurezza delle varie funzioni SHA. Per gli SHAKE, i livelli di sicurezza sono dati da formule che prendono come parametro la dimensione di output d . Ad esempio, per SHAKE128:

  • La resistenza alla collisione è min(d/2, 128) bit;
  • La resistenza di preimage è min(d, 128) bit.
  • La seconda resistenza di preimage è anche min(d, 128) bit.

Applicando tali formule, quando d = 0 otteniamo questi livelli di sicurezza (sia per SHAKE128 che per SHAKE256):

  • 0 bit di resistenza alla collisione;
  • 0 bit di pre-resistenza;
  • 0 bit della seconda resistenza di pre-immagine.

Un livello di sicurezza n -bit significa che a un utente malintenzionato è garantito il successo in non più di% tentativi di2^n. Pertanto, un livello di sicurezza a 0 bit significa che un utente malintenzionato non supera più di 2^0 tentativi. E come prova di ciò, ecco un attacco di collisione riuscito sulla lunghezza dell'output a 0 bit SHAKE256:

SHAKE256(0x00, 0) = SHAKE256(0xff, 0)

Quindi la matematica funziona bene e le uscite SHAKE a lunghezza zero sono esattamente sicure come suonano.

Knowing that longer output is obviously better (higher entropy) [...]

Come hanno sottolineato altre risposte, più a lungo non significa necessariamente migliore. Le formule di cui sopra (pagina 23 di FIPS 202) danno una risposta precisa:

  • I livelli di sicurezza di SHAKE128 e SHAKE256 come funzioni hash non possono superare rispettivamente i 128 e i 256 bit;
  • Se il tuo output è abbastanza corto, il livello di sicurezza sarà inferiore a tali valori.
risposta data 30.12.2016 - 00:08
fonte
-3

La funzione Keccak ha uno stato interno di 1600 bit, ad un certo punto era di 4800 bit ... indipendentemente dalle dimensioni di output lo stato interno è ciò che determina la sicurezza, non la lunghezza a cui è compresso.

    
risposta data 06.12.2015 - 14:40
fonte

Leggi altre domande sui tag