Authenticated Encryption for TFTP (HMTFTP) : draft-moriarty-tftp-aead

Tech

本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

Authenticated Encryption for TFTP (HMTFTP) : draft-moriarty-tftp-aead

【背景と設計目標】

軽量なTFTPにAEAD(認証付き暗号)を導入し、DTLSの実装が困難な極小リソースのIoTデバイスへ、安全なファームウェア更新手段を提供する。

既存のRFC 1350(TFTP)との上位互換性を維持しつつ、RFC 2347(Option Extension)を利用して暗号化パラメーターをネゴシエーションする、既存プロトコルの段階的強化案です。

【通信シーケンスと動作】

HMTFTPは、通常のTFTPハンドシェイク時に特定のオプション(”aead”)を付与することで開始されます。

sequenceDiagram
    participant "Client as HMTFTP Client"
    participant "Server as HMTFTP Server"
    Note over Client, Server: 事前共有鍵(PSK)または鍵交換完了済み
    Client ->> Server: WRQ/RRQ [filename, mode, aead=aes-128-gcm]
    Server -->> Client: OACK [aead=aes-128-gcm, nonce=random_val]
    Client ->> Server: DATA (Block #1, Encrypted Payload, Tag)
    Server -->> Client: ACK (Block #1, Tag)
    Note over Client, Server: 以降、ブロックごとにAEADで保護された転送
  1. Option Negotiation: クライアントがRRQ/WRQにて暗号アルゴリズムを提案。

  2. Initial Nonce: サーバーがOACKで暗号化に使用する初期ナンス(Nonce)を提示。

  3. Authenticated Transfer: 各データブロックに認証タグを付加し、改ざん検知と暗号化を同時に実現。

【データ構造 / パケットフォーマット】

HMTFTPのDATAパケット構造は、標準のTFTPヘッダーを拡張し、AEADタグをペイロードの末尾に配置します。

 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:DATA) [16 bits]    |     Block # [16 bits]         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|             Encrypted Data Payload (Variable Length)          |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                Authentication Tag (e.g., 128 bits)            |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Opcode: 標準TFTP(3=DATA, 4=ACK)を流用。

  • Encrypted Data: 選択されたAEADアルゴリズム(AES-GCM等)で暗号化。

  • Authentication Tag: MAC(メッセージ認証符号)。パケット全体の完全性を保証。

【技術的な特徴と比較】

HMTFTPは、フルスタックのセキュリティ(HTTPS/CoAP+DTLS)と、全くセキュリティのないTFTPの中間に位置します。

機能 / プロトコル TFTP (RFC1350) HMTFTP (Draft) CoAP + DTLS
暗号化方式 なし AEAD (AES-GCM等) TLS 1.2/1.3準拠
オーバーヘッド 極小 低 (Tag分のみ) 高 (Handshake/Record)
HOL Blocking あり (Stop-and-Wait) あり 部分的に解消可
0-RTT N/A 実質可能 (PSK利用時) 対応 (TLS 1.3)
実装サイズ 最小 (数KB) 小 (AEADライブラリ依存) 中〜大

【セキュリティ考慮事項】

  1. リプレイ攻撃への耐性: TFTPのBlock NumberをAEADの追加認証データ(AAD)に含めることで、パケットの入れ替えや再送攻撃を検知します。

  2. 前方秘匿性(PFS)の欠如: 本ドラフトは主にPSK(事前共有鍵)を想定しており、PFSが必要な場合は上位層での鍵交換(Ephemeral Diffie-Hellman等)を別途組み合わせる必要があります。

  3. 初期ベクトルの再利用禁止: 同一の鍵でNonce(ナンス)が重複すると暗号強度が著しく低下するため、カウンタ管理の実装には厳格さが求められます。

【まとめと実装への影響】

ネットワークエンジニアおよび開発者が留意すべき点は以下の3点です。

  • 省リソース環境の救世主: DTLSの複雑なステートマシンを実装できない8ビット/16ビットマイコンにおいて、実用的なセキュリティを最小限のコードサイズで提供できる。

  • 既存ツールとの非互換性: 標準のTFTPサーバー/クライアントではオプションを無視してエラーになるか、暗号化パケットを平文として誤認するため、エンドツーエンドでのHMTFTP対応が必須。

  • 鍵管理の外部依存: HMTFTP自体には鍵交換機能が含まれていない。製造時に鍵を埋め込むか、LwM2M等の別スキームで鍵を配布する運用設計が不可欠となる。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました