Llaves en Cardano
En Cardano existen dos tipos de llaves: las llaves de nodo y las llaves de direcciones.
Llaves de nodo
Existen tres tipos de llaves principalmente utilizadas por los operadores de pool:
- Llaves operacionales
- Llaves KES o “Key Evolving Signature”
- Llaves VRF o “Verifiable Random Function
Llaves operacionales
Estas llaves confieren la posibilidad de firma de bloque a las llaves KES. Las hay de tipo online (hot) o de tipo offline (cold). Las llaves “frías” se deben guardar en una máquina sin conexión a internet. También se recomienda tener múltiples backups.
Llaves KES o “Key Evolving Signature”
Son las llaves utilizadas para firmar bloques. Se llaman evolutivas pues tienen una fecha de expiración y deben ser rotadas o generadas nuevamente antes de su vencimiento, para poder seguir firmando bloques.
Llaves VRF
Utilizadas para identificar si el nodo es líder para firma de bloque en el "slot" en curso. Este tipo de llave se introdujo en Ouroboros Praos, cuando se decidió que la programación de los líderes de slot debía hacerse de forma privada (en Ouroboros Classic esto se hacía de forma pública, lo que convertía a los líderes de slot en blancos de ataque como una forma accesible de vulnerar la estabilidad de la blockchain). Al hacerlo privado, nadie puede saber de antemano (a excepción de quien posea las llaves VRF) quién va a ser el líder en un momento determinado. Además, con el uso de estas llaves, quien sea el líder asignado lo puede probar fácilmente al firmar el bloque con las mismas.
Llaves de direcciones
Representan direcciones asociadas a una llave criptográfica que identifican los fondos o activos que esa dirección almacena dentro de la blockchain.
Las direcciones son un hash de la llave pública del tipo blake2b-256
Existen dos formas de categorizar las llaves en Cardano: en función de la era y en función de su uso.
En función de la era existen dos tipos:
Era Byron
Durante la era Byron, oficialmente finalizada en Julio de 2020, todas las direcciones se identificaban por el identificador al inicio de la cadena de caracteres:
Estilo Icarus: comenzando por "Ae2"
Estilo Daedalus: comenzando por "DdzFF"
Era Shelley
La Era Shelley trajo consigo las direcciones comenzando por addr1. En función del tipo de blockchain, las direcciones pueden comenzar de manera distinta: por ejemplo una dirección en la TestNet comienza por addr_test1.
Además, se introdujo el staking y con esto otra categorización en función del propósito:
- Direcciones de staking
- Direcciones de empresa
- Direcciones de recompensas
Direcciones de staking
Especifican las llaves de staking que ejercen control sobre el stake para esa dirección. Sin embargo, para ejercer los derechos de staking, éstas deben registrarse y delegar a un pool. Igualmente es utilizada para pagos y transacciones.
Direcciones de empresa
Estas llaves solamente permiten realizar operaciones de pagos. No de staking. En su origen fueron diseñadas para los exchanges que mantienen posiciones grandes de ADA y que no están interesados en ejercer una posición dominante en el consenso de la blockchain. Este tipo de llaves no son tan comunes.
Direcciones de recompensas
Son las que guardan el balance de las recompensas asociadas al staking. No son de tipo UTXO. Los balances se actualizan cuando las recompensas se reparten, aunque no de la forma tradicional a través de transacciones.
Ejemplo de generación de llaves y direcciones en Cardano
A modo de ejemplo, utilizando cardano-cli, se puede mostrar cómo se generan unas llaves y su dirección asociada para el envío de transacciones.
Cuando se ejecuta el comando se despliegan diferentes opciones para generar distintos tipos de llaves:
cardano-cli address key-gen |
Usage: cardano-cli address key-gen [--normal-key | --extended-key | --byron-key]
--verification-key-file FILE --signing-key-file FILE Create an address key pair. Available options: --normal-key Use a normal Shelley-era key (default). --extended-key Use an extended ed25519 Shelley-era key. --byron-key Use a Byron-era key. --verification-key-file FILE Output filepath of the verification key. --signing-key-file FILE Output filepath of the signing key. -h,--help Show this help text |
En este caso se va a generar una llave de verificación (vkey) y de firma (skey)
cardano-cli address key-gen --normal-key --verification-key-file AldeaWiky.vkey --signing-key-file AldeaWiky.skey |
AldeaWiky.skey:
{
"type": "PaymentSigningKeyShelley_ed25519", "description": "Payment Signing Key", "cborHex": "58209c696215d3fbe9c8890a3cc2d1577a9ded4077d4b9bcf20679c190ec0625224c" } |
AldeaWiky.vkey:
{
"type": "PaymentVerificationKeyShelley_ed25519", "description": "Payment Verification Key", "cborHex": "58206411ba13f5d841bedc7138ef88f1624d67bab25b2a68fdb27ed45e1f2db3b8c2" } |
La llave es generada utilizando el algoritmo ed25519 y codificada en formato cbor.
Como se ha dicho, la dirección de la llave es el hash de la llave pública.
Con el comando
cardano-cli address build --payment-verification-key-file AldeaWiky.vkey --mainnet |
Se construye la dirección de pago asociada a la llave de verificación previamente creada, lo que genera una dirección del tipo Shelley en la Mainnet:
addr1vxld5ef63l7qgvj655fkqlvszv6zfg4e7eunnwvw29efe6gw62s2k |
v1.0 - Escrito por MoxiePool, revisado por Matifalcone - 01-05-2022