I-O DATA HDL-TA/HDL-TA2 の暗号化アーキテクチャ解析

はじめに

I-O DATA の LAN DISK シリーズ(HDL-TA / HDL-TA2)は、ユーザーが意識することなくディスク全体を暗号化する機能を備えた NAS 製品です。本記事では、この暗号化がどのような仕組みで実装されているかを技術的に解説します。

なお、本記事は暗号化の仕組みの解説を目的としており、復号手順や復旧方法については扱いません。


ハードウェア構成

HDL-TA2 の基板には、以下の主要コンポーネントが搭載されています。

コンポーネント 型番例 役割
SoC Realtek RTD1295 (ARM Cortex-A53) メインプロセッサ
DRAM DDR4 システムメモリ
SPI Flash ROM GigaDevice GD25LQ16C (2MB) ファームウェア・暗号鍵の格納
HDD/SSD SATA接続 ユーザーデータの格納

暗号化において重要な役割を果たすのが、基板上に実装された SPI Flash ROM です。この小さなチップに、暗号鍵を含むファームウェアが格納されています。


SPI Flash ROM の内部構造

2MB の SPI Flash ROM をダンプすると、以下のような構造になっています。

Offset      内容
0x000000    ブートローダー / ARM ベクタテーブル
  ...       ファームウェアコード(ARM命令列)
0x100000    JFFS2 ファイルシステム(〜末尾まで)

JFFS2 ファイルシステム

ROM の後半(オフセット 0x100000〜)には、JFFS2(Journalling Flash File System version 2) が格納されています。JFFS2 は、フラッシュメモリ向けに設計されたログ構造型ファイルシステムで、ウェアレベリングやパワーロス耐性を備えています。

この JFFS2 には以下のファイルが含まれています。

ファイル名 inode サイズ 用途
minimal_jffs2 2 JFFS2 初期化用マーカー
lksystem 3 32 bytes システム暗号鍵
lkdata 4 32 bytes データパーティション暗号鍵

JFFS2 のデータ構造

JFFS2 は、フラッシュメモリの性質上、ファイルの内容を上書きせず、新しいデータノードを追記していきます。ファイルが更新されるたびに新しいノードが書き込まれ、最新バージョンのノードが有効なデータとなります。

JFFS2 ノード構造(inode data node):

+0x00  magic     (2 bytes) = 0x1985
+0x02  node_type (2 bytes) = 0xE002 (inode)
+0x04  totlen    (4 bytes) = ノード全体の長さ
  ...
+0x0C  ino       (4 bytes) = inode 番号
+0x10  version   (4 bytes) = ノードバージョン(単調増加)
  ...
+0x1C  isize     (4 bytes) = ファイルサイズ
+0x2C  offset    (4 bytes) = ファイル内オフセット
+0x30  csize     (4 bytes) = 圧縮後サイズ
+0x34  dsize     (4 bytes) = 展開後サイズ
+0x38  compr     (1 byte)  = 圧縮方式(0 = 無圧縮)
  ...
+0x44  data[]              = 実データ

暗号鍵 lkdata は 32 バイトと小さいため、4 バイトずつ書き込まれた複数のノードから再構築する必要があります。また、鍵が更新されると新しいバージョンのノード群が追記されるため、ROM 内には複数世代の暗号鍵が残存しています。

鍵の特性

lkdata の内容は 32 バイトの高エントロピーなバイト列で、NAS の初回セットアップ時にランダム生成されます。

エントロピー分析:
  サイズ: 32 bytes (256 bits)
  エントロピー: 約 4.5〜5.0 bits/byte
  → AES-256 の鍵として十分なランダム性

鍵はデバイスごとに一意であり、同じ型番の別の個体とは異なる鍵を持ちます。このため、SPI Flash ROM が破損・消去されると、そのデバイス固有の暗号鍵が失われることになります。


ディスクのパーティション構成

