コンテンツにスキップ

暗号の基本⚓︎

ここでは、Symbol の技術を支える基本的な暗号の概念を解説します。

ハッシュ⚓︎

ハッシュ
暗号ハッシュとは、任意のサイズの入力データを固定長の文字列に変換する数学関数 (ハッシュ関数)によって生成される文字列のことです。

代表的な関数として SHA-512 や RIPEMD-160 などがありますが、 いずれも次の共通する特性を持っています。

  • 決定性:同じ入力からは必ず同じハッシュが生成されます。
  • 衝突耐性:異なる入力から同じハッシュを作ることは極めて困難です。
  • 不可逆性:ハッシュから元の入力データを復元することはできません。

これらの性質により、データの完全性や認証の検証、 およびブロックチェーンにおける ブロック の連結が保証されます。

キー⚓︎

秘密鍵
非常に長い数値であり、厳重に秘匿すべき情報です。 値そのものに意味はなく、第三者に推測されることは想定されていません。 通常はランダムに生成され、同じキーが偶然に生成されることはほぼありません。
公開鍵

秘密鍵 に対応する公開識別子として機能する長い数値です。 広く共有できますが、秘密鍵を明かすことなく その保有を証明するために利用されます。

公開鍵は数学的に秘密鍵から導かれますが、 現在の技術では逆算して秘密鍵を求めることは実質的に不可能です。

キーペア
1 組の 秘密鍵 と対応する 公開鍵 のセットです。 秘密鍵は所有者のみが保持し、公開鍵は誰でも閲覧できます。 これにより、デジタル署名や暗号化などの安全な処理が可能になります。

Symbol では、用途に応じて複数のキーペアが使われます。

メインキー
各 アカウント に紐づく キーペア。所有者を識別します。
リモートキー
各 リモートハーベスティング アカウントに紐づく キーペア。
VRFキー
ハーベスティング ノードが出力を予測不可能にするために使用する キーペア。
投票キー
ファイナライズ プロセスに参加するノードが必要とする キーペア。
トランスポートキー
TLS による安全な通信に用いられる キーペア。

キーの安全性

秘密鍵 は常に厳重に保護する必要があります。

ただし、キーが漏えいした際の影響は用途によって異なります。

キーの種類 重大度 影響
メインキー 🔴 高 アカウント内の資産が流出する可能性があります。
リモートキー 🟠 中 アカウントやノードには影響しません。別のリモートアカウントをリンクすれば簡単に復旧可能です。多数のリモートキーを奪われると、攻撃者がブロック生成に影響を与える可能性があります。
VRFキー 🟡 低 ハーベスティング用のキーがなければ無害です。
投票キー 🟠 中 アカウントやノードには影響しません。別の投票アカウントをリンクすれば簡単に復旧可能です。ネットワーク全体の投票キーの 50% 以上を奪われると、ファイナライズに影響を与える恐れがあります。
トランスポートキー 🟡 低 攻撃者がハーベスティングの委任を奪う可能性はありますが、その他の影響はありません。

Symbol では、秘密鍵と公開鍵はいずれも 256 ビット(32 バイト)の整数です。 公開鍵は 楕円曲線暗号 を用いて ツイステッド・エドワーズ曲線 から導出されます。

署名⚓︎

署名
特定の アカウント によって文書が承認されたことを証明する デジタルの付加情報です。

署名はアカウントの 秘密鍵 を使って文書を処理することで生成されます。 対応する公開鍵を持つ誰でも、その署名が文書に一致するかを検証できますが、 同一の署名を作成できるのは秘密鍵の所有者のみです。

Symbol ではすべてのトランザクションが署名されますが、 必要な署名の数はトランザクションの種類と参加者によって異なります。 たとえば、単一オーナーのアカウントから別のアカウントへ資産を送る場合は、 送信元アカウントの秘密鍵による署名 1 つだけで十分です。

一方で、マルチシグアカウント から送金する場合は あらかじめ設定された全ての署名者の承認が必要であり、 複数の署名を収集して初めて有効となります。

Symbol の署名は 512 ビット(64 バイト)で、 Ed25519 および SHA-512 アルゴリズムを使用して生成されます。

アドレス⚓︎

アドレス
公開鍵 を短縮して扱いやすくした表現で、 通常は アカウント の同義語として使われます。

キー(秘密鍵・公開鍵)はバイナリデータであり、印刷や共有には不便です。 一方、アドレスは英数字のみで構成されるため、共有が容易です。

Symbol のキーは 32 バイト(16 進数で 64 文字)を必要としますが、 アドレスは 39 文字で表され、長さと実用性のバランスを保っています。

Symbol では、アドレスは公開鍵から次の手順で生成されます。

  1. 生アドレス(24 バイト) を生成します。構成は次のとおりです。

    • ネットワーク ID(1 バイト):メインネットは N、テストネットは T。
    • 公開鍵の RIPEMD-160 ハッシュ(20 バイト)。
    • チェックサム(3 バイト):タイプミス検出用。

    例: 0x78,0xD0,0x44,0xED,0xC3,0xDC,0x8B,0x86...

  2. エンコード済みアドレス(39 文字) を生成します。 生アドレスを Base32 でエンコードします。 英大文字と数字のみを使用するため、共有に適しています。 例: PDIEJ3OD3SFYNZCQUSEWKY4NRRZUI5LMJPSVLPQ

  3. 整形アドレス(45 文字)(任意)を生成します。 6 文字ごとにハイフンを追加して読みやすくします。 例: PDIEJ3-OD3SFY-NZCQUS-EWKY4N-RRZUI5-LMJPSV-LPQ

アドレスは使用されて初めて追跡されます

Symbol がアドレスとそれに関連付けられた公開鍵を追跡し始めるのは、それらがトランザクションに初めて登場した時点です。

バニティアドレス⚓︎

通常、キーおよびそれに対応する アドレス はランダムに生成されますが、 特定のパターンやプレフィックスを含む バニティアドレス を作ることもできます。

これは、条件を満たすアドレスが得られるまで キーペア を繰り返し生成する手法です。 求める文字列が複雑になるほど、より多くの時間と計算が必要になります。

バニティアドレスはブランド名や個人の識別などに便利ですが、 セキュリティ上の利点はありません。