La vida secreta de los códigos: del cifrado de César al código QR en tu bolsillo
Piensa en tu mañana, solo en las últimas horas. Probablemente escaneaste el código de barras de tu tarjeta de fidelidad en la cafetería. Un repartidor leyó la etiqueta de tu paquete. Tu gestor de contraseñas rellenó automáticamente una cadena de 32 caracteres en un formulario de acceso. Tu teléfono se desbloqueó porque reconoció tu cara, que no es más que un código numérico para la geometría de tus rasgos. Vives, lo pienses o no, dentro de una densa red de códigos —identificadores, cifrados, tokens y símbolos— que sostienen silenciosamente el mundo moderno.
Y sin embargo, nada de esto es nuevo. El impulso humano de codificar información —guardar un mensaje en secreto, identificar un objeto de manera única, verificar que algo es auténtico— es antiquísimo. Julio César lo hacía en los campos de batalla de la Galia hace dos mil años. Los eruditos judíos medievales lo hacían con el alfabeto hebreo. En el siglo XIX, buscadores de tesoros estaban convencidos de que un código era lo único que se interponía entre ellos y una fortuna enterrada en algún lugar de las montañas Blue Ridge.
Lo que ha cambiado no es el instinto, sino la escala y las consecuencias. Cuando César necesitaba proteger un mensaje enviado a mano a un general, un token de sesión moderno debe proteger los datos bancarios de cien millones de personas, generado de nuevo cada vez que inician sesión. Las matemáticas se han vuelto fieramente complejas. La elegancia de la idea de fondo no ha cambiado.
Esta es la historia de esa idea: de dónde viene, cómo evolucionó y por qué importa hoy más que nunca. Viajaremos desde un emperador romano trazando líneas con su estilo sobre una tablilla de cera, a través de dos guerras mundiales, hasta una fábrica de Toyota en la prefectura de Aichi, y terminaremos ante el código QR del menú de un restaurante que tuvo que prescindir del papel durante una pandemia global. En el camino conoceremos matemáticos, ingenieros, soldados y al menos un apasionado buscador de tesoros aficionado que casi con toda seguridad murió sin encontrar lo que buscaba.
Julio César y el arte del mensaje secreto
En el año 58 a.C., Julio César libraba una guerra en la Galia —el territorio que hoy es aproximadamente Francia— y se enfrentaba a un problema que todo comandante militar a lo largo de la historia ha tenido que resolver: necesitaba enviar mensajes a sus oficiales, pero no podía garantizar que esos mensajes no fueran interceptados. Un mensajero capturado, un correo sobornado, una carta abierta en el puesto fronterizo equivocado: cualquiera de estas situaciones podría poner su estrategia en manos del enemigo.
Su solución era simple, elegante y cualquier estudiante de criptografía la reconocería hoy de inmediato. Desplazaba cada letra de su mensaje tres posiciones hacia adelante en el alfabeto. La A se convertía en D. La B en E. La C en F. Y así sucesivamente, dando la vuelta de modo que la X se convertía en A, la Y en B y la Z en C. La palabra VALE (adiós) se convertía en YDOH. Un espía que interceptara el mensaje vería un galimatías. Un general que conociera la clave lo desplazaría todo tres posiciones hacia atrás y lo leería perfectamente.
Este es el cifrado César, o más específicamente un cifrado de sustitución ROT-3. Lo documentó el historiador Suetonio en Las doce vidas de los Césares, escrita hacia el año 121 d.C.: "Si tenía algo confidencial que decir, lo escribía en clave, es decir, alterando el orden de las letras del alfabeto de forma que no se pudiera descifrar ninguna palabra." Según los estándares criptográficos modernos es casi irrisoriamente débil: solo existen 25 desplazamientos posibles del alfabeto latino, lo que significa que un atacante necesita como máximo 25 intentos para romperlo. Pero para un soldado romano que no sabía leer, era del todo eficaz.
César ni siquiera fue el primero. El cifrado Atbash, utilizado por eruditos hebreos para cifrar textos sagrados, le precede por varios siglos. Funciona mediante una inversión simple: la A se convierte en Z, la B en Y, la C en X —la última letra del alfabeto pasa a ser la primera, y viceversa. El nombre «Atbash» es en sí mismo un cifrado: Aleph-Tav-Beth-Shin, la primera, última, segunda y penúltima letras del alfabeto hebreo. Aparece en el libro de Jeremías, donde se cree que la palabra Sheshach es una codificación Atbash de Babel (Babilonia). El escriba que lo redactó estaba ocultando un insulto político a plena vista.
Tanto el cifrado César como el Atbash son cifrados de sustitución monoalfabética: cada aparición de la letra A en un mensaje siempre se codifica de la misma manera. Esto los hace vulnerables al análisis de frecuencias, técnica documentada en detalle por el polímata árabe del siglo IX Al-Kindi en su Manuscrito sobre el desciframiento de mensajes criptográficos. La letra E es la que más aparece en los textos en inglés; la T, la A y la O le siguen de cerca. Si se examina un texto cifrado por sustitución y se observa que un símbolo aparece con mucha más frecuencia que los demás, hay muchas posibilidades de que ese símbolo represente la E. Con suficiente texto, puede reconstruirse toda la sustitución.
La respuesta al análisis de frecuencias fue el cifrado Vigenère, desarrollado en el siglo XVI y atribuido principalmente al criptólogo italiano Giovan Battista Bellaso, aunque más tarde se adjudicó erróneamente al diplomático francés Blaise de Vigenère (una injusticia histórica frecuente). El cifrado Vigenère no utiliza un solo desplazamiento, sino una palabra clave que se repite. Si la clave es CLAVE, la primera letra se desplaza en función de la C, la segunda según la L, la tercera según la A, y así sucesivamente. La misma letra del texto original se cifra de forma diferente cada vez que aparece, según su posición. Esto neutraliza el análisis de frecuencias simple, porque la señal de frecuencia queda distribuida entre múltiples símbolos cifrados. Durante casi tres siglos fue conocido como le chiffre indéchiffrable —el cifrado irrompible—. Lo rompió finalmente el matemático británico Charles Babbage en la década de 1840, aunque nunca publicó su método, y el mérito recayó en el oficial prusiano Friedrich Kasiski, que redescubrió el ataque de forma independiente en 1863.
Y luego están los Cifrados Beale: tres documentos que aparecieron en Virginia en 1885, supuestamente dejados por un hombre llamado Thomas J. Beale, que describían un tesoro enterrado de oro y plata en algún lugar de las montañas Blue Ridge, valorado en varios millones de dólares actuales. El primer documento describe la ubicación. El segundo enumera el contenido del tesoro. El tercero nombra a los destinatarios. Solo el segundo ha sido descifrado alguna vez, usando la Declaración de Independencia como texto clave: los números del cifrado corresponden a la primera letra de esa palabra en la Declaración. El primero y el tercero siguen sin resolverse. Miles de personas han dedicado décadas a intentar descifrarlos. Algunos estudiosos creen que los cifrados son un fraude. Otros creen que hay un tesoro esperando. Nadie lo sabe. Los Cifrados Beale son un recordatorio de que los códigos no son solo herramientas de poder: también son imanes para la obsesión.
Guerra, máquinas y códigos inquebrantables
La mañana del 16 de enero de 1917, un equipo de inteligencia de señales británico en la Sala 40 del edificio del Almirantazgo en Londres interceptó un telegrama del secretario de Exteriores alemán, Arthur Zimmermann, al embajador alemán en México. El telegrama, cifrado con el código diplomático alemán 0075, proponía una alianza militar: si Estados Unidos entraba en guerra contra Alemania, se debía ofrecer a México apoyo financiero y ayuda para recuperar Texas, Nuevo México y Arizona. Fue un error diplomático catastrófico. La Sala 40 lo descifró. Al presidente Woodrow Wilson, que había ganado la reelección con el lema «él nos mantuvo fuera de la guerra», le mostraron el texto descifrado en febrero. Dos meses después, Estados Unidos declaró la guerra a Alemania. El Telegrama Zimmermann no causó la Primera Guerra Mundial, pero moldeó su desenlace.
La lección del Telegrama Zimmermann —que una mala criptografía cuesta más que una mala estrategia— no se perdió en los planificadores militares de la generación siguiente. Para cuando estalló la Segunda Guerra Mundial, Alemania había desplegado lo que creían que era una máquina de cifrado irrompible: la Enigma.
Arthur Scherbius, un ingeniero eléctrico alemán, había patentado la máquina Enigma en 1918 con intención de uso comercial. El ejército alemán adoptó una versión modificada a finales de los años veinte. En su núcleo, la Enigma utilizaba un conjunto de ruedas giratorias —rotores— cada una de las cuales sustituía una letra por otra. Con cada pulsación de una tecla, al menos un rotor avanzaba, cambiando la sustitución. El operador también conectaba cables entre pares de letras en el panel frontal, el Steckerbrett, añadiendo otra capa de permutación. El número total de configuraciones iniciales posibles: 158.962.555.217.826.360.000 —aproximadamente 158 trillones—. Parecía imposible de resolver por fuerza bruta.
Y sin embargo, fue descifrada. El trabajo comenzó con la Oficina de Cifrados polaca en los años treinta, donde los matemáticos Marian Rejewski, Jerzy Różycki y Henryk Zygalski reconstruyeron el cableado de los rotores de la Enigma utilizando únicamente las claves de mensajes capturados y el razonamiento matemático puro. Cuando Polonia fue invadida en 1939, transmitieron sus conocimientos a Francia y Gran Bretaña. En Bletchley Park, en Buckinghamshire, un equipo de descifradores —matemáticos, lingüistas, aficionados a los crucigramas, jugadores de ajedrez— retomó el trabajo. Entre ellos había un matemático de 27 años llamado Alan Turing.
La aportación de Turing fue la Bombe, un dispositivo electromecánico que automatizaba la búsqueda de los ajustes de la Enigma explotando los «pies» —fragmentos de texto conocido—. Un mensaje podría comenzar siempre con un parte meteorológico estándar. Un operador naval podría cerrar los mensajes de la misma manera cada día. Estos fragmentos predecibles daban a los descifradores un punto de apoyo. La Bombe, ejecutando decenas de configuraciones posibles simultáneamente, podía encontrar los ajustes diarios de la Enigma en horas en lugar de años. Los historiadores estiman que la inteligencia producida en Bletchley Park —con el nombre en clave Ultra— acortó la guerra en Europa al menos dos años y salvó millones de vidas.
Mientras Turing luchaba contra la Enigma en Inglaterra, el teatro del Pacífico produjo un código que jamás fue descifrado: los Hablantes de Código Navajo. El Cuerpo de Marines de Estados Unidos reclutó a aproximadamente 400 hombres navajos que desarrollaron un código militar basado en su lengua nativa. El navajo era ideal: no tenía forma escrita en aquel momento, menos de 30 personas fuera de la Nación Navajo lo hablaban sin ser navajos, y sus cualidades tonales y su compleja sintaxis lo hacían prácticamente imposible de aprender sin haberlo adquirido en la infancia. Los japoneses, cuyas propias operaciones de descifrado eran formidables, nunca lograron descifrarlo. El mayor Howard Connor, que sirvió en Iwo Jima, supuestamente dijo: «Si no hubiera sido por los navajos, los Marines nunca habrían tomado Iwo Jima.»
Una línea en la arena: el nacimiento del código de barras
En 1948, un ejecutivo de la industria alimentaria llamado Bernard Silver paseaba por los pasillos del Instituto Drexel de Tecnología en Filadelfia cuando escuchó por casualidad al decano de la cadena de supermercados Food Fair haciendo una petición a un profesor de Drexel: ¿podría la universidad desarrollar un sistema para leer automáticamente la información de los productos en caja? El profesor declinó. Silver no olvidó la conversación.
Se lo comentó a un compañero estudiante de posgrado, Norman Woodland, que quedó inmediatamente fascinado. Woodland era el tipo de persona que, cuando se enfrenta a un problema, no puede dejar de pensar en él. Abandonó sus estudios, se mudó al apartamento de su abuelo en Miami Beach y pasó meses sentado en la arena pensando en cómo codificar información sobre los productos de forma que una máquina pudiera leerla.
El avance llegó una mañana en esa misma playa. Woodland extendió los dedos y los arrastró por la arena, observando las líneas paralelas que dejaban. En ese momento estaba pensando en el código Morse —puntos y rayas que había aprendido como boy scout—. ¿Y si esos puntos y rayas se estiraran en barras —líneas de anchuras variables, dispuestas en un patrón que un haz de luz pudiera leer? Tenía la forma de la idea en un puñado de arena.
Woodland y Silver presentaron su patente en octubre de 1949. Fue concedida el 7 de octubre de 1952 como la Patente US 2.612.994, titulada «Aparato y método de clasificación». El diseño original no era el familiar rectángulo rayado que conocemos hoy: era una diana, un conjunto de círculos concéntricos, que tenía la ventaja de poder leerse desde cualquier dirección. La patente fue vendida, pasó por varias manos y permaneció en gran medida dormida durante dos décadas. La tecnología para leer códigos de barras con precisión y a bajo coste simplemente no existía aún.
A principios de los años setenta, la industria de los supermercados estaba en crisis. Las colas en caja eran lentas, los errores de precio eran frecuentes y la gestión del inventario era una pesadilla burocrática. Las asociaciones del sector sabían que necesitaban un sistema estandarizado. IBM envió a un ingeniero llamado George Laurer a resolver el problema. Laurer, partiendo del trabajo de Woodland y Silver, rediseñó la diana en un rectángulo. Los círculos concéntricos, había determinado, eran poco prácticos de imprimir con fiabilidad: la tinta tendía a sangrar radialmente. Las líneas paralelas, en cambio, podían tolerar imperfecciones significativas en la impresión y seguir siendo legibles con el escáner. Creó lo que hoy llamamos Código Universal de Producto, el UPC.
El momento en que el UPC se convirtió en realidad —el momento en que abandonó el mundo de la ingeniería y entró en la historia— fue a las 8:01 de la mañana del 26 de junio de 1974. En el supermercado Marsh de Troy, Ohio, una cajera llamada Sharon Buchanan pasó un paquete de diez chicles Wrigley's Juicy Fruit por el primer escáner de código de barras comercial. El paquete costaba 67 centavos. Ese paquete de chicle está ahora en el Museo Nacional de Historia Americana del Instituto Smithsoniano. Norman Woodland, que entonces tenía 55 años y trabajaba para IBM, presenció el acto. Había estado esperando 26 años.
Cómo funcionan los códigos de barras
Un código de barras es, en esencia, un método para codificar números como patrones de luz y oscuridad: una representación visual del binario. Cuando un escáner láser pasa sobre un código de barras, mide cuánta luz se refleja de vuelta. Las barras oscuras absorben la luz; los espacios blancos la reflejan. La rápida alternancia entre reflexión y absorción produce un patrón de impulsos eléctricos que el decodificador del escáner traduce en una secuencia de bits y luego en dígitos.
Tomemos el código UPC-A, el estándar en la mayoría de los productos minoristas vendidos en América del Norte. Codifica 12 dígitos. El primer dígito identifica la categoría del producto. Los cinco siguientes identifican al fabricante. Los cinco siguientes identifican el producto específico. Y el último dígito —el dígito de verificación— se calcula a partir de los once anteriores usando una fórmula de suma ponderada. Si se escanea el código de barras y el dígito de verificación calculado no coincide con el almacenado, el escáner sabe inmediatamente que algo ha fallado en la lectura o la impresión. Rechaza el escaneo y te pide que lo intentes de nuevo. Los dígitos de verificación son el mecanismo de detección de errores integrado en cada código de barras.
El UPC-A funciona bien en América del Norte, pero el resto del mundo necesitaba un dígito más. El Número de Artículo Europeo, EAN-13, amplía el formato a trece dígitos, siendo los dos o tres primeros los que identifican el país u organización emisora. El código de barras de un libro en una librería francesa, una farmacia alemana y un supermercado australiano usan todos el EAN-13. Es la misma tecnología subyacente, solo un poco más ancha.
Los códigos de barras de venta al público son la superficie visible de un ecosistema mucho mayor de códigos unidimensionales. El Código 128 es el caballo de trabajo de la logística —lo encontrarás en etiquetas postales y documentos de envío porque puede codificar no solo números sino el conjunto completo de caracteres ASCII, incluidas letras—. El ITF-14 (Interleaved 2 of 5, 14 dígitos) está diseñado para cajas de cartón corrugado, donde la superficie de impresión más rugosa exige un formato más robusto. El Código 39, desarrollado en 1974, fue uno de los primeros códigos de barras alfanuméricos y sigue siendo común en aplicaciones industriales y militares porque se autoverifica y no requiere un dígito de verificación externo.
Sin embargo, los códigos de barras unidimensionales tienen una limitación fundamental: solo pueden almacenar una cantidad modesta de datos. Un UPC-A almacena 12 dígitos. Incluso el Código 128, uno de los formatos 1D más densos, tiene dificultades para codificar un párrafo de texto en una marca escaneable. Aquí entran los códigos de barras bidimensionales. El PDF417, desarrollado por Symbol Technologies en 1991, parece una cuadrícula rectangular de diminutas barras y espacios apilados en filas —esencialmente una serie de códigos de barras 1D superpuestos—. Contiene suficientes datos para codificar un permiso de conducir completo, razón por la que lo encontrarás en el reverso de los carnés de conducir en Estados Unidos o en las tarjetas de embarque de los aviones. El Data Matrix, desarrollado aproximadamente en la misma época, codifica información en un pequeño cuadrado de celdas blancas y negras —tan pequeño que puede marcar pastillas farmacéuticas individuales, componentes electrónicos e instrumentos quirúrgicos—. Si quieres generar tu propio código de barras en cualquiera de estos formatos, puedes hacerlo al instante aquí.
Códigos QR: la revolución silenciosa de Japón
En 1992, un joven ingeniero de Denso Wave —filial del grupo Toyota— recibió un problema. Las líneas de montaje de Toyota eran una de las operaciones de fabricación más sofisticadas del mundo, pero tenían un cuello de botella de información. Cada componente de la línea se rastreaba con un código de barras, y el volumen de componentes era tan vasto que los escáneres no daban abasto. Los trabajadores invertían demasiado tiempo asegurándose de que el escáner capturara cada código. El sistema necesitaba ser más rápido. Mucho más rápido.
El ingeniero se llamaba Masahiro Hara, y pasaría los dos años siguientes resolviendo el problema con una herramienta que ocupaba la mayoría de sus almuerzos: el juego de mesa Go. Las piedras blancas y negras de un tablero de Go, observó, formaban patrones que podían codificar información de forma mucho más densa que las líneas paralelas de un código de barras. La información codificada en dos dimensiones —horizontal y verticalmente, no solo en horizontal— podía contener órdenes de magnitud más datos en el mismo espacio físico.
El resultado, completado en 1994, fue el código de Respuesta Rápida: el código QR. El nombre no fue casual. La especificación exigía que el código se decodificara en menos de 0,3 segundos. La velocidad era el objetivo principal.
Observa de cerca cualquier código QR y verás tres cuadrados idénticos: uno en la esquina superior izquierda, uno en la superior derecha, uno en la inferior izquierda. Son los patrones de búsqueda. Cuando un escáner ve tres cuadrados en esa disposición, sabe de inmediato: eso es un código QR. También sabe en qué orientación está y qué tamaño tiene cada módulo —cada celda individual—. La ausencia de la cuarta esquina es en sí misma información. Le dice al escáner cuál es el borde inferior.
El ingenio del código QR, más allá de su densidad, está en su corrección de errores. Usando un algoritmo llamado corrección de errores Reed-Solomon —las mismas matemáticas que hacen que los CD de audio sean legibles aunque estén rayados— un código QR puede sobrevivir a daños físicos significativos. En el nivel de corrección de errores más alto (llamado Nivel H), hasta el 30% de los módulos de datos del código pueden estar destruidos, tapados o sobreimpresos, y el código seguirá escaneándose correctamente. Por eso se ven tantos códigos QR con logotipos impresos directamente encima: el logotipo está destruyendo deliberadamente una parte del código, pero la corrección de errores absorbe la pérdida.
La parte más notable de la historia del código QR, sin embargo, es lo que Denso Wave hizo con la patente. La conservó. Y luego, en una decisión prácticamente sin precedentes en la historia empresarial, anunció públicamente que nunca la haría valer. Cualquier empresa, individuo o gobierno podía usar el formato QR sin pagar derechos, sin pedir permiso, sin ninguna restricción. Denso Wave se lo regaló al mundo. Esta única decisión —esencialmente donar el valor comercial de una tecnología ampliamente adoptada— es casi con certeza la razón por la que los códigos QR se convirtieron en un estándar global y no en un formato más entre muchos sistemas propietarios en competencia. El contraste con otras historias de patentes tecnológicas, donde los estándares se usaron como arma o se tomaron como rehenes, no podría ser más marcado.
Cómo los códigos QR conquistaron el mundo
En Japón, los códigos QR eran habituales ya en 2002. Los encontrabas en anuncios de revistas, envases de medicamentos, carteles de estaciones de tren y tarjetas de visita. Los teléfonos móviles japoneses de principios de los 2000 llevaban lectores QR integrados en sus cámaras como función estándar. Era simplemente parte de la vida cotidiana.
Occidente tardó incomprensiblemente en seguir su ejemplo. Parte del problema era el hardware: escanear un código QR requería una cámara de teléfono capaz de leerlo rápidamente y un procesador suficientemente potente para decodificarlo, y la mayoría de los teléfonos occidentales a mediados de los 2000 tenían dificultades. Parte del problema era el software: hacía falta una aplicación específica, lo que suponía un paso adicional que mucha gente simplemente no se tomaba. Las campañas de marketing imprimían códigos QR en vallas y carteles —visibles en una autopista a 110 km/h para alguien cuyo teléfono necesitaba tres toques para abrir una aplicación de escaneo— y se preguntaban por qué nadie los escaneaba. Los códigos estaban técnicamente presentes. La experiencia de usuario, no.
China tomó un camino completamente diferente. Cuando WeChat Pay y Alipay lanzaron sistemas de pago basados en códigos QR a principios de los 2010, los consumidores chinos no necesitaron convencerse: la utilidad era inmediata y obvia. En pocos años, los vendedores callejeros, los restaurantes y los puestos de mercado de las ciudades chinas habían dejado de aceptar efectivo casi por completo. Un código QR pegado en el mostrador era todo lo que necesitabas. Esto ocurrió antes de que Apple tuviera soporte nativo para códigos QR en su cámara. China construyó efectivamente una economía sin efectivo sobre la invención de Masahiro Hara.
El punto de inflexión en Occidente llegó el 19 de septiembre de 2017, cuando Apple lanzó iOS 11 con lectura nativa de códigos QR integrada directamente en la aplicación Cámara. Sin necesidad de aplicaciones de terceros. Apunta tu cámara al código, aparece una notificación, tócala. La fricción había desaparecido. Google había añadido en silencio una funcionalidad similar a Android aproximadamente al mismo tiempo. Las dos plataformas móviles dominantes habían votado, en la práctica, por los códigos QR como estándar.
Luego llegó marzo de 2020. En pocas semanas tras el levantamiento de los confinamientos por la COVID-19 en muchos países, los restaurantes descubrieron que los menús de papel eran un riesgo higiénico. Imprimir nuevos menús era costoso. La solución —un código QR en la mesa que abría una página web— requería casi ninguna inversión y era comprendida de inmediato por una base de clientes que ahora llevaba lectores QR nativos en el bolsillo. Millones de personas que nunca habían escaneado conscientemente un código QR lo hicieron por primera vez en un restaurante o bar, y el concepto encajó. Pasaportes de vacunación, entradas para eventos, aplicaciones de rastreo de contactos, sistemas de pedido de comida para llevar: los códigos QR estaban de repente en todas partes.
Hoy, WhatsApp usa códigos QR para vincular sesiones de escritorio a teléfonos. Instagram y LinkedIn generan códigos QR de perfil. Las direcciones de monederos de Bitcoin se comparten habitualmente como códigos QR. La especificación que Masahiro Hara escribió en 1994 para rastrear piezas de automóviles en una línea de montaje de Toyota ahora mueve dinero, verifica identidades y abre puertas en todo el mundo. Si quieres generar un código QR gratis, puedes hacerlo al instante: cualquier texto, URL o información de contacto, en segundos.
La economía digital de los códigos
Los códigos físicos que hemos analizado —cifrados, códigos de barras, códigos QR— son todos formas de codificar información para su transmisión o lectura física. Pero en los últimos treinta años ha crecido una economía paralela de códigos puramente digitales que supera en tamaño a todo lo anterior. Interactúas con estos códigos constantemente, en gran medida sin saberlo.
Códigos de descuento y la psicología de ganarse algo
El código de descuento es un invento del comercio minorista de un poder engañosamente grande. Los economistas conductuales lo han estudiado ampliamente y han encontrado algo contraintuitivo: un código de descuento es más eficaz para impulsar la compra que un descuento automático equivalente, aunque el precio final sea idéntico. La razón está en la psicología del esfuerzo. Un código que encuentras, copias y pegas en el formulario de pago se siente ganado. La satisfacción del descuento es en parte la satisfacción de haber sido lo bastante listo para encontrarlo. Los minoristas lo descubrieron antes que los académicos, razón por la que los cupones —un formato inventado por Coca-Cola en 1887 (trozos de papel escritos a mano para un vaso de Coca-Cola gratis)— nunca desaparecieron. Simplemente se trasladaron a internet.
OTP: la ventana de 30 segundos
Cuando tu aplicación bancaria o autenticador genera un código de seis dígitos que caduca en 30 segundos, está usando TOTP: contraseña de un solo uso basada en tiempo, estandarizada en RFC 6238. El algoritmo toma un secreto compartido (acordado entre tu banco y tu aplicación autenticadora cuando configuraste la autenticación de dos factores) y lo combina con la marca de tiempo Unix actual dividida en ventanas de 30 segundos. Tanto tu dispositivo como el servidor del banco realizan de forma independiente el mismo cálculo. Como comparten el mismo secreto y el mismo reloj, obtienen el mismo código de seis dígitos. Nadie transmite el código por la red: se deriva simultáneamente en ambos lados. Aunque un atacante intercepte un código, no sirve de nada 30 segundos después. El HOTP (OTP basado en HMAC) funciona de forma similar pero avanza con cada uso en lugar de con el tiempo —lo encontrarás en llaves de seguridad hardware y en algunos lectores de tarjetas bancarias—. Si necesitas probar un generador de OTP, puedes hacerlo aquí.
Claves API: el apretón de manos secreto de internet
Cualquier desarrollador que trabaje con servicios de terceros tiene un cajón —metafóricamente hablando— lleno de claves API. Estas largas cadenas aleatorias autentican software ante otro software. Cuando tu aplicación del tiempo solicita la temperatura actual a un servicio meteorológico, incluye una clave API en la solicitud. El servicio meteorológico comprueba la clave, confirma que pertenece a una aplicación registrada legítima y responde. Sin la clave, la solicitud es rechazada. Una clave API es esencialmente una contraseña que un programa usa en lugar de un humano. La diferencia con una contraseña tradicional es la entropía: una clave API bien generada suele tener 256 bits de aleatoriedad, frente a una contraseña elegida por un humano que podría tener 30. No hay diccionario, ni fecha de cumpleaños, ni nombre de pareja. Solo aleatoriedad.
Tokens de sesión: cómo los sitios web te recuerdan
HTTP, el protocolo de la web, no tiene estado: cada solicitud es técnicamente independiente, sin memoria incorporada de las solicitudes anteriores. Cuando inicias sesión en un sitio web, el servidor genera un token de sesión: una larga cadena aleatoria que almacena en su lado y envía a tu navegador como cookie. En cada solicitud posterior, tu navegador incluye el token en la cabecera de la solicitud. El servidor ve el token, lo consulta en su almacén de sesiones y sabe quién eres. El token no es tu contraseña: es un representante temporal y desechable de tu estado de autenticación. Cuando cierras sesión, el servidor elimina el token de su almacén. La cookie en tu navegador pierde todo significado. Por eso puedes estar conectado a la misma cuenta en varios dispositivos simultáneamente (cada dispositivo tiene su propio token) y por qué cerrar sesión en un dispositivo no cierra la sesión en los demás a menos que el servidor invalide explícitamente todos los tokens.
Claves de licencia de software y la era del CD-Key
En los años noventa y principios de los 2000, la piratería de software era una crisis real para las empresas del sector. Su solución fue el CD-key: un largo código alfanumérico impreso dentro de la caja que debías introducir durante la instalación. Los códigos no eran aleatorios: se generaban mediante un algoritmo que producía solo ciertos patrones válidos, de modo que el instalador podía verificar la clave sin conectarse a un servidor. Windows XP de Microsoft, por ejemplo, usaba un complejo algoritmo de validación que comprobaba sumas de dígitos y patrones de bits específicos. El resultado fue un juego del gato y el ratón: los piratas hackeaban el algoritmo de validación y publicaban generadores de claves. Las empresas añadían requisitos de activación en línea. Los piratas escribían activadores sin conexión. La guerra no ha terminado: simplemente se ha trasladado a otros frentes.
UUID: el espacio de direcciones suficiente para todo
El UUID —Identificador Único Universal— es un número de 128 bits, escrito habitualmente como 32 dígitos hexadecimales con el patrón 550e8400-e29b-41d4-a716-446655440000. El UUID versión 4 (el más común) se genera casi en su totalidad a partir de aleatoriedad. El número total de UUID versión 4 posibles es 5,3 × 1036. Para ponerlo en perspectiva: si cada persona que ha existido hubiera generado mil millones de UUID por segundo durante toda su vida, la probabilidad de que dos UUID colisionaran seguiría siendo insignificantemente pequeña —menos de uno entre un billón—. En la práctica, las colisiones de UUID son tan improbables que se ignoran. Cada fila de base de datos, cada cuenta de usuario, cada archivo cargado en una aplicación web moderna probablemente tiene uno. Son los códigos postales del mundo digital, asignando direcciones únicas en un espacio de direcciones tan vasto que nunca se agotará.
¿Qué hace que un código sea verdaderamente seguro?
Hay una diferencia entre un código que parece aleatorio y uno que es aleatorio. La diferencia importa enormemente, y confundirlos ha causado algunos de los fallos de seguridad más vergonzosos en la historia de internet.
En 2012, LinkedIn sufrió una brecha en la que se robaron y publicaron en un foro ruso 6,5 millones de hashes de contraseñas. Los hashes eran SHA-1 —rápido e inadecuado para los estándares modernos—, pero el detalle verdaderamente condenatorio era que LinkedIn no había añadido sal correctamente. Una sal es una cadena aleatoria que se añade a una contraseña antes de aplicar el hash, de modo que dos usuarios con la misma contraseña produzcan hashes diferentes. LinkedIn había usado sales secuenciales y predecibles. Los atacantes que descifraban un hash descubrían a menudo que, de paso, habían descifrado miles de otros. La predictibilidad de la sal —la apariencia de aleatoriedad sin la sustancia— multiplicó el daño de forma catastrófica.
La medida formal de aleatoriedad de un código es la entropía, medida en bits. El lanzamiento de una moneda tiene 1 bit de entropía: dos resultados igualmente probables. Un dado de seis caras tiene aproximadamente 2,58 bits. Un código de cuatro caracteres extraído de un conjunto de 62 caracteres alfanuméricos tiene log₂(62⁴) ≈ 23,8 bits. Un código de ocho caracteres del mismo conjunto tiene 47,6 bits. Esto no es solo un número mayor: cada bit adicional duplica el número de códigos posibles, duplicando el trabajo que debe hacer un atacante. La entropía escala exponencialmente. Una contraseña de 60+ bits se considera fuerte; por debajo de los 30 bits, cualquier atacante determinado con hardware modesto la descifraría rápidamente.
Hay una distinción más crítica: generación en el lado del cliente frente a generación en el servidor. Cuando una herramienta genera códigos completamente en tu navegador —usando el propio generador de números aleatorios criptográficos del navegador, sin enviar datos a ningún servidor— los códigos nunca viajan por la red. No pueden registrarse, interceptarse ni almacenarse en una base de datos que no controlas. Este no es un detalle menor de privacidad. Para códigos sensibles —contraseñas, códigos de recuperación, claves API— la pregunta de dónde ocurre la generación es tan importante como la de cómo. El generador de esta página funciona completamente en el lado del cliente e incluye un medidor de fortaleza de entropía que muestra en tiempo real exactamente cuánta aleatoriedad produce cada configuración de patrón.
El hilo que atraviesa todo
Julio César no reconocería un código QR. Alan Turing nunca vio un token JWT. Norman Woodland, arrastrando los dedos por la arena de aquella playa en Miami, no podría haber imaginado que sus extendidas rayas de Morse algún día guiarían una infraestructura logística de billones de dólares. Y sin embargo, hay un hilo que atraviesa todo esto: el mismo impulso, expresado a lo largo de dos mil años de ingenio humano.
Que esto sea privado. Que esto sea auténtico. Encuentra este objeto de nuevo. Identifica quién soy.
Estas cuatro necesidades han impulsado la criptografía, la tecnología de códigos de barras, los estándares QR y todo el aparato de la identidad digital. Las herramientas cambian —los rotores dan paso a las curvas elípticas, las dianas dan paso a las matrices de datos—, pero las necesidades no. Las guerras se han ganado o prolongado por la calidad de los códigos. Los mercados se han creado o destruido. Una pandemia global se navegó en parte gracias al código QR que un ingeniero japonés inventó para rastrear puertas de automóviles.
El próximo capítulo ya se está escribiendo. Los ordenadores cuánticos, si alcanzan la escala suficiente, podrán romper la mayor parte de la criptografía asimétrica que protege internet hoy en día, incluidas RSA y la curva elíptica Diffie-Hellman. El Instituto Nacional de Estándares y Tecnología de EE.UU. finalizó los primeros estándares criptográficos poscuánticos en 2024, tras un proceso de selección que duró ocho años. Las matemáticas desplegadas para defenderse de los ataques cuánticos serían completamente irreconocibles para Vigenère, probablemente impenetrables para Turing, y casi con toda seguridad desconcertantes para Masahiro Hara. Pero el problema que resuelven —que esto sea privado— es exactamente el que César grababa en sus tablillas de cera hace dos mil años.
La vida secreta de los códigos nunca ha estado más viva. Y si necesitas generar una contraseña aleatoria segura, un lote de códigos de descuento para una promoción, una clave API para tu próximo proyecto, o simplemente quieres explorar qué hace que un código sea seguro, las herramientas están aquí: gratuitas, privadas y en el lado del cliente.