¿Qué función hash se usa en Windows XP, 7, 8, Linux Ubuntu, Debian, MAC Lion OS X, ...?
Para responder a la parte linux / unix (por ejemplo, ubuntu, debian, os X) de la pregunta, la crypt El algoritmo de hash se usa normalmente (pero es configurable). El estándar es un hash salado (8 caracteres alfanuméricos aleatorios) que se refuerza con la clave unas 5000 veces utilizando un simple hash criptográfico como sha256 / sha512. De nuevo, esto es configurable; por ejemplo, vea un pregunta anterior .
Para ventanas de varias versiones, usan LM Hash y / o hash NTLM que pueden estar encriptados mientras el usuario está conectado. Vea wikipedia para más detalles ; No soy un usuario de Windows.
¿También se utiliza alguna función hash en la contraseña maestra de la placa base?
La BIOS es interesante; es tan fácil restablecer un BIOS (quitar la batería CMOS sin decir, obtener la contraseña) y, por lo demás, es difícil leer la información que nunca me molesté en ver cómo se almacenan las contraseñas. Según esto , a veces solo se almacenan en texto sin formato, a veces muy débilmente hash utilizando funciones de hashing no criptográficas (como CRC-16 o una implementación defectuosa de la misma).
¿Qué pasa con los sitios web?
Depende totalmente de la configuración del backend del sitio web. Los sitios que configuro generalmente usan bcrypt con un factor de fuerza (base-2 rondas de registro) de 12.
¿El hashing evita todos los canales laterales de temporización?
No. La comparación constante de la cadena de tiempo del hash almacenado con el hash de la contraseña ingresada evita ataques de canal lateral. Esto no está garantizado en todas las aplicaciones. Estoy seguro de que la mayoría de los linuxes tienen esto implementado correctamente; y algunos sitios web y sitios web de sitios abiertos definitivamente hacen esto bien. Por ejemplo, reddit utiliza específicamente el constant_time_compare
utilizado para comparando tokens al igual que django 1.3+, sin embargo, django 1.2 se utiliza para usar una simple cadena de caracteres susceptible de ataques basados en el tiempo . Los ataques de temporización concedidos son mucho más fáciles de realizar en una aplicación local que en una red (donde es difícil distinguir una diferencia de nanosegundos de una falla rápida de temporización de las variaciones aleatorias en las velocidades de red).