[META] ID: HMTFTP_TECHNICAL_ANALYSIS TYPE: PROTOCOL_SPEC_DRAFT AUTHOR: SENIOR_NETWORK_ENGINEER STATUS: DRAFT_REVIEW [/META]
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
draft-hahn-hmtftp: Authenticated Encryption for Trivial File Transfer Protocol
【背景と設計目標】
脆弱なTFTPにAEADを導入し、IoT機器のセキュアなファームウェア更新と軽量な認証・暗号化を両立する。
RFC 1350 (TFTP) は認証や暗号化の仕組みを持たず、中間者攻撃や改ざんに対して無防備でした。HMTFTP(Hardened MTFTP)は、既存のTFTPのシンプルさを維持しつつ、モダンなAEAD(Authenticated Encryption with Associated Data)を統合することで、計算リソースの乏しいIoTデバイスに安全なデータ転送を提供します。
【通信シーケンスと動作】
HMTFTPは、RFC 2347 (TFTP Options Extension) を利用してセキュリティパラメータをネゴシエーションします。
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"=algo, "nonce"=val)
Server -->> Client: OACK (aead, nonce, tag_len)
Note over Client, Server: 2. Authenticated Data Transfer
loop Data Blocks
Client ->> Server: ACK (Block n)
Server ->> Client: DATA (Block n+1) [Encrypted Payload + Auth Tag]
end
Note over Client, Server: 3. Termination
Server ->> Client: Last DATA (Block N) [Encrypted + Tag]
Client -->> Server: ACK (Block N)
ネゴシエーション:
RRQまたはWRQパケットのオプションフィールドに、使用するAEADアルゴリズム(例:ChaCha20-Poly1305)と初期Nonceを含めます。鍵合意: 共有鍵の導出は事前共有鍵 (PSK) またはアウトバンドで確立されていることを前提とし、パケット毎のNonce管理でリプレイ攻撃を防ぎます。
暗号化転送: 各DATAパケットのペイロードをAEADで保護し、末尾に認証タグを付与します。
【データ構造 / パケットフォーマット】
HMTFTPのDATAパケットは、従来のTFTPヘッダの後にNonce(可変長/省略可)と暗号化ペイロード、認証タグが続きます。
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 (3) | Block # (2 octets) | Nonce... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Nonce (cont) | Encrypted Payload (Variable) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Authenticated Tag (Typically 16 octets) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Opcode: 0x0003 (DATA) を維持。
Block #: シーケンシャルなブロック番号。Nonceの生成元としても利用可能。
Encrypted Payload: 元のTFTPデータ(通常512バイト)を暗号化したもの。
Authenticated Tag: メッセージの完全性を保証するMAC値。
【技術的な特徴と比較】
既存のファイル転送プロトコルとの比較を以下に示します。
| 特徴 | TFTP (RFC 1350) | HMTFTP (Draft) | SFTP (SSH) | HTTP/3 (QUIC) |
|---|---|---|---|---|
| トランスポート | UDP (Port 69) | UDP | TCP (SSH) | UDP (QUIC) |
| セキュリティ | なし | AEAD (ChaCha20等) | TLS相当 (SSH) | TLS 1.3 |
| オーバーヘッド | 極小 | 低 (AEAD Tag分) | 高 | 高 |
| 0-RTT | 可能 | 可能 | 不可 (SSH振替) | 可能 |
| HOL Blocking | あり | あり (Stop-and-Wait) | なし | なし |
| 主な用途 | ネットワーク起動 | IoT/組み込み更新 | 汎用ファイル転送 | Web/API転送 |
【セキュリティ考慮事項】
リプレイ攻撃への耐性: HMTFTPは、TFTPのブロック番号をAEADのNonceの一部として組み込むことで、同一パケットの再送や順序入れ替えを検知します。
ダウングレード攻撃: ネゴシエーション時に暗号化なしのTFTPへ強制される攻撃を防ぐため、クライアント側で「Secure Mode Only」の設定を強制する必要があります。
前方秘匿性 (PFS): 本ドラフト単体ではPFSを提供しません。PFSが必要な場合は、事前にEphemeral Diffie-Hellman等でセッション鍵を生成する上位レイヤーのプロトコルとの併用が推奨されます。
【まとめと実装への影響】
ネットワークエンジニアや開発者が留意すべき点は以下の3点です。
MTUの断片化(Fragmentation)に注意: AEADタグ(通常16バイト)が付与されるため、標準的な512バイトのペイロードではイーサネットMTUを超えないものの、暗号化オーバーヘッド分を考慮した
blksizeオプションの調整が必須です。ハードウェアアクセラレーションの活用: IoTデバイスに実装する場合、AES-GCMやChaCha20-Poly1305のハードウェア命令を持つSoC(例:ESP32, nRF52シリーズ)を選定することで、スループットの低下を最小限に抑えられます。
鍵管理の運用設計: HMTFTPは鍵交換自体を定義していないため、製造時にデバイスへPSKを書き込むか、別の安全なチャネルで鍵を配布するスキームを別途構築する必要があります。

