Skip to content
Back to the catalog
Project hash-functionsSecurityIntermediateBeta

SHA-256 y HMAC desde cero

Rotaciones, padding y el bloque de compresión. Firma y verifica mensajes sin tocar la librería de criptografía.

Build it in your language

The tester treats your program as a black box: any language works. These are just the most convenient ones for this project.

Guide language

The stage guides read in this language. Only languages this project is fully translated into show up here; the interface language does not change.

What this project is about

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.

Roadmap

7 stages across 3 phases. Every stage comes with its guide and its tests: you move on when they pass.

  1. Phase 12 stages

    Preparar el mensaje

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

    1. 01Padding de SHA-256
    2. 02Bloques y palabras
  2. Phase 23 stages

    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. Phase 32 stages

    Usarlo para algo

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

    1. 01HMAC-SHA256
    2. 02Tokens firmados

Before you start

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
    Beta

    A BitTorrent client

    Bencode, trackers and the peer-to-peer protocol. Download a real file by talking to real peers.

    Advanced12 stages~20 hNetworking
    bencodep2pprotocolos+1

    Go · Python · Java

  • git
    Beta

    Build your own Git

    Blobs, trees and commits. Discover that Git is a content-addressed object store, and little else.

    Advanced12 stages~18 hTooling
    hashingzlibdag+1

    Go · Python · Rust