What hash function is used in Windows XP, 7, 8,Linux Ubuntu, Debian, MAC Lion OS X ,...?
Per rispondere alla parte della domanda linux / unix (ad esempio, ubuntu, debian, os X), la crypt l'algoritmo di hash viene in genere utilizzato (ma è configurabile). Lo standard è un hash salato (8 caratteri alfanumerici aleatori) che è rinforzato con chiave circa 5000 volte utilizzando un semplice hash crittografico come sha256 / sha512. Di nuovo, questo è configurabile; ad esempio, vedi un domanda precedente .
Per le varie versioni di Windows, usano l'hash LM e / o NTLM che possono essere crittografati mentre l'utente è connesso. Vedi wikipedia per maggiori dettagli ; Non sono un utente di Windows.
Also is any hash function used in motherboard master password?
Il BIOS è interessante; è così facile resettare un BIOS (rimuovere la batteria CMOS senza dire la password) e difficile leggere altrimenti le informazioni che non mi sono mai preso la briga di vedere come vengono memorizzate le password. Secondo questo , a volte sono semplicemente memorizzati in testo in chiaro, a volte molto debolmente hash con funzioni di hashing non crittografiche (come CRC-16 o un'implementazione imperfetta di esso).
What about websites?
Dipende totalmente dalla configurazione del back-end del sito web. I siti che ho impostato generalmente usano bcrypt con fattore di forza (round di registro di base 2) di 12.
Does hashing prevent all timing side-channels?
No. Il confronto costante tra le stringhe di tempo dell'hash memorizzato e l'hash della password immessa previene gli attacchi del canale laterale. Questo non è garantito in tutte le applicazioni. Sono sicuro che molti linux hanno implementato correttamente; e alcuni siti Web e framework Web aperti fanno decisamente questo. Ad esempio, reddit utilizza specificamente il constant_time_compare
utilizzato per comparando i token come fa django 1.3+, tuttavia django 1.2 usava usare una semplice uguaglianza delle stringhe suscettibile agli attacchi basati sul tempo . Gli attacchi di temporizzazione consentiti sono molto più facili da eseguire su un'applicazione locale che su una rete (dove è difficile distinguere qualche differenza di nanosecondo da una temporizzazione rapida rispetto alle variazioni casuali delle velocità di rete).