セキュリティ

セキュアブート

正規のファームのみ起動を許す仕組み。

概要

セキュアブート(Secure Boot)とは、組み込みシステムやコンピュータが起動する際に、ロードするソフトウェア(ファームウェア、ブートローダー、OS など)が正規の発行元によって署名されているかどうかを検証し、改ざんされたコードや不正なコードの実行を防ぐ仕組みである。

IoT デバイスや組み込み機器では、マルウェアの埋め込みやファームウェアの不正書き換えが現実的な脅威となっている。セキュアブートはこれらの脅威に対する最初の防衛線であり、デバイスが電源投入された瞬間から信頼性を確保するための根幹技術である。

デジタル署名の検証によりソフトウェアの真正性(authenticity)と完全性(integrity)を確認し、信頼チェーン(Chain of Trust)と呼ばれる階層的な検証構造を形成する。


歴史・背景

セキュアブートの概念は 2000 年代初頭から研究されてきたが、広く普及したのは次のような背景がある。

  • 2011年: UEFI フォーラムが UEFI Secure Boot 仕様を策定。Windows 8 以降の PC で必須となり、PC 領域での認知が一気に高まった。
  • 組み込み・IoT 領域: ARM TrustZone の普及とともに、SoC レベルでのセキュアブートが標準的になった。STM32, i.MX, TI AM シリーズなど主要 MCU/MPU が専用の ROM ブートローダーを搭載するようになった。
  • NIST SP 800-193 (2018年): 「Platform Firmware Resiliency Guidelines」としてファームウェアセキュリティの包括的なガイドラインが公表され、セキュアブートが重要要素として明記された。
  • IoT セキュリティ法規制: EU の Cyber Resilience Act(CRA)や米国の大統領令 14028 など、法規制レベルでセキュアブートが要求されるようになっている。

技術仕様

信頼チェーン(Chain of Trust)

セキュアブートは以下の階層構造で信頼を連鎖させる。

[ルートオブトラスト (RoT)] → [ブートROM] → [ブートローダー] → [OS/ファームウェア] → [アプリケーション]

各ステージが次のステージの署名を検証してから制御を移す。最初の信頼の起点となる RoT がハードウェア的に保護されていることが全体の前提となる。

署名アルゴリズム

アルゴリズム鍵長用途
RSA-2048 / RSA-40962048〜4096 bit多くの組み込み向けブートROM
ECDSA P-256 / P-384256〜384 bit省電力・省スペースが求められる MCU
Ed25519256 bit高速・軽量。新しい実装で増加中

ハッシュアルゴリズム

署名検証では以下のハッシュが使用される。

アルゴリズム出力長状態
SHA-256256 bit現在の主流
SHA-384 / SHA-512384 / 512 bit高セキュリティ要件向け
SHA-1160 bit非推奨(脆弱性あり)

動作原理

基本的な検証フロー

1. 電源投入
2. ハードウェアROM(変更不可)がブートローダーをロード
3. ブートローダーのハッシュを計算
4. OTP/eFuse に焼き付けられた公開鍵でデジタル署名を検証
5. 検証成功 → 次ステージへ制御移行
6. 検証失敗 → 起動停止またはリカバリモード移行

鍵管理と OTP / eFuse

検証に使用する公開鍵(またはそのハッシュ)は、One-Time Programmable (OTP) メモリや eFuse に書き込まれる。一度書き込まれると変更不可能であるため、製造時の鍵管理が非常に重要になる。

/* STM32 での RDP (Read Protection) + OTP 設定例(概念コード) */
#define OTP_BASE_ADDR   0x1FFF7000UL
#define OTP_LOCK_ADDR   0x1FFF7200UL

/* 公開鍵ハッシュを OTP に書き込み(一度だけ実行可能) */
void program_pubkey_hash(const uint8_t *hash, size_t len) {
    HAL_FLASH_Unlock();
    for (size_t i = 0; i < len; i += 4) {
        uint32_t word = *(uint32_t *)(hash + i);
        HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,
                          OTP_BASE_ADDR + i, word);
    }
    HAL_FLASH_Lock();
}