HDL-TA2 の内蔵ディスク(HDD/SSD)は GPT パーティションテーブルを使用し、以下のような構成になっています。

パーティション  サイズ    タイプ            用途
1            512 MB   EFI System        ブート
2              2 GB   Linux RAID        システム (md RAID1)
3              1 GB   Linux Swap        スワップ
4            128 MB   Linux filesystem  設定データ
5              1 GB   Linux RAID        ログ等 (md RAID1)
6            残り全部  Linux RAID        データ (md RAID1)

md RAID の使用

注目すべき点として、シングルディスクモデルでも md RAID1(ミラーリング)が使用されています。パーティション 6 は linux_raid_member としてマークされ、md デバイス(例: /dev/md13)として構成されます。RAID1 でありながらディスクは 1 台のみという構成です。

これは I-O DATA のファームウェアが、シングルディスクモデルと RAID モデル(HDL2-TA 等)で共通のソフトウェアスタックを使用しているためと考えられます。


暗号化レイヤー

データの暗号化は、Linux カーネルの dm-crypt サブシステムを使用して実装されています。

暗号化スタック

アプリケーション
    ↓
XFS ファイルシステム
    ↓
dm-crypt (暗号化/復号)
    ↓
md RAID1 (パーティション6)
    ↓
物理ディスク

dm-crypt のパラメータ

HDL-TA2 で使用されている dm-crypt の設定は以下の通りです。

パラメータ 説明
type plain LUKS ではなく plain モード
cipher aes-cbc-plain AES-CBC、IV は平文セクター番号
key-size 256 256 ビット鍵
key source lkdata (raw) SPI ROM 内の生バイト列をそのまま使用

plain モード vs LUKS

dm-crypt には大きく分けて LUKS(Linux Unified Key Setup)plain の 2 つのモードがあります。

LUKS モードは、暗号化ヘッダーをディスクの先頭に書き込み、パスフレーズから鍵を導出する仕組みです。鍵の変更やマルチユーザー対応が可能ですが、ヘッダー領域が必要です。

plain モードは、ヘッダーを一切書き込まず、指定された鍵でディスク全体をそのまま暗号化します。ディスク上に暗号化されていることを示す痕跡が残りません。HDL-TA2 はこの plain モードを採用しています。

cipher: aes-cbc-plain の意味

aes-cbc-plain は以下の 3 つの要素から構成されます。

  • aes: 暗号アルゴリズム(AES = Advanced Encryption Standard)
  • cbc: ブロック暗号モード(CBC = Cipher Block Chaining)
  • plain: IV(初期化ベクトル)の生成方式

IV 生成方式 “plain” の仕組み

CBC モードでは各ブロックの暗号化に IV が必要です。dm-crypt の plain IV 方式では、セクター番号の下位 32 ビットをリトルエンディアンで 16 バイトにゼロパディングしたものを IV として使用します。

セクター番号 0x00001234 の場合:

IV = 34 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      ~~~~~~~~~~~
      LE 32-bit sector number

この方式は実装がシンプルですが、セクター番号が 2^32 を超えるとIVが巻き戻るという制限があります(約 2TB で発生)。より新しい実装では plain64(64 ビットセクター番号)や essiv:sha256(暗号化されたセクター番号)が使われますが、HDL-TA2 では plain が採用されています。

鍵の使用方法

dm-crypt の plain モードでは、--hash パラメータによって鍵ファイルの処理方法が決まります。

–hash 指定 動作
未指定 鍵ファイルを ripemd160 でハッシュしてから暗号鍵として使用
plain 鍵ファイルの内容をそのまま暗号鍵として使用

HDL-TA2 のファームウェアは、lkdata の 32 バイトをハッシュせずにそのまま AES-256 の鍵として dm-crypt に渡しています。


ファイルシステム

暗号化レイヤーの上には XFS ファイルシステムが構築されています。

