paint-brush
Funciones hash criptográficas en Blockchain (con código Bash y Python)por@balapriya
5,300 lecturas
5,300 lecturas

Funciones hash criptográficas en Blockchain (con código Bash y Python)

por Bala Priya C6m2022/04/04
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow
ES

Demasiado Largo; Para Leer

Las funciones hash criptográficas son una clase de funciones hash que son criptográficamente seguras. Desde la autenticación de contraseña y la verificación de integridad hasta blockchain, estas funciones se utilizan en una multitud de aplicaciones. En este tutorial, comenzaremos revisando los conceptos básicos de la cadena de bloques y la relevancia de las funciones hash criptográficas para hacer que una cadena de bloques sea segura. Luego repasaremos qué son las funciones hash criptográficas y sus propiedades. Además, también veremos cómo escribir código para obtener hashes, tanto en Python como en Bash.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coins Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Funciones hash criptográficas en Blockchain (con código Bash y Python)
Bala Priya C HackerNoon profile picture

Las funciones hash criptográficas son una clase de funciones hash que son criptográficamente seguras. Desde la autenticación de contraseña y la verificación de integridad hasta blockchain, estas funciones se utilizan en una multitud de aplicaciones.

En este tutorial, comenzaremos revisando los conceptos básicos de la cadena de bloques y la relevancia de las funciones hash criptográficas para hacer que una cadena de bloques sea segura. Luego repasaremos qué son las funciones hash criptográficas y sus propiedades.

Además, también veremos cómo escribir código para obtener hashes, tanto en Python como en Bash.

Por todo esto y más, ¡comencemos!

Tabla de contenido

  1. Conceptos básicos de blockchain revisados
  2. ¿Qué es una función hash criptográfica?
  3. Propiedades de las funciones hash criptográficas
  4. ¿La seguridad de 256 bits es realmente segura?
  5. Cómo calcular la suma SHA256 en Bash
  6. Cómo obtener el hash SHA256 en Python

Conceptos básicos de blockchain revisados

Comencemos nuestra discusión respondiendo a la pregunta: "¿Qué es una cadena de bloques?"

Una cadena de bloques es un sistema de registro distribuido e inmutable . Es esencialmente una red peer-to-peer descentralizada en la que las transacciones pueden ocurrir entre pares sin la participación de una autoridad central.

Cada bloque en una cadena de bloques consta de lo siguiente:

  • datos/detalles de la transacción
  • es hachís
  • hash del bloque anterior

El primer bloque se llama bloque génesis y es el único bloque que no contiene el hash del bloque anterior.

En una cadena de bloques, las transacciones se codifican utilizando algoritmos de cifrado seguros. Y aquí es donde entran en discusión las funciones hash criptográficas .

Las funciones hash criptográficas se utilizan para generar los hash que identifican de forma única los bloques.

Cada vez que los datos en un bloque en particular cambian o se actualizan, el hash cambia drásticamente. Y debido a esto, el hash de un bloque en particular debe actualizarse y los valores de hash en bloques posteriores también deben cambiar.

Esto hace que sea casi imposible alterar el contenido de un bloque específico. En cierto sentido, los hashes no solo identifican de forma única el bloque, sino que también facilitan la inmutabilidad de la cadena de bloques.

Además, las cadenas de bloques utilizan mecanismos de consenso como la Prueba de trabajo y la Prueba de participación para garantizar que las transacciones sean realmente auténticas y que no las realice una entidad malintencionada que intenta manipular la red.

Ahora que ha aprendido la relevancia de las funciones hash criptográficas en blockchain, aprendamos sobre ellas con mayor detalle en las secciones siguientes.

¿Qué es una función hash criptográfica?

Una función hash criptográfica toma un mensaje de entrada y lo asigna a una salida de longitud fija , llamada hash o resumen .

Cualquiera que sea la longitud de la entrada (podría ser un solo carácter, una cadena o incluso un archivo grande), la salida siempre tiene una longitud fija, digamos N .

En la siguiente ilustración, pasamos dos entradas diferentes 'blockchain' y 'hello' de diferentes longitudes al

 SHA1
bloquear.

los

 SHA1
El bloque acepta entradas y las asigna a un hash de salida que tiene una longitud de 160 bits, o el equivalente a 40 dígitos hexadecimales, como se muestra a continuación.

