Ethereum: de historia a labs
Artículo 30 de 48
63%
completado al llegar aquí
Sistemas distribuidosNota de investigación14 min de lectura
Validadores, attestations y BLS
Qué firma un validador en cada attestation, cómo se agregan las firmas BLS12-381 en subredes y qué protege una clave de firma frente al slashing.
Ruta Ethereum: 0/48
Prerequisitos recomendados
Si alguno de estos conceptos todavía está medio nebuloso, empieza por aquí. Te ahorra tropiezos y un par de cejas fruncidas.
Gasper: Casper FFG + LMD-GHOST en una sola cabeza
Cómo decide Ethereum: LMD-GHOST elige la cabeza con el último voto de cada validador y Casper FFG justifica y finaliza checkpoints por supermayoría.
Blockchain13 min de lectura→Firmas en BFT: threshold, aggregate y por qué AggQC no es un QC normal
Puente entre QC/highQC y Fast-HotStuff: firmas de réplicas, threshold signatures, aggregate signatures y la evidencia que transporta AggQC.
Blockchain14 min de lectura→
Piensa en un comité de cien validadores que vota lo mismo en el mismo slot. Si cada voto viajara y se guardara con su propia firma, un bloque cargaría cien firmas por comité y cada nodo tendría que verificarlas una a una. Ethereum hace otra cosa: junta esas firmas en una sola y verifica el grupo de una vez.
Este capítulo abre ese mecanismo en cuatro capas: qué contiene exactamente un voto, por dónde viaja hasta entrar en un bloque, por qué la criptografía BLS permite comprimirlo y qué riesgos operativos tiene la clave que lo firma. El voto se llama attestation: una declaración firmada de cómo ve la cadena un validador. [1]
Brújula de lectura
Actor, evidencia y estado
Actor
Validador y agregadorEl validador firma su voto; un agregador elegido al azar junta los votos iguales.
Evidencia
Firma BLS agregadaUna firma de 96 bytes más un mapa de bits de quién participó.
Estado
Votos de cabeza y finalidadCada attestation alimenta a LMD-GHOST y a Casper FFG a la vez.
Preguntas guía
- ¿Qué campos firma un validador y cuál de ellos es el voto de finalidad?
- ¿Por qué solo se pueden agregar firmas sobre exactamente los mismos datos?
- ¿Quién decide qué validador agrega y cómo lo demuestra?
- ¿Qué pasa si la misma clave de validador corre en dos máquinas a la vez?
Conexiones dentro de la serie
- Antes: Gasper: Casper FFG + LMD-GHOST explica para qué sirven los dos votos que lleva cada attestation.
- Criptografía: Firmas en BFT: threshold, aggregate y AggQC explica por qué BLS agrega tan bien y en qué se diferencia de una firma umbral.
- Después: Finality, slashing e inactivity leak cubre las penalizaciones cuando el voto se usa mal.
- Reloj: Beacon Chain desde cero explica slots, epochs y comités.
Anatomía de una attestation: qué firma un validador
Una attestation tiene tres partes: aggregation_bits, un mapa de bits que dice qué miembros del comité firmaron; data, el contenido del voto; y signature, la firma BLS que agrega las firmas individuales. [1] El contenido es este contenedor de la especificación:
# Extracto de consensus-specs, phase0/beacon-chain.md
class AttestationData(Container):
slot: Slot
index: CommitteeIndex
beacon_block_root: Root # voto de cabeza (LMD-GHOST)
source: Checkpoint # voto FFG: último checkpoint justificado
target: Checkpoint # voto FFG: checkpoint de la epoch actualbeacon_block_root es la raíz del bloque que el validador ve como cabeza tras correr el fork choice; source y target forman el voto de finalidad. [1] Un solo mensaje firmado lleva los dos votos de Gasper.
El validador no firma los datos a secas. Firma un signing root: el hash de los datos junto con un dominio. [2] El dominio mezcla el tipo de mensaje (DOMAIN_BEACON_ATTESTER, distinto del de propuesta o del de RANDAO) con la versión del fork y la raíz de validadores de génesis, y la especificación lo justifica para evitar colisiones entre forks y cadenas. [2] Así, una firma de attestation no puede reutilizarse como firma de bloque ni en otra red.
Desde Electra el campo index ya no distingue comités. EIP-7549 sacó el índice de comité del mensaje firmado para poder agregar votos iguales de comités distintos. [3] La especificación de Electra exige data.index == 0 y añade a la attestation un campo committee_bits que indica qué comités participan. [4]
Traza de ejecución: del voto individual al bloque
Sigue un voto desde la clave hasta el bloque. El validador conoce su comité y su slot con antelación. En ese slot espera el bloque del proponente; atestigua en cuanto recibe un bloque válido o, si no llega, cuando ha pasado get_attestation_due_ms() desde el inicio del slot, lo que ocurra primero. [5] En mainnet ese plazo es ATTESTATION_DUE_BPS = 3333 puntos básicos, cerca de un tercio del slot. [5]
El voto se publica en una subred de attestations, no en toda la red. Dentro de cada comité, algunos validadores son agregadores. La selección es local y verificable: el validador firma el número de slot y, si el hash de esa firma módulo len(committee) // 16 da cero, es agregador. [5] El 16 es TARGET_AGGREGATORS_PER_COMMITTEE, así que se esperan unos 16 agregadores por comité. [5]
El agregador junta las attestations con datos idénticos a los suyos, enciende los bits correspondientes y suma las firmas. [1] Luego publica el agregado en el canal global beacon_aggregate_and_proof hacia los dos tercios del slot, con su prueba de selección para que la red pueda comprobar que tenía derecho a agregar. [5] El proponente del bloque siguiente recoge esos agregados y los incluye. [1]
Traza
De la clave al bloque
Agregación de attestations: muchas firmas, una comprobación
Cómo leer esta figura
A la izquierda, bajo el título comité del slot, cuatro validadores: V1, V2 y V3 con firmas sigma 1, sigma 2 y sigma 3, y V4 en línea discontinua con la etiqueta no vota. Las tres firmas llegan con flechas a la caja Agregador, que suma firmas con la misma data; la flecha de V4 es discontinua y lleva la etiqueta bit 0. Del agregador sale una flecha a la caja attestation agregada, que contiene data con slot, head, source y target, bits 1110 y firma sigma igual a sigma 1 más sigma 2 más sigma 3. De ahí sale una flecha a Bloque y verificación: una comprobación con pk1, pk2 y pk3, con la etiqueta FastAggregateVerify.
BLS12-381: una firma que vale por muchas
Ethereum usa firmas BLS sobre la curva BLS12-381. En la especificación, una clave pública es un punto comprimido del grupo G1 de 48 bytes y una firma es un punto comprimido del grupo G2 de 96 bytes. [2] La interfaz sigue el borrador IETF de firmas BLS, versión 4, con el ciphersuite BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_. [2]
Las funciones que importan aquí son tres. Aggregate combina varias firmas en una. FastAggregateVerify comprueba una firma agregada contra varias claves públicas que firmaron el mismo mensaje. AggregateVerify acepta mensajes distintos, a un coste mayor. [2] La validación de una attestation usa la versión rápida: un solo mensaje, el signing root de la data. [2]
Esa es la razón técnica de la regla "solo se agregan votos con data idéntica". Si dos validadores ven cabezas distintas, sus signing roots difieren y sus firmas ya no caben en la misma comprobación rápida. La agregación no mezcla opiniones: comprime acuerdo exacto.
El sufijo POP del ciphersuite significa proof of possession, prueba de posesión. Sin ella, un atacante podría registrar una clave pública fabricada a partir de las de otros y falsificar un agregado (el ataque de clave maliciosa o rogue key). La Beacon Chain exige esa prueba al registrar al validador: el depósito lleva una firma sobre los propios datos del depósito, que el contrato no comprueba pero el procesamiento de depósitos sí. [2] Para la comparación con firmas umbral y certificados agregados, ver el capítulo de firmas en BFT.
Riesgo operativo del validador: claves, doble firma y protección local
Un validador maneja dos tipos de credencial. La clave de firma firma bloques y attestations y por eso vive en caliente, en una máquina conectada. Las credenciales de retiro indican a dónde va el saldo: el prefijo 0x00 es el formato BLS original, 0x01 apunta a una dirección de ejecución y 0x02 es el tipo moderno con capitalización. [6]
Si alguien roba la clave de firma, ethereum.org enumera lo que puede hacer: proponer dos bloques distintos para el mismo slot, firmar una attestation que envuelve a otra, firmar dos attestations distintas con el mismo target, o forzar una salida voluntaria. [6] Las tres primeras son faltas penalizables por slashing.
El fallo más común no es un robo. Es la propia operación: un equipo migra el validador a otra máquina, el proceso viejo sigue vivo, y la misma clave firma dos votos para la misma epoch. Para el protocolo eso es un doble voto, sin importar la intención.
Defensas que exige la especificación del validador honesto
0 de 4 revisados
Esa lista resume la sección de buenas prácticas de la especificación. [5] Para el punto del validador recuperado existe un formato estándar, EIP-3076, que permite mover el historial de firmas de una clave entre clientes sin firmar mensajes en conflicto. [7] Al momento de esta revisión su estado en eips.ethereum.org es Last Call.
La regla operativa queda así: una clave, un proceso firmante, una base anti-slashing que viaja con la clave. Si tu runbook de migración no apaga el firmante viejo y exporta su historial antes de arrancar el nuevo, el slashing está a un despliegue de distancia.
Bibliografía académica
- [1]
ethereum.org, "Attestations," Ethereum developer documentation, accessed 2026-11-12.
Campos de la attestation, agregación en subredes, 16 agregadores por comité e inclusión en bloque.
- [2]
ethereum/consensus-specs, "Phase 0: The Beacon Chain," GitHub specification, accessed 2026-11-12.
AttestationData, dominios de firma, compute_signing_root, funciones BLS y prueba de posesión en depósitos.
- [3]
dapplion and M. Kalinin, "EIP-7549: Move committee index outside Attestation," Ethereum Improvement Proposals, 2023.
Saca el índice de comité del mensaje firmado para agregar votos iguales de comités distintos.
- [4]
ethereum/consensus-specs, "Electra: The Beacon Chain," GitHub specification, accessed 2026-11-12.
Attestation con committee_bits y comprobación de que data.index es 0.
- [5]
ethereum/consensus-specs, "Phase 0: Honest Validator," GitHub specification, accessed 2026-11-12.
Momento de atestiguar, selección de agregadores, TARGET_AGGREGATORS_PER_COMMITTEE = 16 y buenas prácticas de protección.
- [6]
ethereum.org, "Keys in proof-of-stake Ethereum," Ethereum developer documentation, accessed 2026-11-12.
Clave de firma del validador, credenciales de retiro 0x00, 0x01 y 0x02, y amenazas si se roba la clave.
- [7]
M. Sproul, S. Saint-Leger, and D. Ryan, "EIP-3076: Slashing Protection Interchange Format," Ethereum Improvement Proposals, 2020.
Formato estándar para mover el historial de firmas de una clave entre clientes sin firmar mensajes en conflicto.
Rutas vecinas
Si este tema te abrió hambre, sigue por aquí.
Series y labs que comparten área o dependen de esta ruta. Pocas opciones, para no convertir la curiosidad en menú infinito.
Series relacionadas
HotStuff: de cero a estado del arte
Ruta progresiva para entender consenso BFT moderno: quórums, sincronía parcial, locks, taxonomía one/two/three-chain, QC/highQC, multipipeline, view-change, responsiveness, AggQC, Fast-HotStuff, sync y frontera DAG-BFT.
Substrate: del runtime al consenso propio
Serie de 20 capítulos, de neófito a experto, sobre Substrate (Polkadot SDK): runtime en Wasm, FRAME, extrinsics, estado, pesos, actualizaciones sin fork, Aura, BABE, GRANDPA, sincronización, parachains, XCM, Sassafras, BEEFY y cómo conectar un consenso BFT propio a un nodo.
Ruta práctica: activos digitales en la operación
Nueve módulos, de menor a mayor dependencia, para decidir cómo usar custodia, wallets, llaves, firmas multifirma y MPC, AML/KYT y stablecoins con Fireblocks, BitGo, Kaleido, Circle y Tether.
Labs para convertir lectura en práctica
Prueba de trabajo y reajuste de dificultad
Laboratorio determinista para medir el costo de la prueba de trabajo y ver cómo el reajuste por altura de bloque estabiliza el tiempo entre bloques.
Consensus benchmark
Banco reproducible para comparar consenso BFT y documentar los trade-offs de HotStuff-2.
Ethereum local: Anvil, wallet y primera transacción
Laboratorio base para levantar una red local, crear cuentas, firmar transacciones y observar receipts sin gastar ETH real.
RPC y Cast: leer Ethereum con lupa
Ejercicios con JSON-RPC y Cast para consultar bloques, nonces, gas, receipts, logs y errores reproducibles.
Sigue leyendo
Ideas conectadas con este artículo
Una ruta corta para continuar sin abrir veinte pestañas y perder el hilo.
Beacon Chain desde cero
Validadores, depósitos, slots, epochs, committees y papel de Beacon Chain en Ethereum proof-of-stake.
Finality, slashing e inactivity leak
Double vote, surround vote, penalties, inactivity leak y recuperación de finality bajo condiciones malas.
Shapella: retirar stake sin romper el consenso
Withdrawals, validator lifecycle, partial/full exits y lo que Shapella cambió para operadores y stakers.
MEV y PBS: quién arma el bloque importa
Mapa práctico de MEV y PBS para entender quién ordena bloques, qué riesgo introduce el mercado de builders y cómo leer el roadmap sin perder seguridad.