La exponenciación modular — calcular a^b mod m — parece un simple ejercicio de aritmética, pero calcularla eficientemente es lo que hace práctica a la criptografía moderna de clave pública. Esta calculadora computa a^b mod m usando el algoritmo de cuadrado y multiplicación y muestra exactamente cómo funciona, bit a bit.

¿Por qué no simplemente calcular a^b y luego tomar el resto?

Para números pequeños, calcular a^b directamente y luego reducir mod m funciona bien. Pero las operaciones criptográficas usan exponentes y módulos de cientos de dígitos de longitud — a^b en sí tendría muchos más dígitos que átomos en el universo observable, mucho antes de siquiera llegar al paso "mod m". Cuadrado y multiplicación evita esto por completo al reducir módulo m después de cada elevación al cuadrado y multiplicación, de modo que ningún valor intermedio excede jamás a m. Combinado con el hecho de que solo necesita alrededor de log2(b) multiplicaciones en lugar de b − 1, esto es lo que hace que operaciones como el cifrado RSA con un exponente de 2048 bits se completen en milisegundos en lugar de ser computacionalmente imposibles.

Leyendo las pestañas de Pasos de Cuadrado y Multiplicación y Exponente Binario

El algoritmo recorre los dígitos binarios del exponente de más significativo a menos significativo. En cada bit, eleva al cuadrado el resultado acumulado y reduce mod m; si ese bit es un 1, también multiplica por la base y reduce nuevamente. La pestaña Exponente Binario muestra qué bits son 1 y cuáles son 0 — cada bit 1 es una multiplicación extra además de las elevaciones al cuadrado que requiere cada bit. Un exponente de 20 bits, sin importar cuán grande sea el número decimal que representa, sigue costando solo 20 elevaciones al cuadrado y como máximo 20 multiplicaciones.

Límites y casos especiales

Esta calculadora solo admite exponentes no negativos. Un exponente negativo — como a^(-1) mod m — requiere calcular el inverso modular de a, que solo existe cuando a y m son coprimos y necesita un algoritmo completamente diferente (el algoritmo extendido de Euclides); no está soportado aquí. Un módulo de 1 siempre produce 0, ya que todo entero es divisible entre 1. Y aunque la base puede ingresarse como negativa, se normaliza al rango [0, m) antes de que se ejecute el algoritmo, coincidiendo con la convención matemática estándar de que a mod m siempre es no negativo.