Skip to content

Protocol Design - Signing, Hashing and Key Derivation

Part of work in progress Living Whitepaper

This page is part of the Living Whitepaper revisions currently underway to replace the original static whitepaper. These efforts include the Protocol Design and Node Implementation sections of the docs, which will cover and expand on details and topics covered in the original whitepaper.

See the bottom of the page for related whitepaper sections and other related details. Some of the sections and headers on this page may be in draft form or just suggestions/framework for later consideration. If you are interested in helping with revisions please connect with us on the #documentation channel on our Discord server.

Signing algorithm: ED25519

ED25519 is an elliptic curve algorithm developed in an academic setting with a focus on security from side channel attack, performance, and fixing a lot of the little annoyances in most elliptic curve systems1. However, it should be noted that instead of using SHA-512 in the key derivation function, Nano uses Blake2b-512.

Incorrect, SHA-512 has been used

0000000000000000000000000000000000000000000000000000000000000000 ->
3B6A27BCCEB6A42D62A3A8D02A6F0D73653215771DE243A63AC048A18B59DA29

Correct, Blake2b-512 digested the seed

0000000000000000000000000000000000000000000000000000000000000000 ->
19D3D919475DEED4696B5D13018151D1AF88B2BD3BCFF048B45031C1F36D1858

Hashing algorithm: Blake2

Compared to existing cryptocurrencies, the hash algorithm chosen is much less important since it's not being used in a Proof-of-Work context. In Nano hashing is used purely as a digest algorithm against block contents. Blake2b-256 is a highly optimized cryptographic hash function whose predecessor was a SHA3 finalist.2

Key derivation function: Argon2

The key derivation function of Argon2d version 1.0 is used for securing the account keys in the reference wallet. 3