[AUTHOR: Gemini_Pro_Engineer][PROTOCOL: HMTFTP][RFC_DRAFT: draft-hsu-tftp-aead][SECURITY: AEAD_PSK_INTEGRITY]
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
draft-hsu-tftp-aead: Authenticated and Encrypted Trivial File Transfer Protocol (HMTFTP)
【背景と設計目標】
リソース制限のあるIoTデバイスにおいて、TFTPの軽量性を維持しつつ、AEAD暗号化による通信内容の機密性と完全性の保護を最小限のオーバーヘッドで実現する。RFC 1350およびRFC 2347(Option Extension)をベースとした上位互換のセキュリティ拡張である。
【通信シーケンスと動作】
HMTFTPは、まず通常のTFTPオプション交渉(RFC 2347)を用いてAEADパラメータを合意し、その後のデータ転送に専用のOpcodeを使用します。
sequenceDiagram
participant "Client as HMTFTP Client"
participant "Server as HMTFTP Server"
Note over Client, Server: 1. Option Negotiation (RFC 2347)
Client ->> Server: RRQ/WRQ [filename, mode, "aead" option, "ciphersuite"]
Server -->> Client: OACK ["aead" accepted, nonce-seed]
Note over Client, Server: 2. Authenticated/Encrypted Transfer
Server ->> Client: DATA_AEAD (Opcode 7) [Block#, IV/Nonce, Encrypted Data, Auth Tag]
Client -->> Server: ACK_AEAD (Opcode 8) [Block#, Auth Tag (Optional)]
Note over Client, Server: 3. Termination
Server ->> Client: DATA_AEAD (Last Block)
Client -->> Server: ACK_AEAD
交渉フェーズ: クライアントが
aeadオプションを提示し、使用する暗号スイート(例: AES-128-GCM)を提案。鍵共有: 事前共有鍵(PSK)の使用を前提とし、セッションごとにNonce(初期化ベクトル)を動的に生成して再利用を防止。
データ転送: 新設されたOpcode「7 (DATA_AEAD)」を使用し、ペイロードを暗号化。受信側は認証タグ(Tag)で改ざんを検知。
【データ構造 / パケットフォーマット】
HMTFTPのDATA_AEADパケットは、従来のDATAパケットにNonceとAuth Tagフィールドを追加した構造となります。
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Opcode (7) | Block # | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Nonce / IV (Variable Length) | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Encrypted Data (Payload) | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | Authentication Tag (Variable) | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Opcode (16bit):
7= DATA_AEAD,8= ACK_AEAD。Nonce / IV: AEADアルゴリズムに応じて可変(AES-GCMの場合は通常12バイト)。
Authentication Tag: パケット全体の整合性を保証するタグ(AES-GCMの場合は16バイト)。
【技術的な特徴と比較】
| 特徴 | TFTP (RFC 1350) | TFTP over TLS (RFC 9032) | HMTFTP (Hsu Draft) |
|---|---|---|---|
| セキュリティ | なし(平文) | TLS 1.3 による強固な保護 | AEAD (AES-GCM/ChaCha20) |
| オーバーヘッド | 最小 (Header 4B) | 非常に高い (Handshake/Record) | 中 (Header + Nonce + Tag) |
| MTU考慮 | 不要 | 複雑(TLS断片化) | 必要(Tag分ペイロード減少) |
| 実装難易度 | 極めて低い | 高い(TLSスタックが必要) | 中(暗号ライブラリのみ) |
| 主な用途 | 閉じたLAN内のブート | 公衆網経由の安全な更新 | IoT/組み込みのセキュア更新 |
HOL Blocking: UDPベースのため、TCPベースのTLSで見られるようなトランスポート層でのHOL Blockingは発生しないが、TFTP自体の1パケット停止待機方式に依存する。
Footprint: TLSスタックを実装できないROM/RAM容量の小さいMCU向けに最適化されている。
【セキュリティ考慮事項】
リプレイ攻撃への耐性: Block番号およびセッションごとのNonceにより、古いパケットの再注入を防止する。
PSKの管理: HMTFTP自体には鍵交換機能(Diffie-Hellman等)が含まれないため、アウトオブバンドでのPSK配布または製造時の書き込みが前提となる。
ダウングレード攻撃: クライアントが
aeadオプションを必須としない設定の場合、攻撃者がオプションを削除して平文通信を強制するリスクがある。実装レベルで「AEAD必須モード」の強制が必要。前方秘匿性 (PFS): 本ドラフト単体ではPFSを提供しない。PFSが必要な場合は、上位層または初期化フェーズで一時鍵を生成する仕組みを併用する必要がある。
【まとめと実装への影響】
ネットワークエンジニアおよび開発者が留意すべき点は以下の3点です。
パケット断片化の回避: AEADタグ(16バイト程度)とNonce(12バイト程度)が追加されるため、標準の512バイト・ブロックを使用すると、イーサネットのMTUを超過する可能性がある。
blksizeオプションでの適切な調整が必須。ステートレス性の喪失: 従来のTFTPは非常にシンプルだが、HMTFTPではNonceのインクリメントや暗号コンテキストの維持が必要となり、サーバー側のリソース管理がやや複雑化する。
既存インフラとの互換性: 未対応のサーバー/クライアントは新設Opcode(7, 8)を無視またはエラー(Illegal Operation)とするため、フォールバック設計を明確にする必要がある。

