暗号理論

Symbol はデータの整合性を検証し、署名者の身元を認証するために 楕円曲線暗号 を使用します。

キーペア

楕円曲線暗号は公開鍵暗号のアプローチです。暗号化システムは キーペア を使用します:

  • 秘密鍵: エンティティ に署名するために使用する、所有者が知っているランダムな 256-bit 整数
  • 公開鍵: 広く普及させることのできるキーペアの公開識別子です。対となる秘密鍵でエンティティが署名されていることを証明します。

公開鍵は暗号理論によって秘密鍵から導出されます。具体的には Symbol は Twisted Edwards curveEd25519 デジタル署名アルゴリズムと SHA-512 ハッシュアルゴリズムを共に使用します。

catapult-servercrypto モジュール下に implementation があります。

署名

秘密鍵を使用して、アルゴリズムは64バイトの署名を生成するメッセージに署名できます。署名は、公開鍵を持つ特定のキーペアがエンティティに署名したことの検証に使用します。

実装は sign entitiescatapult-servercrypto モジュールの下で verify them にあります。

アドレス

公開鍵はアドレスの短い形式で共有できます。 Symbol アドレスは次のものからなる Base32 エンコードされたトリプレット です:

  • ネットワークバイト
  • アカウントの公開鍵の 160-bit ハッシュ
  • アドレスのミスタイプを素早く確認するための 3 byte チェックサム

次の手順を実行します convert a public key to an address:

Address PublicKeyToAddress(const Key& publicKey, NetworkIdentifier networkIdentifier) {
        // step 1: sha3 hash of the public key
        Hash256 publicKeyHash;
        crypto::Sha3_256(publicKey, publicKeyHash);

        // step 2: ripemd160 hash of (1)
        Address decoded;
        crypto::Ripemd160(publicKeyHash, reinterpret_cast<Hash160&>(decoded[1]));

        // step 3: add network identifier byte in front of (2)
        decoded[0] = utils::to_underlying_type(networkIdentifier);

        // step 4: concatenate (3) and the checksum of (3)
        Hash256 step3Hash;
        crypto::Sha3_256(RawBuffer{ decoded.data(), Hash160::Size + 1 }, step3Hash);
        std::copy(step3Hash.cbegin(), step3Hash.cbegin() + Checksum_Size, decoded.begin() + Hash160::Size + 1);

        return decoded;
}

上記の説明通り、ブロックチェーンと疎通せずともアドレスを作ることができます。実際、ブロックチェーンはあるトランザクションにおいて、初めて現れたアドレスと公開鍵だけを追跡しています。

次項: ブロック