尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗El visitante elige una clave secreta y cifra un mensaje en su celular con una Enigma I. Solo las letras cifradas viajan a la laptop, y la laptop rompe el mensaje en vivo con el ataque de Turing–Welchman (la Bombe), sin ver nunca la clave.
Celular Buzón Laptop (pantalla)
web/celular.html ──► Supabase: tabla mensajes ──► web/pantalla.html
elige la clave, (modo nube) pone los mensajes en cola,
escribe y cifra o servidor/servidor.js corre la Bombe (Web Worker)
(modo local) y enseña la clave encontrada
web/celular.html). El visitante gira las ruedas para elegir 3 rotores (de I a V)
y su posición inicial, y une hasta 4 pares de letras en el clavijero (o toca Al azar).
Después escribe su mensaje en el teclado: se encienden las lámparas, como en la máquina real.
Al tocar Transmitir, el celular manda solo el texto cifrado. Antes del mensaje, el celular
cifra siempre el mismo encabezado oficial, el crib FERIABEADRAGONENLAUSFQ (definido en
web/config.js). La clave nunca sale del teléfono.modo: "auto" en web/config.js):
mensajes de Supabase (web/nube.js).node servidor/servidor.js, el celular hace
POST /api/interceptar y el servidor guarda los mensajes en memoria (hasta 500).
La página sabe en qué modo está preguntando por /api/config: si responde JSON, hay
servidor local; si no, está en la nube.web/pantalla.html). Cada segundo lee del buzón los mensajes nuevos
(nube: mensajesDesde en web/nube.js; local: GET /api/mensajes?desde=N) y los pone en una
cola: se atienden todos, uno por uno, en orden de llegada. Al abrir la página no repite
los mensajes viejos. Con cada mensaje muestra la "estación de escucha" (las letras llegan una
por una), señala las primeras letras que esconden el crib, dibuja el menú de Turing del
mensaje y anima la búsqueda. Al final muestra el mensaje descifrado, los rotores, la posición
y los cables encontrados.
RESULTADO_MIN_MS).
Arriba a la derecha aparece "En cola: N mensajes" en rojo.VOLVER_A_ESPERA_MS),
vuelve la escena del QR.bombe/bombe2.js). En los dos modos corre en el navegador de la laptop, en un
Web Worker (web/bombe-web.js) para que la pantalla no se congele. Cada mensaje tiene
su propio Worker: un mensaje nuevo nunca interrumpe al que se está rompiendo.El problema: hay 60 formas de elegir y ordenar 3 rotores de 5, y 17 576 posiciones iniciales (26 × 26 × 26). Son 1 054 560 configuraciones de rotores. Encima está el clavijero, con muchísimas combinaciones de cables, así que probar todo a lo bruto no es una opción.
Lo que sí sabemos es que todo mensaje empieza con el crib. Con eso, bombe/bombe2.js hace esto:
web/enigma.js). Si sale exactamente el inicio del cifrado,
encontramos la clave y desciframos el mensaje completo.Ejemplo real con la clave II-V-I, posición KDQ, cables AM FT RX y el mensaje NOSVEMOSENLAFERIA:
| Paso | Cuántas quedan |
|---|---|
| Configuraciones de rotores | 1 054 560 |
| × 26 hipótesis para la letra de prueba | 27 418 560 |
| Pasan el primer ciclo | 1 097 574 |
| Sin contradicciones tras la propagación | 1 |
| Clave final (comprobada con la Enigma) | 1 |
En esta laptop eso tomó unos 4 segundos. La pantalla muestra estos mismos números al final de cada mensaje.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