OpenRung
A free, privacy-first relay network that helps you reach the open internet. Open source and nonprofit-run.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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.
This is the beginning of the README. Read the rest at the original. Read the full README ↗