XFS スーパーブロック:
  magic     = "XFSB" (0x58465342)
  blocksize = 4096 bytes
  sectsize  = 4096 bytes
  format    = V4 (crc=0)

XFS V4 フォーマット(CRC なし)が使用されており、これは比較的古いバージョンの mkfs.xfs で作成されたことを示しています。


暗号化アーキテクチャの全体像

┌─────────────────────────────────────────────┐
│              SPI Flash ROM (2MB)             │
│  ┌────────────────┐  ┌───────────────────┐  │
│  │  Bootloader /  │  │  JFFS2            │  │
│  │  Firmware      │  │  ├── lkdata (32B)  │  │
│  │  (ARM code)    │  │  └── lksystem(32B) │  │
│  └────────────────┘  └────────┬──────────┘  │
│                               │              │
└───────────────────────────────┼──────────────┘
                                │ AES-256 key (raw)
                                ↓
┌───────────────────────────────────────────────┐
│                   HDD / SSD                    │
│  ┌──────────┬──────┬──────┬──────┬──────────┐ │
│  │ EFI(p1)  │sys   │swap  │conf  │ data(p6) │ │
│  │ 512MB    │(p2)  │(p3)  │(p4)  │ 残り全部  │ │
│  └──────────┴──────┴──────┴──────┴────┬─────┘ │
│                                       │       │
│                            md RAID1 (1台構成)  │
│                                       │       │
│                          dm-crypt (plain mode) │
│                          AES-256-CBC-plain     │
│                                       │       │
│                                  XFS (V4)      │
│                                       │       │
│                              ユーザーデータ     │
└───────────────────────────────────────────────┘

セキュリティ上の考察

利点

  • 透過的暗号化: ユーザーが意識することなく、ディスク上の全データが暗号化される
  • ディスク単体での読み取り防止: HDD/SSD を取り出しても、暗号鍵なしではデータを読み取れない
  • 鍵の物理的分離: 暗号鍵はディスクではなく基板上の SPI ROM に格納されており、ディスク上に鍵の痕跡がない

制限

  • plain モードの特性: LUKS のようなヘッダーがないため、暗号化されているかどうかの判別が困難。同時に、鍵の正当性を検証する仕組みもない
  • CBC-plain の IV 制限: セクター番号の下位 32 ビットのみを IV に使用するため、2TB を超えるディスクでは IV の衝突が発生する
  • SPI ROM への依存: 暗号鍵は SPI ROM のみに格納されているため、基板の故障や ROM の破損はデータ喪失に直結する
  • 鍵のバックアップ手段なし: ユーザーが暗号鍵をエクスポート・バックアップする機能は提供されていない

まとめ

I-O DATA HDL-TA/HDL-TA2 は、SPI Flash ROM 内の JFFS2 ファイルシステムに格納された 32 バイトの暗号鍵を使い、dm-crypt の plain モード(AES-256-CBC-plain)でデータパーティションを暗号化しています。

この設計は、NAS の通常運用においてはユーザーに透過的なセキュリティを提供しますが、基板の物理的な故障やSPI ROMの破損時には、暗号鍵の喪失によるデータアクセス不能というリスクを内包しています。

暗号化 NAS を運用する際は、暗号鍵がハードウェアに紐づいていることを理解し、定期的な外部バックアップを行うことが重要です。


本記事は、データサルベージのデータ復旧業務における技術調査に基づいています。

記載内容は特定ファームウェアバージョンでの調査結果であり、他のバージョンでは異なる可能性があります。

データサルベージについて

データ復旧を生業として20年以上の経験を持つ企業です。その経験の中で感じた事は、高額費用の内訳はほとんどが、技術研究費と人的工数です。当社ではこの人的工数を大幅に削減をしたシステムを導入し低価格でかつ高品質なデータ復旧サービスを提供しています。

お問い合わせ番号

データサルベージ 株式会社ブレイバー

お電話でのお問い合わせ

050-1745-9800

制作実績一覧