Sicurezza del mio algoritmo di hash homebrew [chiuso]

5

Sto sviluppando un algoritmo hash lungo 16 caratteri. Ho un secondo algoritmo che genera stringhe di char 1024 casuali. Questo algoritmo esegue il ciclo e rileva se c'è una collisione tra l'hash appena generato e uno qualsiasi precedente.

quante iterazioni senza collisione sono necessarie prima di poter affermare che il mio algoritmo hash è "quasi sicuro"?

    
posta Flavien B. 17.04.2017 - 16:45
fonte

2 risposte

9

I have a second algorithm that generates random 1024 char strings. This algorithm loops and detects if there's a collision between the newly generated hash and any previous one. How many iterations with no collision do I need [...]?

Con una funzione hash vuoi una distribuzione uniforme. Pertanto, se esegui l'hash dei dati casuali un paio di volte, desideri che i risultati contengano ogni risultato per lo stesso numero di volte.

Questa proprietà di distribuzione uniforme è difficile da tradurre nella tua domanda. Vuoi conoscere il numero di risultati senza collisione. Tuttavia, questo è difficile da misurare perché ogni iterazione ha una possibilità di una collisione. Questa possibilità aumenta con il numero di iterazioni. Ma poiché è una probabilità, se ottieni una collisione dopo 10.000 iterazioni non sai se la tua funzione di hash è difettosa o che sei sfortunato.

Un modo migliore sarebbe probabilmente quello di generare molti valori di hash e quindi osservare la distribuzione di 0 e 1 di ogni bit. In una distribuzione uniforme, ci si aspetta che ogni bit abbia il 50% di possibilità di essere 0 e il 50% di possibilità di essere 1.

Per quanto riguarda il calcolo della probabilità, questo articolo può aiutare a calcolare la probabilità di una collisione.

Questo articolo fornisce numeri sull'uniformità delle funzioni hash comunemente utilizzate.

    
risposta data 17.04.2017 - 17:39
fonte
43

How many iterations with no collision do I need before I can claim that my hash algorithm is "almost secure"?

Mai. Non è possibile richiedere che l'algoritmo hash sia sicuro. Deve essere attentamente controllato da esperti crittografi / matematici che sanno esattamente cosa stanno facendo.

Non ci si può aspettare di avere abbastanza potenza / denaro di calcolo per rinforzarlo abbastanza a lungo, specialmente se si è soli. Google impiegò più di un anno e più di $ 1 milione per trovare quella famosa collisione SHA-1 . Pensi di avere abbastanza tempo / soldi?

Inoltre, la bruteforcing da sola non è il modo migliore per rompere una funzione hash. La funzione può avere grossi difetti che potrebbero essere molto difficili da trovare tramite bruteforce. Ecco perché hai bisogno di persone di talento per controllare l'algoritmo.

A meno che tutto questo lavoro non sia stato fatto, dovresti davvero usare le funzioni standard di hash che sono considerate sicure al giorno d'oggi.

    
risposta data 17.04.2017 - 16:56
fonte

Leggi altre domande sui tag