Nota: SHA significa Algoritmo Hashing Seguro . Debido a violaciones de seguridad conocidas en el pasado,

 SHA1
ya no se recomienda para casos de uso sensibles. sin embargo, el
 SHA2
clase de algoritmos, a saber, la
 SHA256
y
 SHA512
todavía se utilizan ampliamente.

Propiedades de las funciones hash criptográficas

Las funciones hash criptográficas tienen algunas propiedades que las hacen seguras para las aplicaciones criptográficas.

1. Determinista

Una función hash criptográfica es determinista. Esto significa que no importa cuántas veces ingrese una entrada en particular , obtendrá el mismo hash de salida.

2. Computacionalmente eficiente

Los valores hash de salida deben ser rápidos de calcular, tanto cuando se realizan transacciones hash como durante la verificación.

Por lo tanto, una función hash criptográfica debería ser computacionalmente eficiente, permitiéndonos obtener el hash de salida en poco tiempo.

3. Resistente a la imagen previa o no reversible

Esta propiedad se basa en el concepto de funciones unidireccionales .

Tomemos un ejemplo. tienes una funcion

 f(x) = cube(x)
: la función
 f
devuelve el cubo del número ingresado.

En este caso, si la salida es 27, puede concluir de inmediato que la entrada es 3, que es la preimagen correspondiente a la salida 27. Por lo tanto, tal función

 f
no es resistente a la imagen previa.

Sin embargo, las funciones hash criptográficas deben ser resistentes a la imagen previa.

Esto significa que puede ingresar un mensaje en el algoritmo hash y obtener el hash. Pero no debería ser factible obtener el mensaje de entrada mirando el hash.

Esto se ilustra como se muestra a continuación.

Resistencia previa a la imagen de las funciones hash (Imagen del autor)

4. Resistente a colisiones

Una función hash debe ser resistente a colisiones.

Pero, ¿qué es la colisión en el contexto de las funciones hash?

¿Es esta la colisión de la que estamos hablando? 🤔

¡No exactamente! 🙂

Bueno, analicemos qué significa realmente la resistencia a la colisión .

Se dice que ocurre una colisión cuando dos mensajes de entrada

 M1
y
 M2
mapear al mismo hash de salida. Y la resistencia a colisiones simplemente significa que debería ser difícil encontrar dos mensajes diferentes
 M1
y
 M2
ese mapa al mismo hash.

5. Muestra el efecto de avalancha

Incluso un pequeño cambio en la entrada debería cambiar el hash drásticamente.

En el ejemplo a continuación, solo cambiamos un solo carácter: 'b' a 'B'. ¡Y el hash de salida cambia por completo!

En resumen, una función hash criptográfica genera un hash de longitud fija que es determinista pero aleatorio y es criptográficamente seguro.

Hasta ahora, ha aprendido qué son las funciones hash criptográficas y sus propiedades. Y hemos mencionado que el

 SHA256
La función hash es ampliamente utilizada.

Sin embargo, ¿es realmente seguro un hash de 256 bits? Dirígete a la siguiente sección para averiguarlo.

¿La seguridad de 256 bits es realmente segura?

Suponga que tiene el hash de salida deseado. Recuerde que una función hash criptográfica es determinista. Y genera el mismo hash para una entrada específica .

Pero también es no invertible. Entonces, la única forma en que puede recuperar la entrada es intentar generar el hash de salida en su extremo, a través de una serie de conjeturas aleatorias.

Si puede generar este hash de salida adivinando entradas al azar, cree que es posible eventualmente romper el hash, ¿sí?

Bueno, ¡no es tan simple!

los

 SHA256
El algoritmo genera un hash de 256 bits, o el equivalente a 64 dígitos hexadecimales. Y un hash de 256 bits es una secuencia de 256 bits, cada uno de los cuales es un 0 o un 1 .

¡Entonces hay 2^256 combinaciones totales en total! Y este es un número increíblemente grande. Y romper este hash adivinando al azar es exponencialmente difícil.

Mira este interesante video de Grant Sanderson de 3Blue1Brown .

Y en el video anterior, Grant explica cuán complejo es el proceso.

