PKCS # 8 es un estándar flexible; es una sintaxis para codificar claves privadas con cifrado opcional basado en contraseña. El nivel de seguridad que se puede alcanzar depende del algoritmo utilizado para convertir la contraseña en una clave y del algoritmo criptográfico que funciona con esta clave. PKCS # 5 define una serie de combinaciones de derivación de clave basada en contraseña y algoritmo de cifrado.
Por ejemplo, supongamos que utiliza PBKDF2 con HMAC / SHA-1 para la obtención de claves y 3DES para el cifrado. 3DES acepta una clave de 192 bits; sin embargo, solo 168 de estos bits son realmente usados. La salida de SHA-1 tiene un tamaño de 160 bits, y esto impone un límite rígido de 160 bits a la seguridad de PBKDF2 con HMAC / SHA-1. Por lo tanto, con esa combinación, tiene poco sentido usar una contraseña con más de 160 bits de entropía.
Entropy no se deriva automáticamente de la contraseña length , pero si utiliza caracteres aleatorios (caracteres aleatorios uniformes, elegidos independientemente entre sí, es decir, no en todo el tipo de contraseña que un usuario humano podría encontrar) entonces la relación entre longitud y entropía es fácil. Hay 95 caracteres ASCII imprimibles (sin incluir el espacio), por lo que cada carácter aleatorio aporta aproximadamente 6,57 bits de entropía (porque 2 6,57 es aproximadamente igual a 95). Por lo tanto, 160 bits de entropía se logran con 25 caracteres. Con estos algoritmos, no tendría ningún sentido utilizar más de 25 caracteres, siempre que estos personajes realmente se elijan de forma aleatoria, uniforme e independiente entre sí.
De hecho, las funciones de derivación de clave basadas en contraseña como PBKDF2 incluyen miles de iteraciones, de modo que cualquier intento de búsqueda exhaustiva se ralentizaría; esto es equivalente a algunos bits adicionales de entropía ( en ese contexto ). Si hay, digamos, 1000000 iteraciones, entonces estas cuentan como 20 bits (porque 2 20 es aproximadamente igual a 1000000, y cada iteración PBKDF2 implica aproximadamente la misma cantidad de trabajo que un bloque de cifrado 3DES elemental) . De la figura anterior, tenga en cuenta estos 20 bits eliminando 3 caracteres, hasta 22. Por supuesto, esto depende del número de iteraciones que realmente esté usando.
Podría decirse que ir más allá de 128 bits de entropía ya es una gran pérdida de tiempo.
Para obtener más información sobre estos temas, lea las siguientes respuestas: