
USTPの安全な(AEAD対応)バージョンであるUSTP-Secure(ustps://)
USTP は UDP Speedy Transmission Protocol を意味します。
USTP は同じ認証済みトランスポートモデルを維持していますが、プロジェクト名は再び単純に USTP になりました。
デフォルトでは、USTP は DATA に AEAD を使用します。
また、DATA 用のオプションのネゴシエートされた cleartext + HMAC モードもサポートしており、ペイロードのバイトはワイヤ上で可視ですが、改ざんは検出され拒否されます。
USTP は現在、USTP Congestion と呼ばれるオプションの輻輳制御機能をサポートしています。依然として UDP ファーストですが、パスが輻輳の兆候を示し始めたときに、オプションで速度を落とし、その後再び速度を上げることができます。
ステータス: Beta
USTP はもはや単なる概念実証ではありません。現在は Beta フェーズにあります。
USTP はさまざまな種類のアプリケーションやトランスポートに使用できます。
ただし、このリポジトリは特に USTP 上のストリーミング に焦点を当てています。
02/08/2026: USTP-Secure は再び USTP に戻りました。
USTP-Secure は古いプロジェクト名であり、もはやプロジェクトに適した名前ではありません。USTP という名前が再び好まれるようになりました。UDP Speedy Transmission Protocol となり、タイトルに Secure は含まれません。2026-07-18: USTP/2 Beta が現在のツリーから削除されました。
Codex と GPT-5.4 (Low) を使用してビルドされました。--loss 33 でフリーズせずに検証済みです。Brazil -> Canada、RTT 約 140ms。chacha20 = CHACHA20_POLY1305aes-256-gcm = AES_256_GCMaes-128-gcm = AES_128_GCMchacha20DATA 保護モードは AEAD です。DATA 保護モードは cleartext + パケットごとの HMAC です。HELLO、ACK、RETRANSMIT_REQUEST、CLOSE)は意図的にプレーンテキストのままです。ACK と NACK/RETRANSMIT_REQUEST はプレーンテキストのままですが、セッションごとの HMAC タグで認証されます。DATA パケットは UPACK(ワイヤ上では UPAK)という名前のバイナリフレーム形式を使用します。IP:port でチャレンジのラウンドトリップを行い、クライアントを検証します。--cipher が設定されている場合、サーバーはその正確な暗号を使用します。--cipher が省略されているか auto に設定されている場合、サーバーはクライアントが要求した暗号を使用します。DATA 保護モードは暗号の選択とは別にネゴシエートされます:
--cleartext auto|on|off--cleartext on|offautooffauto の場合、サーバーはクライアントの要求に従います。on の場合、サーバーは cleartext + HMAC を強制します。off の場合、サーバーは AEAD を強制します。~/.ustps_host_key に永続的な X25519 ホストキーを保持するため、TOFU は再接続や再起動をまたいでも安定したままです。--regen-key を使用してください。ACK:、NACK:、HELLO:、CLOSE: は平文制御レコードのプレフィックスです。USS1 は UDP Speedy Secure バージョン1を意味します。USC1 は UDP Speedy Clear バージョン1を意味します。UPAK はバイナリ UPACK DATA フレームのマーカーです。ACK: 10、NACK: 42、HELLO: ...、CLOSE: のような人間が読める ASCII です。UPAK は復号後のバイナリ DATA パケットを識別します。USS1 は外側のセキュアな AEAD エンベロープ形式です。USC1 は外側の平文+HMAC DATA エンベロープ形式です。USS1... は AEAD で保護された DATAUSC1... は平文+HMAC の DATAUSTP Congestion を有効にして動作でき、ハンドシェイク中にネゴシエートされます。seq とアプリケーション向けの stream_pos の両方を運びます。seq は ACK、損失検出、再送、および RTT サンプリングに使用されます。stream_pos はペイロードが論理バイトストリームのどこに属するかをアプリケーションに伝えます。seq は各新規セッションで 1 から始まる32ビットカウンタです。stream_pos は各新規論理ストリームで 0 から始まる64ビットのバイトカウンタです。on または off)、および要求 DATA 保護モード(cleartext on|off)を運ぶ平文トランスポート HELLO から開始します。session_idDATA 保護モードDATA の送信を開始します。IP:port にバインドされます。session_id は依然としてセッションラベルとして使用されますが、異なる IP:port からは受け入れられません。HELLO を送信token、session_id、選択された暗号、ネゴシエートされた輻輳制御モード、ネゴシエートされた DATA 保護モード、およびサーバー公開鍵を運ぶ USTPS-CHALLENGE1 で応答USTPS-CHALLENGE-REPLY1 でエコーバックUSTPS-SESSION1 を送信IP:port にいる送信者が実際にそこでパケットを受信できることを証明するUSTP ですが、いくつかのワイヤ上の ASCII 識別子は依然として歴史的な USTPS-* プレフィックスを使用しています。USTPS-KEX1USTPS-CHALLENGE1USTPS-CHALLENGE-REPLY1USTPS-SESSION1USTPS-RESUME1USTPS-RTT1USTP に戻りましたが、それらの歴史的なワイヤ識別子はプロトコルバイト内で改名されていません。UPACK DATA ペイロード上限: 900 バイト。UPACK 固定ヘッダー: 20 バイト。USS1 セキュアエンベロープのオーバーヘッド:
4 バイトのマジック1 バイトの暗号ID12 バイトの AEAD ナンス16 バイトの AEAD タグ953 バイトです。USC1 クリアテキストエンベロープのオーバーヘッド:
4 バイトのマジック16 バイトの HMAC タグ940 バイトです。981 バイト、クリアテキストモードでは約 968 バイトになります。1001 バイト、クリアテキストモードでは約 988 バイトになります。seq がすでに受理された後は無視されます。DATA の暗号化では、暗号化パケットごとに新たなランダムな 12 バイトの AEAD ナンスを使用します。seq から導出されるものではありません。seq はトランスポートの信頼性のためのものです。stream_pos はアプリケーションの論理的な順序付けのためのものです。nonce は AEAD パケット保護のためだけに使用されます。DATA に AEAD 暗号化を使用しないため、AEAD ナンスは使用しません。USTP Congestion はオプションです。--congestion-control auto|on|off--congestion-control on|offautooffauto の場合、サーバーはクライアントの要求に従いますon の場合、クライアントが off を要求しても輻輳制御は強制的に有効になりますoff の場合、クライアントが on を要求しても輻輳制御は強制的に無効になりますRTT、再送タイムアウトイベント (RTO)、および明示的な再送要求 (NACK) を監視しますRTT が膨張したり、RTO が発生し始めたり、損失/再送の負荷が上昇したりすると、バックオフしますUSTP Congestion はレートの負荷を制御するものであり、信頼性のセマンティクスを制御するものではありません。IP:port が変わった場合、現在のセッションは終了するものと想定され、クライアントはクリーンに再接続すべきです。session_id を主張する偽装パケットとの区別が曖昧IP:port 上でのチャレンジによって到達可能性を証明し、セッションをそのエンドポイントにバインドし、エンドポイントが変わった場合は再接続します。