RH850 セキュリティソリューション
こんにちは、Renesas オートモーティブセキュリティ事業部 Principal Engineer 山中 聡です。私は3年間からルネサスのセキュリティチームに参加しました。私の部署は自動車セキュリティのカスタマーサポートを担当しています。このブログ記事を通じて、お客様にオートモーティブセキュリティの重要性を伝えられることを嬉しく思います。このブログ記事は、3 部構成のシリーズのパート 2 で、セキュア ブートとは何か、なぜそれが必要なのか、基本的な内容を読者に理解いただくことを目的としています。
RH850シリーズ用のセキュリティ用IPはICU-S、ICU-Mの2種類があります。ここでは、それぞれを利用した2パターンのセキュアブートの実現方法を紹介します。
ICU-S および ICU-M のセキュアブートは、HIS (現在の AUTOSAR) セキュアハードウェア拡張仕様(SHE仕様)に基づいて実装可能です。SHE仕様の詳細については、AUTOSAR SHE (URL: Specification of Secure Hardware Extensions (autosar.org))を参照してください。 SHE仕様はAUTOSAR SHEのサイトから現在は誰でも入手可能です。
ICU-Sを搭載したRH850製品におけるセキュアブートの実現方法
ICU-SはEVITA-light相当のインテリジェント暗号ユニットです。
セキュリティソフトウェアはICU-S搭載MCUのメインプロセッサエレメント (MainPE)上で動作します。MainPEはICU-S の特殊機能レジスタをインターフェイスとしてハードウェアリソース (暗号化アクセラレータやセキュアキーストレージなど)を使用します。
ICU-Sにはセキュリティ専用のCPUはありません。セキュアブートは非セキュアなCPU(PE1)から実行されます。改ざんを防ぐため、最初に実行されるセキュアブートプログラムはワンタイムプログラム (OTP)メモリに格納されます。また、リセットベクタはこの変更できないコードである必要があります。ICU-Sにおけるセキュアブートでは、OTPと共にICU-Sのみがアクセス可能な保護されたセキュアブートMAC鍵とセキュアブートMACスロットが使用されます。OTPメモリとICU-Sによってハードウェアによる”root of trust”が形成されます。
概要:
- ハードウェアによる”root of trust”:
- ICU-Sで保護された鍵のOTPメモリとストレージ
- タンパ耐性:
- MAC値およびMAC鍵は、ICU-Sのみアクセス可能なセキュアなメモリに格納されます。
- 暗号アルゴリズム
- CMAC (NIST SP 800-38B)
ICU-S 搭載RH850におけるセキュアブートの実行例:
- MCUリセット解除後、CPU(PE1)はOTPメモリにあるセキュアブートプログラムを実行します。
- セキュアブートプログラムは、ユーザプログラムAを検証します。
- セキュアブートプログラムは、ユーザプログラムAおよびブートMAC鍵からCMAC値を計算します。
- セキュアブートプログラムは、計算結果と"プログラムAのCMAC値"注1を比較します。
- Step 2での検証が成功した場合、PE1はユーザプログラムAを実行、ICU-Sの機能を使用して、ユーザプログラムBを検証します。
- Step 2と同じです (プログラムA -> プログラムB)。
- Step 3での検証が成功した場合、ユーザプログラム (プログラムB)がPE1より実行されます。
注1:"プログラムAのCMAC値"はICU-Sが管理するSecure Data Flash内にも格納可能です。
ICU-Mを搭載したRH850製品におけるセキュアブートの実現方法
ICU-MはEVITA-medium相当のインテリジェント暗号ユニットです。
ICU-Mを搭載したMCUはインテリジェンス暗号ユニットプロセッサ (ICUP)と呼ばれる独自のCPUを持ちます。セキュリティソフトウェアはICUP上で実行されます。ICUPは暗号化アクセラレータやセキュアフラッシュメモリなど、ICU-Mのハードウェアリソースに排他的にアクセスできます。さらに、ICUPはメインプロセッサエレメント (MainPE)との通信のためのいくつかの共有リソースにアクセスすることができます。
MainPEで動作するアプリケーションソフトウェアは、暗号化アクセラレータやセキュアフラッシュなどのICU-Mのリソースに直接アクセスすることはできません。そのため、MainPEは定義されたインターフェイスを介してICUPにセキュリティサービスを要求する必要があります。このインターフェイスは、ICU-Mファームウェアの設計によって定義されます。ICU-Mを搭載したMCUは、共有メモリやメールボックスを介したプロセッサ間通信、およびプロセッサ間の割り込みをサポートします。
ICU-Mを使用する場合、セキュアブートはセキュアなICUPから実行されます。最初に実行されるセキュアブートプログラムはICU-Mのみがアクセス可能なセキュアコードストレージに格納されます。セキュアブートではICU-Mのみがアクセス可能なセキュアデータフラッシュ内に格納されているセキュアブートキーを使用してアプリケーションを検証します。セキュアブートキーとICU-Mによってハードウェアによる"root of trust"が形成されます。検証後、ICUPはMCU内の他のプロセッサエレメント(PE)をリセット状態から解放、各PEは動作を開始します。前述のように、暗号化アクセラレータやセキュアフラッシュメモリなどのICU-MのハードウェアリソースはICUPからのみアクセスされます。
概要:
- ハードウェアによる”root of trust”:
ICU-Mのセキュアコードストレージおよびセキュアブートプログラム。(攻撃者はICU-Mで保護されたセキュアブートプログラムを変更できません) - タンパ耐性:
ブートMACはICU-Mにしかアクセスできないセキュアなデータフラッシュに格納されます。 - 暗号アルゴリズム:
- CMAC (NIST SP 800-38B)
- RSA デジタル署名アルゴリズム
ICU-M搭載RH850におけるセキュアブートの実行例 (対称アルゴリズム)
- MCUのリセット解除後、ICUPがブートプロセッサとして設定されます。
- セキュアブートプログラムは、ユーザプログラムAを検証します。
- セキュアブートプログラムは、ユーザプログラムAおよびブートMAC鍵からCMAC値を計算します。
- セキュアブートプログラムは、計算結果と"プログラムAのCMAC値"を比較します。
- Step 2での検証が成功した場合、ICU-M (セキュリティソフトウェア) はCPU(PE1)を起動します。
- PE1はユーザプログラムAを実行、ユーザプログラムAはICU-M (セキュリティソフトウェア)を使用してユーザプログラムBを検証します。
- Step 2と同じです (プログラムA -> プログラムB)。
- Step 4での検証が成功した場合、ユーザプログラムBがPE1によって実行されます。
ICU-S 搭載RH850におけるセキュアブートの実行例(非対称アルゴリズムの場合):
- ICUP は、MCUのリセット後にブートプロセッサとして設定されます。
- セキュアブートプログラムは、ユーザプログラムAを検証します。
- セキュアブートプログラムは、ユーザプログラムAからメッセージダイジェスト (hash)を計算します。
- セキュアブートプログラムは、ユーザプログラムAと公開鍵の署名からメッセージダイジェストを計算します。
- セキュアブートプログラムは、両方のメッセージ ダイジェストを比較します。
- Step 2 での検証が成功した場合、ICU-M (セキュリティソフトウェア) はCPU(PE1)を起動します。
- PE1はユーザプログラムAを実行、ICU-M (セキュリティソフトウェア)を使用してユーザプログラムBを検証します。
- Step 2と同じです (プログラムA -> プログラムB)。
- Step 4での検証が成功した場合、ユーザプログラムBがPE1によって実行されます。
結論
要約すると..
- ICU-SとICU-Mは「root of trust」と「root of chain」を確立することができます。
- ICU-S および ICU-Mにおけるセキュアブートは、AUTOSAR (SHE) HIS に基づいて実装できます。
- ICU-Mのセキュアブートは、署名検証に基づいて実装できます。
セキュアブートシリーズの第3部では、Philip Lapczynski氏がR-Car SOCデバイスにおけるセキュアブートコンセプトについて紹介しますので、ご期待ください。