Qualsiasi vulnerabilità nell'implementazione .net per C # object.GetHashCode?

7

Ho già chiesto questa domanda su SO, ma penso che questo forum sia più appropriato per discutere di problemi di sicurezza.

Il mio punto è che la maggior parte delle lingue OO ha un modo per ottenere un codice hash univoco per un oggetto:

  • Python: obj.__hash__()
  • Java: obj.hashCode()
  • .NET: obj.GetHashCode()

È risaputo che per Python un Denial of Service vulnerability ( pdf del congresso originale ) è stato indirizzato dalla versione 3.30 attraverso una randomizzazione seme (anche se non funziona per una finestra singola interpreter ).

La mia domanda è perché questa preoccupazione è stata ignorata nell'implementazione predefinita di .Net hash? Dal punto di vista della sicurezza, qual è l'approccio corretto: la stessa randomizzazione di seed non dovrebbe essere suggerita anche agli sviluppatori di team di framework .Net?

    
posta python3.5_32bit_win7_64bit 22.06.2016 - 12:10
fonte

1 risposta

1

Lo scopo dei metodi hash elencati (i metodi forniti dagli oggetti comuni per conformarsi a un'interfaccia usata dalle collezioni standard) è di mappare tutti i possibili valori per i quali viene calcolato un hash sull'intero intervallo di valori validi del tipo di valore hash . La casualità usata in questa mappatura non è per sicurezza. La mappatura deve essere sufficientemente casuale in modo che sequenze e pattern comuni non causino una distribuzione non uniforme nell'uso di bucket comuni alle raccolte basate su hash.

Le mappe hash, i multimaps e gli insiemi possono essere usati in schemi di sicurezza più grandi ma, da soli, non sono intesi per essere sicuri. Sono semplicemente raccolte progettate per fornire una ricerca indicizzata. Gli hash utilizzati in questo modo forniscono indici molto più veloci rispetto agli alberi binari.

Il termine hashCode è in realtà fuorviante in questo modo. Creazione di un hash per un tipo di stringa in modo che una mappa hash possa essere indicizzata utilizzando tale stringa non è una codifica. Il valore hash risultante derivante da un algoritmo di hashing di questo tipo può eseguire il mapping su un numero elevato di valori oggetto, ma l'intenzione in questo contesto NON è quella di nascondere tali valori oggetto da un utente malintenzionato.

Nel caso degli algoritmi hash MD5 o SHA utilizzati nei protocolli di sicurezza, l'intenzione è quella di creare una probabilità matematicamente bassa di indovinare il valore di input dall'hash in un numero praticamente possibile di tentativi. I metodi forniti da oggetti comuni in queste lingue in modo che possano essere inseriti in raccolte che li indicizzano utilizzando bucket non devono MAI essere usati per sostituire gli algoritmi hash progettati per essere utilizzati nei protocolli di sicurezza.

    
risposta data 10.02.2017 - 08:16
fonte

Leggi altre domande sui tag