11.2 Identificatore Account
11.2.1 Intro
Ogni account utente ha un identificatore generato in funzione della PublicKey dell'utente utilizzando la seguente formula:
AccountId = Base58 ( MultihashHeader | SHA256 ( ProtobufHeader | ASN1Header | DecompressedRawPublicKey ) )
Proprietà:
- legato alla chiave pubblica del titolare dell'account.
- generato tramite un algoritmo hash crittograficamente sicuro con collisione proprietà di resistenza.
- breve ed è facilmente scambiabile tra utenti blockchain.
- a prova di futuro poiché lascia aperta l'opportunità di aggiornare l'algoritmo (agilità di protocollo).
- allineato al libp2p Metodo di generazione PeerId.
11.2.2 Procedura per la chiave ECDSA
Chiave pubblica decompressa grezza:
04 (decompressed form)
X: 5936d631b849bb5760bcf62e0d1261b6b6e227dc0a3892cbeec91be069aaa25996f276b271c2c53cba4be96d67edcadd
Y: 66b793456290609102d5401f413cd1b5f4130b9cfaa68d30d0d25c3704cb72734cd32064365ff7042f5a3eee09b06cc1
Anteponi l'intestazione ASN.1 (come definito dallo standard x509)
30 76 // strucure (bytes count = 118)
30 10 // structure (bytes len = 16)
06072a8648ce3d0201 // EC public key OID
06052b81040022 // secp384r1 curve OID
03 62 00 // bitstring (bytes count = 98)
04
5936d631b849bb5760bcf62e0d1261b6b6e227dc0a3892cbeec91be069aaa25996f276b271c2c53cba4be96d67edcadd
66b793456290609102d5401f413cd1b5f4130b9cfaa68d30d0d25c3704cb72734cd32064365ff7042f5a3eee09b06cc1
Anteponi intestazione Protobuf (come definito da libp2p)2p)
08 03 // Algorithm type identifier (ECDSA)
12 78 // Content Length
3076301006072a8648ce3d020106052b81040022036200
04
5936d631b849bb5760bcf62e0d1261b6b6e227dc0a3892cbeec91be069aaa25996f276b271c2c53cba4be96d67edcadd
66b793456290609102d5401f413cd1b5f4130b9cfaa68d30d0d25c3704cb72734cd32064365ff7042f5a3eee09b06cc1
Calcola lo SHA256 del buffer complessivo
sha = SHA256(buffer)
sha = 93d8a1e44a9d179238b598458f5293666890e8c0fcec0cce682522398d726dd5
Anteponi l'intestazione "multihash" allo sha risultante.
12 // hash algorithm identifier (0x12 = SHA256)
20 // hash length (0x20 = 32)
93d8a1e44a9d179238b598458f5293666890e8c0fcec0cce682522398d726dd5
Risultato finale in base58
AccountId = "QmYHnEQLdf5h7KYbjFPuHSRk2SPgdXrJWFh5W696HPfq7i"
11.2.3 Dettagli Multihash
Aggiunge all'hash puro una breve intestazione con l'identificatore e la lunghezza dell'algoritmo.
Reference https://github.com/multiformats/multihash