Saltar al contenido
Volver al catálogo
Proyecto hash-functionsSeguridadIntermedioBeta

Construye tus propias funciones SHA-256 y HMAC

Construye funciones SHA-256 y HMAC desde cero. Implementa rotaciones, padding y bloques de compresión, y firma mensajes sin una biblioteca criptográfica.

Constrúyelo en tu lenguaje

El tester trata tu programa como una caja negra: sirve cualquier lenguaje. Estos son los más cómodos para este proyecto.

Idioma del temario

Las guías de las etapas se leen en este idioma. Solo aparecen los idiomas en los que este proyecto ya está traducido completo; el idioma de la interfaz no cambia.

De qué trata este proyecto

Un hash criptográfico es una función que sale en todas partes —contraseñas, firmas, blockchains, integridad de ficheros— y que casi nadie ha visto por dentro. Por dentro son rotaciones y sumas, nada más.

Implementarás SHA-256 desde el padding hasta el bloque de compresión, verificarás tu salida contra los vectores de prueba oficiales y la usarás para construir HMAC y firmar tokens de verdad.

Hoja de ruta

7 etapas repartidas en 3 fases. Cada etapa trae su guía y sus tests: avanzas cuando pasan.

  1. Fase 12 etapas

    Preparar el mensaje

    Padding, longitud en bits y troceado en bloques de 512.

    1. 01Padding de SHA-256
    2. 02Bloques y palabras
  2. Fase 23 etapas

    El corazón del hash

    Expansión del mensaje, las 64 rondas y validación con los vectores del NIST.

    1. 01Expansión del mensaje
    2. 02Una ronda de compresión
    3. 03Digest completo
  3. Fase 32 etapas

    Usarlo para algo

    HMAC-SHA256, firma y verificación de tokens en tiempo constante.

    1. 01HMAC-SHA256
    2. 02Tokens firmados

Antes de empezar

Una implementación de SHA-256 conforme al estándar (padding, expansión del mensaje y las 64 rondas de compresión), validada con los vectores del NIST, más HMAC-SHA256 encima y una utilidad que firma y verifica tokens con comparación en tiempo constante.

  • bittorrent
    Próximamente

    Construye tu propio cliente BitTorrent

    Construye un cliente BitTorrent desde cero. Decodifica bencode, consulta trackers y descarga un archivo real con el protocolo peer-to-peer.

    Avanzado12 etapas~20 hRedes
    bencodeP2Pprotocolos+1

    Go · Python · Java

  • git
    Próximamente

    Construye tu propio Git

    Construye tu propio Git desde cero. Guarda blobs, trees y commits para entender los objetos direccionados por contenido y el control de versiones.

    Avanzado12 etapas~18 hHerramientas
    funciones hashzlibDAG+1

    Go · Python · Rust