State Proof Keys - Algorand Specifications

Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Algorand Specifications

Algorand achieves forward security using a Merkle Signature Scheme. This scheme consists of using a different ephemeral key for each round in which it will be used. The scheme uses vector commitment to generate commitment to those keys.

The private key MUST be deleted after the round passes to achieve complete forward secrecy.

This is analogous to the scheme discussed in the voting keys section.

The Merkle scheme uses FALCON scheme as the underlying digital signature algorithm.

For further details on FALCON scheme, refer to the Cryptography primitives specification.

The tree’s depth is bound to 1616 to bound verification paths on the tree. Hence, the maximum number of keys which can be created is at most 216216.

Important

IMPLEMENTATION:

Merkle signature scheme reference implementation.

The scheme generates multiple keys for the entire participation period. Given FirstValidRound, LastValidRound and a KeyLifeTime, a key is generated for each round r that holds:

FirstValidRound≤r≤LastValidRound∧rmodKeyLifeTime=0

Currently, KeyLifeTime=256 rounds.

After generating the public keys, the scheme creates a vector commitment using the keys as leaves.

Leaf hashing is done in the following manner:

leafi=Hash(“KP”||SchemeID||r||Pki), for each corresponding round.

Where:

A signature in the scheme consists of the following elements:

When the committer gives a n-depth authentication path for index VectorIndex, the verifier must write VectorIndex as n-bit number and read it from MSB to LSB to determine the leaf-to-root path.

When signature is to be hashed, it must be serialized into a binary string according to the following format:

SignatureBitString=(SchemeID||Signature||VerifyingKey||VectorIndex||Proof)

Where:

Where:

A signature s for a message m at round r is valid under the public commitment pk and KeyLifeTime if: