Llaves en Cardano

De ALDEA WIKI
Ir a la navegación Ir a la búsqueda

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:

  1. Byron
  2. Shelley

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:

  1. Direcciones de staking
  2. Direcciones de empresa
  3. 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