Saltar al contenido principal
LibreTexts Español

2.4: Hash criptográfico

  • Page ID
    51871
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)
    Se recomienda leer el capítulo Criptografía moderna antes de seguir con este.

    What You’ll Learn

    1. Qué hace una función hash
    2. Qué hace una función hash criptográfica y cómo se distingue de una función hash normal
    3. Algunos ejemplos del uso de funciones hash criptográficas

    Una función hash es cualquier función (computacional) que transforma datos de un tamaño arbitrario (por ejemplo, un nombre, un documento o un programa de cómputo) en datos de un tamaño fijo (por ejemplo, un número de tres dígitos o un número de 16 bits). El resultado de una función hash se conoce como resumen, huella digital, valor hash o, simplemente, hash (del mensaje de entrada).

    Una función hash criptográfica tiene las siguientes propiedades que la hacen útil en aplicaciones criptográficas:

    1. El mismo mensaje de entrada siempre producirá el mismo hash de salida.
    2. No es posible generar el mensaje de entrada a partir del valor hash de salida, excepto por medio de un ataque de fuerza bruta (es decir, probando todos y cada uno de los mensajes de entrada posibles).
    3. No es posible encontrar dos mensajes de entrada diferentes que produzcan el mismo valor hash de salida.
    4. Un pequeño cambio en el mensaje de entrada cambia tanto el valor hash de salida que el nuevo valor hash parece no tener ninguna relación con el anterior.

    De estas propiedades, las dos primeras son similares en la mayoría de los protocolos de cifrado. Si se cifra el mismo mensaje en dos ocasiones diferentes puede esperarse el mismo resultado, suponiendo que se use la misma clave criptográfica. Tan solo con el texto cifrado, no es posible generar el texto en claro (sin la clave criptográfica). Sin embargo, con la clave criptográfica, el cifrado permite retroceder desde el texto cifrado hasta el texto en claro. Las funciones hash son, de manera inherente, unidireccionales; es decir, no hay una clave para retroceder. Que el resultado se conozca también como resumen o huella digital es una analogía útil: aunque la salida de una función hash criptográfica no cifra toda la información del mensaje original (en la misma forma que lo hace un texto cifrado), sí cifra suficiente información para identificar el mensaje de entrada. Lo anterior, con base en las propiedades 1 y 3, y en que es muy difícil de falsificar (propiedad 2).

    Veremos aplicaciones de las funciones hash criptográficas en los capítulos El intermediario, Contraseñas y Criptografía asimétrica. Pero veamos aquí una aplicación sencilla, conocida como el esquema de compromiso.

    Usar funciones hash criptográficas para probar cuán listo eres

    Assata y Bobby intentan resolver un difícil problema matemático. Assata obtiene la respuesta (S) primero y quiere probarle a Bobby que la ha obtenido antes que él sin decirle la solución. Así que Assata toma un hash criptográfico de la solución S, hash(S), y se lo da a Bobby. Puesto que el hash es criptográfico, Bobby no puede deducir S a partir del hash(S) (propiedad 2). Cuando Bobby resuelve eventualmente el problema, encuentra S por sí mismo, puede calcular el hash(S) y verificar que el resultado es el mismo que Assata le compartió. Por las propiedades 1 y 3, Bobby sabe que el mensaje de entrada de Assata en la función hash debe ser el mismo que el suyo, lo cual prueba que Assata resolvió primero el problema. (La propiedad 4 no se usa aquí, pero, sin ella, si Assata hubiera obtenido una solución cercana a la correcta pero no correcta, los dos resultados podrían haber sido tan similares que una comparación somera podría no haber mostrado que eran diferentes.)

    ¿Cómo se ven las funciones hash?

    Hay muchas funciones hash criptográficas en uso en la actualidad, pero describirlas en detalle rebasa el alcance de este libro. Sin embargo, para dar una idea de cómo se ven, se presenta aquí un ejemplo que satisface algunas, aunque no todas, las propiedades de las funciones hash criptográficas.

    La función hash de ejemplo se llama XOR en trozos. La disyunción exclusiva, XOR, es una función en la cual, dado un par de valores de entrada, el resultado es verdadero (o 1) si los valores de entrada son diferentes; de otra manera, es falso. Por ejemplo, manzana XOR plátano = 1, manzana XOR manzana = 0, 0 XOR 1 = 1, 1 XOR 1 = 0. Podemos tomar una cadena de XOR en números binarios (0s y 1s) y obtener una respuesta significativa: 1 XOR 1 XOR 0 = 0, 1 XOR 1 XOR 0 XOR 1 = 1. Para una secuencia de números binarios, XOR resulta en 1 si hay una cantidad impar de 1s en la cadena y en 0 en el caso contrario.

    XOR en trozos opera con base en un código binario. (Si el valor de entrada no es binario, se puede representar primero en binario, como lo haría una computadora.) Se agrupa el valor de entrada en trozos de igual tamaño que el resultado de la función hash; por ejemplo, en grupos de ocho bits. Se alinean los trozos verticalmente y luego se aplica XOR al contenido de cada columna, como se muestra a continuación:

    entrada: 00111011 11101101 00101000 00101011 01011000 11001110

    en trozos: 00111011
    11101101
    00101000
    00101011
    01011000
    11001110

    columnas en XOR: 01000011 (resultado)

    Esta es una función hash puesto que no importa la longitud del valor de entrada; el valor de salida siempre tendrá la misma longitud (ocho bits en este ejemplo). Se puede ver que XOR en trozos satisface la primera propiedad de las funciones hash criptográficas. Sin embargo, falla en el resto de las propiedades. Es fácil crear un mensaje de entrada (aunque no necesariamente sea el mensaje inicial deseado), dado un valor hash resultante. Por ejemplo, se podría concatenar 11111111 11111111 en el resultado del hash. Por la misma razón, se podrían generar múltiples mensajes con el mismo hash resultante. Finalmente, cambiar un solo bit del mensaje de entrada cambiaría un solo bit en el hash resultante.

    En contexto: Los hash criptográficos violan tus derechos de la Cuarta Enmienda

    En 2008, un juez de distrito en Estados Unidos emitió el fallo de que si el gobierno de ese país quiere hacer hashes criptográficos con datos personales necesita obtener primero una orden judicial. En el caso en cuestión, un agente especial de la Oficina del Fiscal General de Pennsylvania copió el disco duro de la computadora de un sospechoso. El agente especial calculó un hash criptográfico de la copia (de manera que pudiera compararse posteriormente con el original y comprobar así que no se hubiera alterado, con base en las propiedades 1 y 3). Luego, el agente usó una herramienta forense que calculó un hash criptográfico de cada archivo (incluyendo archivos eliminados, pero no sobrescritos) del disco duro copiado y los comparó con hashes de archivos en una base de datos de archivos ilegales. El agente encontró tres coincidencias entre hashes de archivos en el disco duro y hashes de su base de datos. Gracias a las propiedades 1 y 3, esto significa que el disco duro contenía al menos tres archivos ilegales. El juez del caso dictaminó que esta práctica (de hacer hashes con los archivos y compararlas con hashes conocidos) constituye un allanamiento del disco duro, lo cual viola los derechos de la Cuarta Enmienda del acusado a estar protegido contra allanamientos e incautaciones arbitrarios. El resultado fue que la evidencia no pudo usarse en un juicio.

    Es necesario revelar los particulares del caso, el cual involucra la posesión de pornografía infantil. Aunque nunca defenderemos el derecho a poseer (o crear o distribuir) pornografía infantil, es importante imaginar un poder (en este caso, el poder de determinar la existencia de archivos específicos en una computadora) que podría usarse en una forma en la que no querrías que se usara: ¿música que un amigo compartió contigo?, ¿imágenes de derrames de petróleo?, ¿imágenes de protestas de #blacklivesmatter?, ¿artículos del Earth First Journal?

    External Resources


    This page titled 2.4: Hash criptográfico is shared under a CC BY-NC 4.0 license and was authored, remixed, and/or curated by Glencora Borradaile via source content that was edited to the style and standards of the LibreTexts platform.