Devo usare le proprie costanti quando uso algoritmi di hashing ben noti?

20

Capisco che sia importante utilizzare algoritmi di hashing ben noti e ben testati invece di progettare il mio. Per questo spesso sono disponibili implementazioni di riferimento, che inizializzano le costanti necessarie con numeri casuali selezionati manualmente.

Quando utilizzo tali implementazioni, migliora la sicurezza per selezionare le costanti personalizzate? Mi aspetterei che un utente malintenzionato utilizzi i valori più probabili durante la bruteforcing dei miei hash, che sono quelli del riferimento.

Un algoritmo di hashing crittografico strong non dovrebbe essere fragile, nemmeno con le tabelle arcobaleno quando si usa la salatura. Quindi, da un punto di vista teorico, non dovrebbe esserci molta differenza. Tuttavia, non sono un esperto, quindi mi piacerebbe sentire quello che dici.

    
posta danijar 18.08.2014 - 18:14
fonte

4 risposte

30

No. Le costanti fanno parte di ciò che rende sicuro l'hash e le costanti nelle specifiche sono quelle che sono state utilizzate negli esami della comunità crittografica delle funzioni di hash che attualmente crediamo siano sicure. È stato dimostrato che le costanti intenzionalmente scelte male possono rompere una funzione di hash in modi sottili ma sfruttabili , e arrivare con le tue costanti potrebbe inavvertitamente lasciati con una debole funzione di hash.

    
risposta data 18.08.2014 - 18:26
fonte
8

No, a causa di ragioni che hai già affermato: non progettare i tuoi algoritmi. Puoi ottenere resistenza dalle tabelle arcobaleno usando sali unici , non c'è bisogno di fare confusione con le costanti dell'algoritmo di hashing. Gli algoritmi sono stati oggetto di approfondite analisi crittografiche da parte di esperti internazionali, come per NIST SP800-90 Dual Ec Prng , è probabile che tu non abbia le risorse per fare lo stesso per le tue costanti. Tuttavia, nella maggior parte dei casi i numeri vengono scelti in modo molto casuale . Potresti anche avere dei vantaggi scegliendo le tue costanti, in alcuni casi, ma io ancora non lo consiglio.

Modifica: fsmv ha evidenziato che non devi implementare gli hash te stesso, ma usa una biblioteca. Sono d'accordo. Se si desidera veramente utilizzare le proprie costanti, ottenere un'implementazione di libreria ben nota (fare attenzione alla licenza) dell'algoritmo e applicare le modifiche a tale codice. Le implementazioni sono state rese resistenti all'attacco del sidechannel.

    
risposta data 18.08.2014 - 18:26
fonte
2

Non sono un esperto di sicurezza, ma l'NSA non ha avuto una brutta reputazione per aver scelto intenzionalmente costanti rompibili per uno degli standard NIST qualche tempo fa?

Dipende dal tuo modello di minaccia, suppongo. Se sei preoccupato per la NSA, allora forse dovresti assumere i migliori crittografi del mondo e fargli trovare costanti migliori. Altrimenti, vai con quello che c'è negli standard, perché è probabile che siano dannatamente sicuri contro altri agenti.

    
risposta data 20.08.2014 - 09:13
fonte
1

Risposta breve: No

Le costanti fanno parte dell'algoritmo. Se non ti fidi delle costanti, non fidarti dell'algoritmo. Vale la pena guardare alcuni esempi.

Merkle-Damgård hashes

Una costante che potrebbe essere modificata in tale algoritmo è la IV. Per l'analisi della sicurezza, la modifica della IV equivale alla preposizione dei dati con un blocco di materiale chiave. Ma il prepending sarebbe preferito a causa del non aver bisogno di cambiare l'algoritmo attuale.

Tuttavia, è già noto, che la semplice preparazione di alcuni materiali chiave non è un buon modo per costruire un hash con chiave. Un approccio migliore sarebbe utilizzare una costruzione HMAC.

L'IV non è l'unica costante in un hash Merkle-Damgård. Ci sono anche costanti nella funzione di compressione. Se scegli le tue costanti, c'è un rischio significativo, che per qualche motivo sarebbero deboli. Quindi, anche se tutte le ricerche indicano che l'originale è sicuro, la tua versione potrebbe essere debole. Se si rileva una debolezza nell'algoritmo originale, è improbabile che tu sia riuscito a trovare costanti migliori.

In effetti, per ottenere delle costanti migliori in quel caso, avresti dovuto trovare la debolezza e una soluzione. In altre parole, se non puoi scrivere un articolo sul perché le costanti sono migliori degli originali e ottenerle accettate in un diario sulla crittografia, allora le tue costanti non sono migliori.

DECDRBG

Questo è un buon esempio di non fidarsi delle costanti. Le costanti originali sono arrivate senza alcuna spiegazione su come sono state costruite. Questo è un segnale di avvertimento e quelle costanti non dovrebbero essere considerate attendibili.

Un'ulteriore analisi di come quelle costanti avrebbero potuto essere costruite ha rivelato una possibile backdoor. L'intero algoritmo è ora considerato sospetto.

Se si desidera utilizzare quell'algoritmo, non si dovrebbero usare le costanti originali non attendibili. Ma se hai generato le tue costanti, come puoi far credere a qualcun altro le tue costanti?

In realtà con le conoscenze che abbiamo ora, DECDRBG con costanti non standard è uno dei modi più semplici per creare un algoritmo crittografico con la tua backdoor e farlo sembrare un errore innocente.

DECDRBG mostra perché una volta che vi è uno scetticismo giustificato sulle costanti in un algoritmo, non ci si deve fidare dell'algoritmo finché qualcuno non ha trovato un vero criterio per decidere quali sono le buone costanti per l'algoritmo.

    
risposta data 20.08.2014 - 10:08
fonte

Leggi altre domande sui tag