No estoy seguro de a qué te refieres. Hay dos categorías principales de usos de un hash criptográfico.
-
Para verificar la integridad de un archivo grande con una suma de verificación entregada de forma segura. Por ejemplo, la suma de comprobación se entrega a través de un canal seguro (por ejemplo, https desde un sitio conocido), mientras que el archivo se transmite a través de un canal no seguro pero se compara con la suma de verificación al final, y
-
Para autenticar la identidad de un usuario a través de una contraseña sin almacenar la contraseña en texto sin formato en una base de datos. Es decir, si mi contraseña es Correct Horse Battery Staple
, almacenaría $2a$12$5vc0XINA0MiPvgE3ffLnaOVGqrMeskLKjFvIg4BKryq3v5PXt1oIi
como un hash bcrypt de 184 bits en mi base de datos (con un salt de 128 bits). Cuando un usuario que conoce la contraseña secreta inicia sesión, el servidor compara el hash generado a partir de la contraseña (y salt) con el hash almacenado y solo los ingresa si coinciden.
La posibilidad de que un atacante adivine aleatoriamente el hash en una prueba tiene 1 oportunidad en 2 {longitud de bit del hash} . Entonces, para un hash de 256 bits, un atacante tiene 1 en 115792089237316195423570985008687907853269984665640564039457584007913129639936 posibilidad de adivinar aleatoriamente el hash en un intento (e incluso si los dejas probar por mil millones de segundos por segundo para un millón de unidades en el poder de un centavo). La contraseña de ~ 10 34 y su posibilidad de solo romper con éxito la contraseña es de solo 1 en 10 42 (por ejemplo, la posibilidad de ganar el powerball es de 1 en 10 ^ 8; por lo que es similar a su posibilidad de jugar al powerball cinco veces consecutivas y ganar el premio mayor cada una de esas cinco veces. Y nuevamente, eso fue para un hash de 256 bits, un hash de 184 o 512 o 1024 bits sería exponencialmente más fuerte. p>
Ahora, si tienes un hash que tiene un tamaño no fijo, parece ser contraproducente. P.ej,. transfiere un archivo de 1 GB a través de Internet, ¿realmente desea calcular una suma de comprobación en una suma de comprobación del mismo tamaño o mayor? Además, eso filtraría información sobre los datos que se hash. Por ejemplo, si su función de hash aumenta en longitud en dos bytes por cada byte agregado, puede encontrar la longitud de la contraseña original; lo que podría ser útil para encontrar rápidamente las contraseñas más cortas para intentar la fuerza bruta mediante la búsqueda en el diccionario de contraseñas de esa longitud. Y nuevamente, 2 256 ya es lo suficientemente fuerte como para superar a cualquier atacante factible, no hay necesidad de intentar usar un hash de 1 GB de tamaño para evitar que un atacante pueda hacer 2 8589934592 intentos, ya que no hay forma viable de hacer 2 256 incluso con suposiciones muy poco razonables.
Dicho esto, expansión de la clave , es decir, tomar una clave pseudoaleatoria de una longitud relativamente corta dada (como 128 bits / 256 bits) y luego usarla como "semilla" "para crear muchas más claves pseudoaleatorias (de longitud total mucho más larga que la clave original) se usa comúnmente para muchos propósitos criptográficos. Por ejemplo, en AES128, una clave de 128 bits se expande en 11 claves redondas que son de 128 bits (por ejemplo, 1408 bits en total) que se utilizan en cada ronda del proceso de cifrado AES.
De manera similar, un cifrado de flujo es a menudo esencialmente una expansión de clave; por ejemplo, puede construir un cifrado de flujo a partir de un cifrado de bloque que funcione en modo contador. Básicamente, digamos que tiene un cifrado de bloque (como AES256) donde toma un bloque de datos P de 256 bits, una clave K de 256 bits, y puede obtener un texto cifrado de una función de cifrado como C = E (K, P). Bueno, si comienza con un P de 256 bits aleatorio, puede crear un flujo pseudoaleatorio de longitud muy larga utilizando C0 = E (K, P) para los primeros 256 bits, C1 = E (K, P + 1) para los siguientes 256 bits , C2 = E (K + 2) para los siguientes 256 bits. Y puedes hacer esto para tener una transmisión pseudoaleatoria que puedas XOR con tu mensaje. Y puede hacer esto por muchos terabytes de datos antes de que los ataques sean factibles computacionalmente.
Sin embargo, no llamaría al cifrado de expansión / flujo de clave al contrario de un hash. Solo son cosas diferentes.