
Demostración de árbol Merkle basada en navegador — construir un árbol, generar pruebas de inclusión, recalcular el hash raíz por hash, y reproducir los ataques de segunda preimagen RFC 6962 y CVE-2012-2459. SHA-256 real. Sin backend.
Esta es una demo interactiva de árboles de Merkle y pruebas de inclusión de Merkle, construida sobre SHA-256 mediante la API WebCrypto del navegador. Un árbol de Merkle hashea un conjunto de bloques de datos en un único hash raíz que compromete a todos ellos a la vez; una prueba de inclusión es la breve lista de hashes hermanos que permite a cualquiera volver a derivar esa raíz a partir de una sola hoja. El modelo de seguridad es puramente basado en hash: se apoya en la resistencia a colisiones y a segundas preimágenes de SHA-256, sin claves ni firmas involucradas. El hashing sigue la separación de dominios de RFC 6962 (leaf = SHA-256(0x00 ∥ data), node = SHA-256(0x01 ∥ left ∥ right)), que es lo que hace que la defensa contra segundas preimágenes en la demo sea real y no decorativa. Es una herramienta didáctica, no una biblioteca de producción.
Dos laboratorios de este catálogo cubren árboles de Merkle, y no son intercambiables. Este trata sobre la semántica de las pruebas: de dónde debe provenir la raíz confiable, los bytes exactos que se hashean en cada paso, la verificación basada en índices de RFC 9162, las pruebas de consistencia con los ataques de historial que detectan, las construcciones de segunda preimagen y CVE-2012-2459 rotas en la página, y una entrada real de Certificate Transparency fijada y verificada contra el log Argon de Google. crypto-lab-merkle-vault trata sobre la estructura: el árbol dibujado con conectores de padre a hijo, una única prueba recorrida nivel a nivel con los nodos correspondientes iluminándose a medida que el hash en curso asciende, y las raíces recalculada y comprometida afirmadas iguales byte a byte en la cima. Empieza allí para qué es un árbol de Merkle y cómo funciona un ascenso; ven aquí para qué te permite y qué no te permite creer una prueba.
⌈log₂ n⌉ hashes, así que se puede demostrar que una sola transacción está en un bloque de millones sin enviar el bloque.systemslibrarian.github.io/crypto-lab-merkle-proofs
Añade o elimina bloques de datos para construir un árbol en vivo, elige cualquier hoja para generar su prueba de inclusión y luego verifícala — recalculando la raíz a partir únicamente de la hoja y sus hashes hermanos. Puedes avanzar paso a paso o animar el recálculo un hash a la vez (observando cómo el hash en curso asciende por el árbol), expandir “show bytes” en cualquier paso para ver la preimagen exacta de SHA-256 (0x00 ∥ data para hojas, 0x01 ∥ L ∥ R para nodos), manipular la hoja o invertir un bit en cualquier paso de la prueba y ver cómo la verificación cambia a REJECTED, y ajustar un control deslizante para ver que las pruebas se mantienen logarítmicas hasta 2³⁰ hojas (además de construir árboles reales de 256–4.096 hojas). Una demostración del modelo de confianza escenifica directamente el error conceptual clásico: un probador que proporciona hoja, prueba y raíz produce una terna que verifica — y no demuestra nada. Dos demostraciones de seguridad te permiten activar y desactivar la separación de dominios de RFC 6962 para hacer que la falsificación de segunda preimagen tenga éxito y luego falle, y comparar la duplicación de nodos impares de Bitcoin con la promoción de RFC 6962 para reproducir la colisión de raíz de CVE-2012-2459. Las pruebas de consistencia (solo anexado) tienen su propia visualización — el árbol antiguo sombreado dentro del nuevo, con las raíces de subárbol de la prueba marcadas — además de tres ataques de manipulación del historial (reescribir, eliminar, reordenar) que la prueba detecta. Por último, la página verifica una entrada real de Certificate Transparency: un certificado Let's Encrypt fijado en el índice 1.234.567.890 del log Argon2026h1 de Google (2.800 millones de certificados), demostrado como incluido con 32 hashes usando la verificación basada en índices de RFC 9162 — la misma ruta de código que el resto del laboratorio. Los objetivos de aprendizaje, las consignas de predecir y luego revelar, los cuestionarios de autoevaluación, las descripciones emergentes del glosario, una tabla de resumen y las lecturas adicionales favorecen el aprendizaje activo; “Copy link to this tree” enlaza directamente cualquier estado del árbol para diapositivas o tareas.
git clone https://github.com/systemslibrarian/crypto-lab-merkle-proofs
cd crypto-lab-merkle-proofs
npm install
npm run dev
No hay variables de entorno. Ejecuta la suite de pruebas (vectores RFC 6962, ida y vuelta de pruebas, rechazo de manipulación, el ataque/defensa de segunda preimagen, pruebas de consistencia, fuzzing contra una implementación de referencia independiente y la prueba CT real fijada) con npm test.
npm run test:a11y ejecuta la puerta del navegador (Playwright). e2e/claims.spec.ts maneja la página real y vuelve a derivar cada veredicto a partir de lo que la página imprimió — INCLUDED solo cuando la raíz recalculada mostrada es igual a la raíz de confianza mostrada, ROOTS COLLIDE solo cuando las dos raíces impresas son iguales, el titular de eficiencia a partir de su propia aritmética — y recorre cada ruta de manipulación (hoja, bit de prueba, reescritura/eliminación/reordenación del log, el volteo de bit del certificado CT) para afirmar que alcanza el rechazo, nombra la causa y se recupera. e2e/a11y.spec.ts es el escaneo axe-core WCAG A/AA. Ambos se ejecutan en CI antes de cada despliegue en Pages.
Consulta TEACHING.md para una guía del instructor: un flujo de lección de 50 minutos, preguntas de debate, los conceptos erróneos que cada sección está diseñada para romper y extensiones para tareas.
Una de más de 170 demos interactivas en el navegador en systemslibrarian.github.io/crypto-lab — abarcando desde Atbash (600 a. C.) hasta NIST FIPS 203/204/205 (2024).
"Así que, ya sea que comáis o bebáis, o hagáis cualquier otra cosa, hacedlo todo para la gloria de Dios." — 1 Corintios 10:31