En pocas palabras, incluso si tuviera acceso a los recursos informáticos más sofisticados del mundo y un tiempo equivalente a 37 veces la edad del universo , aún tendrá una probabilidad de 1 en 4 mil millones de adivinar con éxito la entrada.

Un extracto del

Cómo calcular la suma SHA256 en Bash

Incluso puede usar comandos Bash simples para obtener el hash al aplicar los algoritmos hash seguros.

Si tiene Linux o Mac, abra su terminal y ejecute la siguiente línea de código. Si está en una máquina con Windows, considere usar un entorno de shell como Git Bash .

El comando Bash

 sha256sum
devuelve el hash de 256 bits, como se muestra a continuación.

 $ printf "I'm coding" | sha256sum 860f5cae6febaa6b9064a16d78553819de43cb1e4c5a87ab267bb1c35fb41a04

Observe que el hash de salida tiene 64 dígitos hexadecimales, cada uno de los cuales ocupa 4 bits.

Para obtener el hash SHA1 de 160 bits de largo, puede usar el comando Bash

 sha1sum
. Ejecute el código anterior reemplazando
 sha256sum
con
 sha1sum
.

 $ printf "I'm coding" | sha1sum cafc711fba6c8ccdcbb807e5a676e9810e5cce4c

En la siguiente sección, veremos cómo obtener el hash bajo el

 SHA256
algoritmo en Python.

Cómo obtener el hash SHA256 en Python

Python se envía con un incorporado

 hashlib
módulo. Así que puedes seguir adelante e importarlo así:
 import hashlib.

Estos son los pasos para obtener el hash:

  • Utilizar el
     sha256()
    constructor para instanciar un objeto hash
  • Codifique la cadena del mensaje, opcionalmente incluya un formato de codificación
  • Llama a
     hexdigest()
    método para obtener el equivalente hexadecimal del hash de 256 bits

El siguiente bloque de código muestra cómo puede hacerlo.

 import hashlib message = "I'm coding"
hash_obj = hashlib.sha256(message.encode()) hash_val = hash_obj.hexdigest() print (hash_val) # output: 860f5cae6febaa6b9064a16d78553819de43cb1e4c5a87ab267bb1c35fb41a04
print ( len (hash_val)) # output: 64
# correct! 64 hexadecimal digits; total length = 64 * 4 = 256 bits

Fíjate cómo el

 SHA256
sum en este caso es el mismo que obtuvo de Bash en la sección anterior. Esto verifica la naturaleza determinista de las funciones hash criptográficas.

Ahora, intentemos obtener los valores hash para una lista de cadenas.

 import hashlib strings = [ "hello" , "sha256" , "sensitive info" ] for string in strings: hash_obj = hashlib.sha256(string.encode()) hash_val = hash_obj.hexdigest()    print ( f"Hash # {strings.index(string)+ 1 } : {hash_val} " ) # Output
Hash #1: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Hash #2: 5d5b09f6dcb2d53a5fffc60c4ac0d55fabdf556069d6631545f42aa6e3500f2e
Hash #3: 034fcc03d9332ee032b5815ef69b0f21926dd2da73f0fcfd65ff90ded1700892

Mira, así de simple es. ✅

Resumen de la discusión sobre las funciones hash criptográficas

Espero que hayas encontrado útil este tutorial sobre funciones hash criptográficas.

Has aprendido qué funciones criptográficas son cuáles son sus propiedades. Y también aprendiste a usar los comandos Bash como

 sha1sum
y
 sha256sum
para obtener los valores hash.

Además, has visto cómo usar Python's

 hashlib
módulo para generar hashes para cadenas de entrada.

Asegúrese de probar algunos ejemplos más. ¡Sigue codificando!

Nota: Todas las imágenes de la publicación han sido creadas por el autor.

📚 Leer Siguiente

▶️ Tutorial avanzado de modelado de temas: cómo usar SVD y NMF en Python

▶️ Aprenda la agrupación en clústeres de K-Means mediante la cuantificación de imágenes en color en Python

▶️ Matriz de confusión en el aprendizaje automático: todo lo que necesita saber

▶️ 9 mejores cursos de ingeniería de datos que debe tomar en 2022

▶️ Matriz de término de documento en NLP: recuento y puntajes TF-IDF explicados