Procedimientos de firma
Ed25519 explicado matemáticamente
La firma que acompaña a cada valoración de McGesund — desde la curva y la clave hasta la ecuación que recalcula el navegador del lector.
Actualizado: 2026-09-07
1. De qué trata esto
Una valoración en McGesund no es un campo de texto de una base de datos en el que haya que creer sin más. Al enviarla se firma digitalmente, y cualquier visitante puede recalcular esa firma más tarde en su propio navegador.
Para esta firma utilizamos Ed25519. A diferencia de FALCON y ML-DSA, que pueden añadirse al lado como sellos adicionales, Ed25519 no es opcional: toda valoración firmada la lleva, con independencia de la tarifa y de la vía de envío.
Una precisión previa:
Ed25519 no es un cifrado. El texto de la valoración está justamente para leerse. La firma no demuestra confidencialidad, sino origen e integridad.
2. Qué se firma exactamente
No se firma el texto corrido, sino un objeto de datos compacto que fija de forma inequívoca el texto y todo lo demás:
{
"v": 1,
"typ": "rev-comment",
"f": "<ID de la empresa>",
"c": "<ID de la valoración>",
"h": "<SHA-256 del texto de la valoración>",
"rh": "<SHA-256 del registro de envío completo>",
"rv": 1,
"qh": "<SHA-256 del envelope QR, solo en valoraciones por QR>",
"kid": "<ID de la clave>",
"iat": 1757203200
}
Este objeto se codifica en CBOR. Esa secuencia de bytes — y no su representación cuidada de arriba — es nuestro mensaje . Firma y mensaje viajan juntos dentro de un sobre:
El es la versión del formato. No hay nada más ahí dentro — en particular, ninguna firma post-cuántica: esa se encuentra, si existe, junto al registro y no dentro del sobre.
3. Qué debe lograr la firma
Un lector que llega a un perfil de empresa se plantea dos preguntas:
- ¿Procede esta valoración realmente del sistema de McGesund?
- ¿Se ha modificado posteriormente?
Para eso existe un par de claves:
- una clave privada — permanece en el servicio de firma
- una clave pública — puede tenerla cualquiera; se direcciona mediante el identificador de clave (
kid) del payload
Se firma con la clave privada. Se verifica con la pública — y además en el navegador del lector, no en nuestro servidor. Ese es el punto: una verificación que realizásemos nosotros mismos y cuyo resultado comunicásemos no sería una verificación, sino una afirmación.
4. ¿Por qué una curva elíptica?
Toda firma necesita un cálculo que sea fácil en un sentido y prácticamente imposible en el otro. En Ed25519 ese cálculo es la multiplicación escalar sobre una curva elíptica:
Calcular el punto público a partir del número secreto cuesta microsegundos. Deducir a partir de es el problema del logaritmo discreto — y para él no se conoce ningún método que termine en plazos humanos con este tamaño.
La ventaja práctica frente a procedimientos más antiguos como RSA está en el tamaño:
| clave pública | firma | |
|---|---|---|
| RSA-3072 | 384 B | 384 B |
| Ed25519 | 32 B | 64 B |
Con un nivel de seguridad comparable. 64 bytes por valoración no son, ni siquiera con millones de valoraciones, una magnitud sobre la que haya que reflexionar.
5. La curva edwards25519
Se calcula módulo un número primo:
De ahí el nombre. La curva es una curva de Edwards retorcida:
Un «punto» es un par de números de que cumple esta ecuación. No hay ninguna curva que ver — el dibujo de la sección siguiente es una ayuda visual sobre los números reales, no una imagen del espacio de cálculo real.
Faltan aún dos magnitudes:
- un punto base fijado por convenio,
- el orden del subgrupo generado por :
es primo. Eso significa: si se suma una y otra vez consigo mismo, se recorren exactamente puntos distintos y después se vuelve al principio. Por eso todos los cálculos con escalares se hacen módulo y todos los cálculos con coordenadas módulo . Confundir estos dos números es el error clásico de principiante.
6. Sumar puntos
Dos puntos se combinan en un tercero según una fórmula fija:
El elemento neutro es — el punto en el que empieza el cálculo.
Esta fórmula tiene una propiedad que no se aprecia a simple vista y que para la seguridad importa más que cualquier constante: es completa. Funciona para todas las entradas, sin casos especiales para «ambos puntos iguales» o «el resultado es el elemento neutro». En las curvas de Weierstrass, más antiguas, esos casos especiales existen, y cada uno de ellos es una rama en el programa — una rama cuyo tiempo de ejecución se puede medir. Quien mide cuánto tarda una firma averigua, en esos procedimientos, algo sobre la clave secreta.
Fórmulas completas significan: siempre el mismo camino de cálculo, siempre el mismo tiempo, nada que medir.
7. Multiplicación escalar — la calle de sentido único
significa sumar exactamente veces consigo mismo. Con un de 253 bits eso sería una cantidad de trabajo absurda — por eso se duplica:
y con esos resultados intermedios se compone el deseado. Unas 253 duplicaciones bastan para cualquier . Ese es el camino de ida.
Hacia atrás no existe ese atajo. Determinar el número a partir del punto significa resolver el problema del logaritmo discreto.
En el procedimiento real se calcula módulo . Allí no hay «izquierda», ni «derecha», ni proximidad: y se convierten en dos pares de números sin parentesco reconocible alguno.
8. El par de claves del servicio de firma
Al principio hay 32 bytes aleatorios, la semilla. Todo lo demás se deriva de ahí:
De la primera mitad surge el escalar secreto , aunque no sin cambios. Tres bits se ponen a uno o a cero — el llamado clamping:
- los tres bits inferiores se ponen a cero: con ello pasa a ser un múltiplo de 8. La razón es el cofactor 8 de la curva — el grupo de puntos completo es ocho veces mayor que el subgrupo de orden . Un divisible por 8 acaba con seguridad en el subgrupo correcto y no revela nada sobre puntos de orden pequeño.
- el bit superior se pone a cero y el segundo por arriba a uno: así tiene siempre la misma longitud en bits. Un más corto necesitaría menos duplicaciones — y de nuevo el tiempo de ejecución dejaría algo que leer.
La clave pública es entonces, simplemente,
almacenada en 32 bytes: la coordenada y, en el bit más alto, el signo de . La la recalcula el propio verificador a partir de la ecuación de la curva — las dos soluciones se diferencian solo en el signo, y cuál es la correcta lo dice ese único bit.
La segunda mitad del valor hash, el prefijo, no hace falta para la clave. Entra en juego en la sección siguiente.
9. Por qué aquí el azar no es azar
Toda firma de este tipo necesita un valor único , llamado a menudo nonce. Nunca puede repetirse: quien disponga de dos firmas con el mismo puede despejar la clave secreta con álgebra elemental.
Precisamente en eso han fracasado sistemas reales. El caso más conocido es la verificación de firmas de una videoconsola cuyo fabricante utilizó en 2010 siempre el mismo nonce — la clave privada quedó así reconstruible públicamente.
Ed25519 lo resuelve no utilizando azar en absoluto:
El nonce depende del prefijo secreto y del mensaje. De ahí se siguen dos cosas:
- Dos valoraciones distintas dan, con probabilidad abrumadora, valores distintos — el caso de repetición no se produce.
- La misma valoración da siempre la misma firma. Un proceso de firma se puede así reproducir, y un mal generador de números aleatorios en el servidor no puede estropear nada, porque no se necesita ninguno.
Para un portal de valoraciones con muchas firmas al día esa no es una ventaja académica. Es la diferencia entre «un fallo en la fuente de aleatoriedad sería fatal» y «no hay ninguna fuente de aleatoriedad que pueda fallar».
10. Firmar
Tres líneas, nada más:
La firma es el par
32 bytes para el punto , 32 bytes para el número — 64 bytes en total.
Merece atención la segunda línea: en entran , la clave pública y el mensaje. Que se incluya en el hash no es un adorno — evita ataques en los que una firma se reinterpreta como perteneciente a otra clave.
11. Verificar
El navegador del lector conoce: la valoración , la firma y la clave pública . Recalcula y comprueba una única ecuación:
Si se cumple, la firma es válida. RFC 8032 permite además la variante multiplicada por el cofactor, , que trata algunos casos límite con mayor tolerancia.
No se pregunta a ningún servidor, no hace falta que ningún servicio esté disponible. Basta con la clave pública.
12. Por qué la ecuación cuadra
Basta con sustituir:
Todo el truco está en la transformación intermedia: la multiplicación escalar es compatible con la adición. Quien conoce puede calcular un que satisfaga la ecuación. Quien no conoce tendría que encontrar, para un elegido por él mismo, un adecuado — y eso significa resolver el logaritmo discreto.
13. Un miniejemplo calculado por completo
Con los números reales no hay nada que recalcular — valores de 253 bits no se comprueban mentalmente. Por eso, el mismo procedimiento en un grupo diminuto, en el que cada paso se puede seguir con la calculadora.
Paso 1: El grupo
Calculamos con los restos módulo y tomamos . Se cumple
es decir, genera un subgrupo de orden . Las potencias son:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 4 | 8 | 16 | 9 | 18 | 13 | 3 | 6 | 12 | 1 |
asume el papel del punto base , y la multiplicación el de la adición de puntos. Los escalares se calculan módulo ; los valores, módulo .
Paso 2: El par de claves
Sea el secreto . Entonces
puede saberlo cualquiera.
Paso 3: Nonce y commitment
Supongamos que del prefijo y la valoración resulta . De ahí:
Paso 4: El desafío
Supongamos que el hash sobre , y la valoración da
Paso 5: La firma
La firma es el par .
Paso 6: El navegador verifica
Calcula ambos lados. A la izquierda:
A la derecha, con :
Ambos lados dan :
Paso 7: Alguien modifica el texto de la valoración
El texto entra en el hash, así que cambia el desafío — digamos que a . La firma sigue siendo , pero el lado derecho no. Con :
Podemos borrar una valoración. Lo que no podemos es modificarla sin que se note.
Nota de honestidad sobre el ejemplo
Aquí se ha calculado en el grupo multiplicativo módulo , no sobre una curva: representa , y el producto representa la adición de puntos . La estructura es la misma, y de eso se trata precisamente. Lo que difiere son los órdenes de magnitud: frente a , y allí la clave no se encuentra probando once posibilidades.
14. Qué ocurre si alguien modifica la valoración
Supongamos que alguien con acceso a la base de datos — también alguien de nuestra casa — modifica el texto de la valoración o uno de los corazones. Entonces cambia el registro y con él, al menos, uno de los dos valores hash h y rh del payload. Con ello cambia , con ello el desafío , y con ello el lado derecho de la ecuación de verificación. La firma antigua ya no encaja.
La frase decisiva al respecto: podemos borrar una valoración, pero no podemos modificarla sin que se note. En McGesund esa misma verificación se ejecuta además cada noche del lado del servidor sobre todo el fondo — una valoración que no la supera deja de contar en la media de la empresa.
15. Por qué fracasa un atacante
Conoce la clave pública , el punto base , la curva y todas las firmas emitidas hasta ahora. Lo que le falta es .
El mejor ataque clásico conocido contra el problema del logaritmo discreto en un grupo de orden necesita aproximadamente pasos. Con eso equivale a unas
operaciones. Para comparar: incluso una máquina capaz de mil millones de miles de millones () de pasos por segundo necesitaría para ello un múltiplo de la edad del universo.
Falsificar sin la clave significaría encontrar, para un elegido por uno mismo, un adecuado — la misma tarea con otro disfraz.
16. Por qué Ed25519 y no ECDSA
Ambos se basan en el mismo problema. La diferencia está en todo lo que ocurre alrededor:
| ECDSA (curvas NIST) | Ed25519 | |
|---|---|---|
| Nonce | requiere azar fresco | determinista, a partir del prefijo y el mensaje |
| Fórmulas | casos especiales, ramas dependientes de los datos | completas, un único camino de cálculo |
| Parámetros de la curva | origen de las constantes nunca explicado del todo | elegidos con criterios verificables |
| Tamaño de la firma | 64–72 B, codificación variable | fijo, 64 B |
| En el navegador | disponible desde hace mucho | nativo desde 2023/2024; si no, como biblioteca JS |
Para nosotros el nonce fue el argumento decisivo. Un portal de valoraciones firma con frecuencia y de forma automatizada; un procedimiento en el que un único valor aleatorio débil revela la clave es, para eso, la elección equivocada.
17. Lo que Ed25519 no ofrece
Ed25519 se basa en el logaritmo discreto — y precisamente ese problema lo resuelve de forma eficiente un ordenador cuántico suficientemente grande con el algoritmo de Shor. Si esas máquinas llegarán a existir, y cuándo, es una cuestión abierta. Para una valoración que debe seguir siendo verificable dentro de diez años es, aun así, una pregunta que hay que responder hoy.
Por eso, junto a la firma Ed25519 puede colocarse un sello resistente a la computación cuántica:
- FALCON (FN-DSA) — firmas compactas a partir de retículos NTRU
- ML-DSA-87 (FIPS 204) — el estándar NIST ya cerrado
Ninguno de los dos sustituye a Ed25519; se colocan a su lado. Si uno de los procedimientos se rompe, el otro sigue sosteniendo.
18. El proceso en imagen
19. Qué hace McGesund concretamente con esto
El envelope. Cada valoración firmada lleva un sobre MCG1: con la versión de formato, el payload y la firma Ed25519. El kid del payload indica de qué clave se trata; la clave pública correspondiente la entrega el servidor cuando se le solicita — es pública, ahí no hay nada que proteger.
La verificación en el navegador. Chrome y Firefox soportan Ed25519 de forma nativa desde 2023/2024 a través de la interfaz WebCrypto. Safari no — allí la llamada lanza un error en lugar de verificar. Por eso nuestro código de verificación recurre a una implementación puramente en JavaScript, que solo se carga donde hace falta. La verificación de firma se completa así en cualquier navegador, y además en el dispositivo del lector.
El ancla temporal. La huella de la clave de firma se ancla mediante OpenTimestamps en un bloque de Bitcoin. Con ello no solo se puede acreditar que la firma es auténtica, sino también que la clave ya existía en un momento determinado — sin que nadie tenga que creerse nuestra marca de tiempo.
La vinculación al contenido. El payload lleva rh, el hash sobre el registro de envío completo: texto, corazones, estado de geolocalización, datos del motivo y procedencia. La firma Ed25519 no vincula así solo el texto, sino todo lo que se muestra junto a la valoración.
20. Una frase para llevarse
Quien posee el escalar secreto firma en microsegundos. Quien no lo posee tendría que resolver un logaritmo discreto en un grupo con unos elementos.
Para el lector de una valoración eso significa, simplemente: no tiene que creernos. Puede recalcularlo.