シャドウソックスのドキュメント

AEAD

AEAD Authenticated Encryption with Associated Data の略です。 AEAD 暗号は、機密性、完全性、信頼性を同時に提供します。 これらは、最新のハードウェアで優れたパフォーマンスと電力効率を発揮します。 ユーザーは、可能な限り AEAD 暗号を使用する必要があります。

次の AEAD 暗号が推奨されます。 準拠する Shadowsocks の実装は、AEAD_CHACHA20_POLY1305 をサポートする必要があります。 ハードウェア AES アクセラレーションを備えたデバイスの実装では、AEAD_AES_128_GCM および AEAD_AES_256_GCM も実装する必要があります。

 

 

 

名前

エイリアス

キーサイズ

ソルトサイズ

ナンスサイズ

タグサイズ

AEAD_CHACHA20_POLY1305

Chacha20-ietf-poly1305

32

32

12

16

AEAD_AES_256_GCM

aes-256-gcm

32

32

12

16

AEAD_AES_128_GCM

aes-128-gcm

16

16

12

16

を参照してください IANA AEAD レジストリ 命名スキームと仕様。

キーの導出

マスターキーは、ユーザーから直接入力するか、パスワードから生成できます。

HKDF_SHA1 秘密鍵、秘密でないソルト、情報文字列を受け取り、入力された秘密鍵が弱い場合でも暗号的に強力なサブキーを生成する関数です。

HKDF_SHA1(キー、ソルト、情報) => サブキー

情報文字列は、生成されたサブキーを特定のアプリケーション コンテキストにバインドします。 この場合、引用符なしの文字列「ss-subkey」である必要があります。

HKDF_SHA1 を使用して、事前共有マスター キーからセッションごとのサブキーを派生させます。 Salt は、事前共有マスター キーの有効期間全体を通じて一意である必要があります。

認証された暗号化/復号化

AE_encrypt は、秘密鍵、非秘密ナンス、メッセージを受け取り、暗号文と認証タグを生成する関数です。 ノンスは、各呼び出しで特定のキーに対して一意である必要があります。

AE_encrypt(キー、ノンス、メッセージ) => (暗号文、タグ)

 

AE_decrypt は、秘密鍵、非秘密ナンス、暗号文、認証タグを受け取り、元のメッセージを生成する関数です。 入力のいずれかが改ざんされている場合、復号化は失敗します。

AE_decrypt(キー、ノンス、暗号文、タグ) => メッセージ

TCP

AEAD で暗号化された TCP ストリームは、セッションごとのサブキーを導出するためにランダムに生成されたソルトで始まり、その後に任意の数の暗号化されたチャンクが続きます。 各チャンクの構造は次のとおりです。

[暗号化されたペイロードの長さ][長さのタグ][暗号化されたペイロード][ペイロードのタグ]

 

ペイロードの長さは、2 バイトのビッグエンディアンの符号なし整数で、上限は 0x3FFF です。 上位 16 ビットは予約されており、ゼロに設定する必要があります。 したがって、ペイロードは 1024*1 – XNUMX バイトに制限されます。

最初の AEAD 暗号化/復号化操作では、0 から始まるカウントナンスが使用されます。各暗号化/復号化操作の後、ノンスは、符号なしリトルエンディアン整数であるかのように XNUMX ずつ増加します。 各 TCP チャンクには XNUMX つの AEAD 暗号化/復号化操作が含まれることに注意してください。XNUMX つはペイロード長用で、もう XNUMX つはペイロード用です。 したがって、各チャンクは nonce を XNUMX 回増やします。

TCP

AEAD で暗号化された TCP ストリームは、セッションごとのサブキーを導出するためにランダムに生成されたソルトで始まり、その後に任意の数の暗号化されたチャンクが続きます。 各チャンクの構造は次のとおりです。

[暗号化されたペイロードの長さ][長さのタグ][暗号化されたペイロード][ペイロードのタグ]

 

ペイロードの長さは、2 バイトのビッグエンディアンの符号なし整数で、上限は 0x3FFF です。 上位 16 ビットは予約されており、ゼロに設定する必要があります。 したがって、ペイロードは 1024*1 – XNUMX バイトに制限されます。

最初の AEAD 暗号化/復号化操作では、0 から始まるカウントナンスが使用されます。各暗号化/復号化操作の後、ノンスは、符号なしリトルエンディアン整数であるかのように XNUMX ずつ増加します。 各 TCP チャンクには XNUMX つの AEAD 暗号化/復号化操作が含まれることに注意してください。XNUMX つはペイロード長用で、もう XNUMX つはペイロード用です。 したがって、各チャンクは nonce を XNUMX 回増やします。

5 日間の無料トライアルを開始する