スイは、暗号化の柔軟性を念頭に置いて基盤となるテクノロジーを設計しました。このシステムは、複数の暗号アルゴリズムと暗号プリミティブ (暗号プリミティブ) をサポートしており、それらを素早く切り替えることができます。開発者は、システムに最適な暗号化 (公開キー暗号化) を選択できるだけでなく、最新のアルゴリズム (利用可能なアルゴリズム) を実装することもできます。
Sui は、公開キー、署名、集約署名、ハッシュ関数などの暗号化プリミティブを、リポジトリ全体で共有される統一されたタイプ エイリアスまたは enum ラッパーの下で定義します。これらのプリミティブに変更を加えると、アプリケーションのすべてのコンポーネントに影響します。開発者はアプリケーションのパスワードを迅速に更新し、統一されたセキュリティを確保できます。
現在、Sui は実行トランザクション エンドポイントを通じて次のユーザー トランザクション署名スキームをサポートしています。
1.Pure Ed 25519
2.Secp 256 k 1 ECDSA
ユーザーアカウントキーペアのインターフェース実装
以下は、Sui でのキーペア表現のデモです。新しい署名スキームへの拡張は簡単です。
1. enum(enumクラス)に追加する
2. fastcrypto ライブラリで定義された KeyPair 特性を実装します。

ユーザー署名は、関連する署名スキームを識別する追加の 1 バイトのフラグを拡張することによってシリアル化されます。 Sui チームはマルチフォーマット (自己記述型データ用のプロトコル) の使用を検討しましたが、その可変フラグ長の性質によりシリアル化に問題が生じました。代わりに、Sui はシングルバイトのゼロスタート フラグ モデルを使用します。署名スキームとそれに対応するフラグは次のように定義されます。

ユーザーが署名されたトランザクションを送信すると、トランザクションの実行で次のパラメータが指定されます。
BSC (Binary Canonical Serialization) は、トランザクション バイトを Base 64 にシリアル化します。
署名方式フラグ (署名方式識別)。「ed 25519」または「secp 256 k 1」として渡すことができます。
公開鍵のBase 64形式
そのスキームに対応する署名の Base 64
次のコードは、署名されたトランザクションを実行し、成功した場合、curl は証明書とトランザクションの結果を返します。

次のコードは、Sui の完全なノードが API リクエスト フィールドをシリアル化された署名フラグ || 署名 || 公開キーに組み立て、実行前に検証チェックを実行する方法を示しています。

Sui が異なる署名スキームをサポートする理由の分析
secp 256 k 1 楕円曲線を使用する ECDSA は、ビットコイン、イーサリアム、およびその他の暗号通貨で広く採用されています。ユーザーは、しきい値署名 (国内暗号では「しきい値暗号システムのしきい値署名」と訳される) やマルチ署名など、既存のウォレットおよびエスクロー鍵管理ツールを利用したいため、この署名スキームを好む場合があります。さらに、クラウド インフラストラクチャおよびハードウェア セキュリティ モジュール (英国の暗号機ハードウェア ウォレットなどの一般的なもの) との互換性が向上し、メッセージおよび署名ペイロードからの公開キーの回復をサポートします。
一方、Ed 25519 は、決定論的な高速署名と簡素化された数学を特徴とする、より現代的な署名スキームです。ただし、Typescript SDK は両方の署名スキームをサポートしています。しかし、Sui は依然として、Sui ウォレットの推奨アルゴリズムとして Ed 25519 を選択しています。
Sui はさまざまな署名スキームをサポートしているため、現在ネイティブモバイルおよび将来の暗号化の鍵となる secp 256 r 1 曲線 (NIST-P 256 としても知られる) を使用して、後から ECDSA などのスキームを追加するのにほとんど手間がかかりません。これはサポートする必要がある曲線であり、コミュニティから一般的に要求される機能でもあります。
この柔軟な署名スキームのサポートにより、Sui システムを安全でないヌル署名スキームに対してベンチマークすることもできます。 Sui のような高速実行システムの場合、署名と検証の並列設計はブロック レベルだけでなくトランザクション レベルでも行われ、暗号化の柔軟性により、Sui は暗号化操作がシステムにもたらすオーバーヘッドをチェックできます。これらのベンチマーク結果は、Sui にボトルネックの特定と最適化の方向性を提供することができました。
認証キーペア
Sai の権限 (バリデータ セット) は 3 つの異なるキー ペアを保持します。
プロトコルキーペア プロトコルキーペア
アカウントキーペア アカウントキーペア
ネットワークキーペア ネットワークキーペア
プロトコルキーペア プロトコルキーペア
ユーザーが署名したトランザクションが検証された場合、プロトコル キー ペアは承認された署名を提供します。ユーザーのトランザクションに署名を提供する当局の割合が必要なしきい値の 3 分の 2 を超えた場合、Sui はトランザクションを実行します。現在、BLS 12381 スキームは、指定された数の当局の集約署名を迅速に検証するために選択されています。特に、minSig BLS モードを使用することが決定されました。これによれば、個々の公開キーは 96 バイト、署名は 48 バイトになります。後者は、通常、バリデーターが各エポックの開始時にキーを 1 回登録し、その後継続的にトランザクションに署名するため重要です。したがって、Sui は最小署名サイズを最適化します。
知らせ! BLS スキームを使用すると、独立した署名を集約して、単一の BLS 署名付きペイロードを生成できます。また、Sui は署名をビットマップ (ビットマップ) とともに集約して、署名の検証者を表します。これにより、認証局の署名サイズが (2f + 1) × BLS_sig サイズから 1 つの BLS_sig ペイロードのみに効果的に削減され、その結果、バリデータ セットのサイズに関係なくトランザクション証明書を圧縮できるというネットワーク オーバーヘッドの利点が得られます。
キーマテリアルタイプのエイリアスは、リポジトリ全体で使用される 1 つの場所に集中されます。実際、エイリアスを変更するだけで (パラメーターをシリアライズして渡すときに集約署名コード内のエイリアス パラメーターを変更する)、プロトコル キーの Sui が Ed 25519 から BLS 12381 に切り替わりました。

