>
> Message: 7
> Date: Mon, 16 Jan 2012 17:54:46 +0100
> From: "Luca 'remix_tj' Lorenzetto" <lorenzetto.l...@gmail.com>
> Subject: [ml] Uno o più hash?
> To: ml@sikurezza.org
> Message-ID:
>        <CAKuX69p3pZT8Cy7GpXybTdoBsjQ+qVZ1Zt2Ldh=pnaqjiq9...@mail.gmail.com>
> Content-Type: text/plain; charset=UTF-8
>
> Salve a tutti,
>
> per un applicazione interna abbiamo bisogno di mantenere l'hash di
> alcuni file che vengono archiviati in una zona del filesystem che
> chiamiamo "cassaforte". Dobbiamo quindi garantire che i file che sono
> dentro non sono stati corrotti o modificati senza utilizzare le
> procedure che vengono messe a disposizione. Non sono interessato a
> firme digitali & co, in quanto lo scopo è soltanto verificare che il
> file sia rimasto integro e nel caso ripristinarlo dai backup.
>
> In questa macchina ho a disposizione solo OpenSSL 0.9.7d  (che mi da a
> disposizione tra i tanti sha-1, md5 e ripemd160) e niente sha256sum o
> sha512sum. Non posso aggiungere, nè aggiornare software.
>
> Volevo quindi chiedere: ha senso usare qualcos'altro (ad esempio
> qualche libreria java) che calcoli hash come sha512 oppure può essere
> garantita altrettanta sicurezza salvando due hash fatti calcolare a
> OpenSSL (ad esempio sha1 ripemd160)?
> Quale è la possibilità di trovare una collisione per entrambi gli algoritmi?
>
> Ciao ciao
>
> Luca
>


Caro Luca,

a te non preoccupa tanto un "collision attack" quanto un "premiage
attack", ovvero
tu hai gia' un file con una sua hash e non vuoi che un altro riesca a
riprodurre
la stessa hash con un file diverso.

Sia H1 una funzione (unkeyed) hash con hash lungo n1 bit.
Per trovare una preimmagine su H1 dovrai fare circa 2^n1 operazioni di hash.
Similmente con H2 -> 2^n2.
Ovviamente nell'ipotesi di H1 e H2 "ideali".
Poniamo n2 > n1 per fissare le idee.

Se tu ora calcoli sia H1(f) che H2(f), quante operazioni dovrai fare
per trovare una preimmagine?
Sicuramente almeno 2^n2, perche' devi rompere in particolare la hash
piu' grande.
E al massimo dovrai fare 2^(n1+n2) operazioni, perche' provando tutte le coppie
troverai la tua preimmagine per entrambe le hash.
Ma qual'e' il valore "vero"?

Quello e' dato dalla dipendenza statistica tra H1 e H2.
Se assumi che siano indipendenti tra di loro, allora le operazioni
saranno 2^(n1+n2),
ovvero usarle simultaneamente e' come usare una funzione hash con hash
di n1+n2 bit.
Mentre in caso opposto e' che H1(f) sia un sottoinsieme dei bit di
H2(f), e ovviamente
in questo caso l'uso combinato e' inutile.

Passando al caso concreto, possiamo approssimare sha1 a una funz. hash
con hash di 60 bit per essere conservativi
mentre possiamo dare 160 bit a  ripemd160, quindi usarle assieme dara'
160+60=220 bit.

Se invece tu usassi sha256 avresti 256 bit e quindi poco piu'.

Conclusione: a meno che non salti fuori qualche fatto nuovo relativo
alla forza/debolezza delle hash function che hai
gia' implementato, puoi tranquillamente usarle assieme, xche' dubito
molto che ci sia una relazione statistica significativa.
Cioe' per ogni file salvi entrambi gli hash.

/ remark /
Una loro composizone funzionale sarebbe inutile, perche' darebbe solo
la sicurezza della piu' forte, ovvero 160
(ma non e' sicuramente quello che vuoi fare, l'ho detto solo per
evitare di confondere un lettore poco attento).
/   /


Max
________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List

Rispondere a