U-Boot での Verified Boot 実装例

# FIT イメージの署名鍵生成
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 \
    -out dev.key
openssl req -new -x509 -key dev.key -out dev.crt

# FIT イメージ作成と署名
mkimage -f kernel.its kernel.itb
mkimage -F -k keys/ -K u-boot.dtb -r kernel.itb
# u-boot の設定
CONFIG_FIT=y
CONFIG_FIT_SIGNATURE=y
CONFIG_RSA=y
CONFIG_SPL_FIT_SIGNATURE=y

ロールバック防止(Anti-Rollback)

セキュアブートと組み合わせて、古い(脆弱な)ファームウェアへのダウングレードを防止するロールバック防止機能が重要である。バージョン番号を OTP に書き込み、それより古いバージョンの起動を拒否する。


用途・ユースケース

産業機器・制御システム

PLC やスマートメーターなど、フィールドに長期展開される機器では、悪意ある書き換えによる制御システムの乗っ取りが致命的な被害をもたらす。セキュアブートは最初の防衛手段として必須とされる。

自動車(車載機器)

AUTOSAR Adaptive Platform や OEM の要件として、ECU のセキュアブートが義務化されている。EVITA(E-safety Vehicle Intrusion Protected Applications)プロジェクトでも重要なセキュリティ要件として定義されている。

スマートホーム・IoT デバイス

Matter プロトコル認証の要件にもセキュアブートが含まれており、スマートスピーカーや家庭用ルーターでも採用が進んでいる。

医療機器

FDA のサイバーセキュリティガイダンス(2023年)でも、医療機器に対してセキュアブートの実装が推奨されている。


実装・開発のポイント

鍵の階層化(Key Hierarchy)

単一の鍵ではなく、鍵を階層化することでリスクを分散させる。

製造者ルート鍵(オフライン保管)
    └── 中間署名鍵(開発環境)
            └── ファームウェア署名鍵(CI/CD)

ルート鍵は HSM(Hardware Security Module)で管理し、オフラインに保つ。

デバッグポートの制御

セキュアブートを有効化する際は、JTAG/SWD デバッグポートも適切に制限する必要がある。開発中はデバッグを許可し、量産品ではロックする仕組みを設計段階で組み込む。

/* STM32 JTAG 無効化例 */
__HAL_RCC_AFIO_CLK_ENABLE();
__HAL_AFIO_REMAP_SWJ_DISABLE(); /* JTAG + SWD を無効化 */

フォールバック戦略

署名検証に失敗した際のフォールバック戦略が重要である。

戦略メリットデメリット
完全停止セキュリティ最高可用性ゼロ(産業用途では問題)
リカバリパーティション起動復旧可能リカバリ自体のセキュリティが必要
アラート送出後停止異常を記録可能通信機能が必要

テストの重要性

セキュアブートの実装ミスはデバイスをブリックさせる(文鎮化)リスクがある。以下を徹底する。

  • 開発・量産向けに別々の鍵セットを用意する
  • QEMU などのエミュレータで検証する
  • 段階的にロールアウト(一部デバイスで先行確認)する

他技術との比較

技術役割セキュアブートとの関係
ルートオブトラスト信頼の起点セキュアブートの基盤
TPMセキュリティチップ鍵保管・PCR による整合性測定
セキュアエレメント鍵保管専用チップ鍵をより安全に保管
ファームウェア署名署名処理セキュアブートの検証対象
OTAセキュリティ無線更新セキュリティ更新されたファームへのセキュアブート適用

セキュアブートは「起動時」の保護であり、実行中のコードの保護(実行時保護)とは異なる。完全なセキュリティには、セキュアブートに加えてランタイム保護、通信の暗号化、定期的なセキュリティアップデートを組み合わせる必要がある。

関連用語

参考リンク