BLS 12381 集約署名に対する潜在的な悪意のあるキー攻撃に対処するために、認証機関の登録中に Proof of Key Knowledge (KOSK) が使用されます。所有権の証明は、当局がバリデータ セットへの追加を要求したときに送信され、検証されます。プロトコル キー kosk || プロトコル公開キー || sui アドレスを確認します。ほとんどの標準とは異なり、Sui の知識証明スキームはアドレスにもコミットされており、別の悪意のあるバリデータからのバリデータの BLS キーの悪意のある再利用に対する追加の保護が提供されます。
集約された署名は、次の 2 つの状況で役立ちます。
クォーラム ドライバーが複数の機関から返された SignedTransactions から CertifiedTransaction を形成する場合
当局が SignedCheckpointsummary を形成するとき、各当局はチェックポイントの内容に署名します。
アカウントキーペア アカウントキーペア
規制当局がステーキング報酬の支払いを受け取るために使用するアカウントは、署名スキームとして Ed 25519 を使用するアカウント キー ペアによって保護されています。
ネットワークキーペア ネットワークキーペア
秘密キーは、QUIC が Narwhal プライマリとそのワーカー ネットワーク インターフェイスに必要とする TLS ハンドシェイクを実行するために使用されます。公開キーはノード ID を検証するために使用され、Ed 25519 が署名スキームとして使用されます。
ハッシュとエンコーディングの柔軟性
現在、Sui のデフォルトのハッシュ関数は sha 3256 であり、sha 256 および blake 2/blake 3 ファミリと比較するためにベンチマークが実行されています。エンコードの柔軟性をサポートするために、Base 64 と Hex は、base 64 ct::Base 64 と hex、およびそのカスタム シリアル化と検証のラッパーとして fastcrypto のエンコード機能を定義します。特に、最も人気のある Base 64 Rust クレートの代わりに Base 64 ct クレートが選択されたのは、a) 定数時間であり、b) デコード時に展性攻撃を防ぐために破損したエンコーディングを明示的に拒否するためです。スイ氏の研究チームのメンバーは最近、ほとんどの Base 64 デコーダー ライブラリで驚くべきスケーラビリティの問題を報告し、暗号化とセキュリティの分野における主要なカンファレンスの 1 つである AsiaCCS 2022 で最優秀ポスター賞を受賞しました。
次のコード スニペットは、ラッパー構造が fastcrypto でどのように実装されるかを示しています。

暗号化のトレンドに合わせた暗号化の柔軟性
キーペア、署名、ハッシュ関数の点で暗号化の柔軟性が高いため、Sui はライブラリの選択、基礎となる署名スキーム、エンコーディング、ハッシュ関数の選択に便利です。これにより、ライブラリに脆弱性が発見された場合やスキームにバグがある場合に、Sui を迅速に更新できるだけでなく、パラメータとして選択した暗号化プリミティブに基づいてシステム全体のベンチマークを実行することもできます。


