IoTセキュリティの基礎(第2部):暗号秘密の保護
DigiKeyの北米担当編集者の提供
2020-06-11
編集者注:IoTデバイスはその急増にもかかわらず、セキュリティ面の懸念が払拭されておらず、産業用IoT(IIoT)やミッションクリティカルなアプリケーションでは、攻撃された場合に企業や個人のデータが被害を受ける可能性あり、セキュリティの課題がコネクテッドデバイス導入の障壁になる場合もあります。IoTアプリケーションのセキュリティ確保は難しいと考えられがちです。開発者は複数のセキュリティメカニズム、プロトコル、およびポリシーを組み合わせる必要があるため、これらを組み合わせると複雑に見えるものです。しかし実際には、IoTデバイスのセキュリティは、ハードウェアセキュリティデバイスによってサポートされる、さほど複雑でない基本的な仕組みをいくつか組み合わせれば構築できます。すでに確立されたセキュリティ手法に従うことで、これらの懸念を払拭することができます。5回に分けてお届けするこのシリーズでは、開発者が最初からベストプラクティスを実践するのに役立つ実際的なガイダンスを提供します。第1部では、安全設計の基盤となる暗号アルゴリズムについて説明します。この第2部では、セキュアIoT設計における秘密鍵の役割、鍵管理、およびセキュアストレージについて説明します。第3部では、IoTデバイスへの他のタイプの脅威を低減するために、セキュアプロセッサに組み込まれたメカニズムについて説明します。第4部では、高度なプロセッサでセキュリティメカニズムを適用して、IoTデバイスのランタイム環境に対する攻撃を低減するのに必要な隔離を確保する方法を特定して紹介します。第5部では、IoTデバイスから、これらのデバイスをIoTクラウドリソースに接続するために使用されるハイレベルのセキュリティ対策へとIoTセキュリティを移行する方法について説明します。
ハードウェアベースの暗号デバイスはモノのインターネット(IoT)の脆弱性を低減することができますが、秘密鍵や関連データの保護が不十分だと、非常に堅牢な暗号デバイスを使用したとしても安全性が低下することがあります。半導体メーカーは、鍵やその他の特権データを保護するために、専用のセキュリティICやプロセッサに組み込まれた各種のメカニズムを利用して対処しています。
この記事では、暗号鍵の持つ重要な役割について確認し、Maxim Integrated、NXP、STMicroelectronics、Microchip Technologyのデバイスで利用できる、鍵保護のために組み込まれた各種のメカニズムについて説明します。
暗号における秘密鍵の役割
シリーズ第1部で説明したとおり、ハードウェアでサポートされているさまざまな暗号アルゴリズムを使用して、一意のメッセージハッシュまたは署名を作成することができます。さらにその他多数の暗号を使用して、平文を暗号文へと暗号化し、暗号文を平文へと復号することができます。これらのアルゴリズムはアプリケーションのセキュリティを強化することができますが、アプリケーションを保護するこうした機能は、基本的には暗号アルゴリズムが使用される秘密鍵やその他の秘密データのセキュリティに依存します。
暗号化における秘密の侵害とは、これらの秘密に基づいて構築されたセキュリティポリシー、プロトコル、およびメカニズムにおいてセキュリティが侵害されることを意味します。19世紀の暗号研究者アウグスト・ケルクホフスは、「暗号方式は、秘密鍵以外のすべてが知られたとしても、なお安全であるべきだ」と提唱しましたが、この原則は、現在「ケルクホフスの原理」として知られています。この原理をさらに簡潔な言葉で表現したのが、「敵はシステムを知っている」という「シャノンの金言」です。この金言は、情報理論の父として知られるクロード・シャノンによるものです。
実際に、セキュアシステムは、厳密に仕様が規定された既知のアルゴリズムを基盤として構築されているため、半導体メーカーでは、ハードウェア加速型のセキュリティデバイスでこうしたシステムを安心して使用することができます。しかし、最終的にこれらのシステムを保護しているのは、アルゴリズムに使用される秘密情報なのです。
暗号秘密の保護における課題
暗号秘密の保護は、概念的にはわかりやすいのですが、実現には大きな課題が伴います。より高いレベルのセキュリティポリシーを導入するためには、必然的に、各種のアルゴリズムが使用されている複数のセキュリティプロトコルを利用することになります。一方、こうしたプロトコルとアルゴリズムでは、静的な鍵とプロトコル自体によって作成される一時的な鍵を組み合わせる必要があります。たとえば、Transport Layer Security(TLS)セッションでは、認証で静的な鍵が使用され、安全なメッセージ交換のために一時的なセッション鍵が共有されます。
実際のところ、米国国立標準技術研究所(NIST)は19種類の鍵に加えて、楕円曲線領域パラメータや保護が必要な中間結果など、さらに11種類の関連情報を特定しています。NISTはさらに、堅牢性の高いセキュリティを実現することと、鍵の使用に関連する情報を表1に示す指定された期間保護することを推奨しています。表1には、NISTが推奨する鍵の最初の数種類のみを記載しています[1]。
表1:ここに記載されているのは、NISTの完全な推奨リストの一部である数種類の鍵と、指定された期間保護する必要がある関連情報です。(表提供:Digi-Key Electronics、NISTの資料より) |
鍵および関連する情報を保護する必要があるということは、開発者がIoTアプリケーションでの秘密データの使用に細かいところまで注意を払う必要があることを意味します。IoTデバイスの場合、大きな課題は、複数の状態(保管中、転送中、使用中)にあるデータをそれぞれの状態で保護することにあります。保管中のデータを保護するには、安全なストレージメカニズムが必要です。送信中のデータを保護するには、ネットワークまたはシステムバスで送信中の秘密を保護する手段が必要です。使用中のデータを保護するには、暗号アルゴリズムの実行中にデータが使用されている間、そのデータが公開されないようにするメカニズムが必要です。幸いなことに、さまざまな種類のメカニズムを使用して秘密データを保護することができる、幅広いセキュリティデバイスが提供されています。
暗号対応の半導体で秘密を保護する方法
暗号に対応した高度な半導体ソリューションは、一般に、鍵やその他の秘密情報を保護するために、何らかの種類の安全な不揮発性メモリを備えていますが、アプローチ全体の性質は、特殊なセキュリティICと暗号対応プロセッサという、2つの主要なセキュアデバイス間で大幅に異なります。
セキュリティICは自己完結型のサブシステムとして設計されており、一般にシリアルバス経由で通信するホストプロセッサの代わりにアルゴリズムの実行に対応します。たとえば、Maxim IntegratedのDS28C36セキュアオーセンティケータは、I2Cポートと2つの汎用I/O(GPIO)を備えています。このI/Oは、認証の成功または失敗の信号をホストプロセッサに提供するために使用できます(図1)。
図1:Maxim IntegratedのDS28C36セキュアオーセンティケータのようなセキュリティデバイスには、統合をシンプルにすると同時に内部の鍵および運用の保護を強化するサブシステムが用意されています。(画像提供:Maxim Integrated)
ソフトウェアの統合は通常、簡単に行うことができます。たとえば、NXPのPlug & Trustミドルウェアライブラリでは、同社のSE050およびA71CHセキュアエレメントデバイスのハードウェア機能が、数点の関数呼び出しに抽象化されています(図2)。
図2:NXPのPlug&Trustミドルウェアなどのソフトウェアライブラリを利用することにより、開発者は直感的に理解できる数点の関数呼び出しを利用して鍵を作成し(左)、鍵にアクセスします(右)。または、NXPのSE050およびA71CHセキュアエレメントデイバス内の基盤となる機能を全面的に活用することもできます。(画像提供:NXP)
新しい鍵を作成すると(図2の左を再度参照)、keyIdが返されます。この鍵を後で利用するには、この鍵のkeyId(図3、右)を参照します。システムバスで実際の鍵の値を公開する必要はありません。NXPのPlug & Trustミドルウェアを利用することにより、Arduino対応のNXP Kinetis Freedom K64F評価ボードとNXP OM-SE050ARD拡張ボードをSE050の開発に対して使用するか、NXP OM3710/A71CHARDボードをAC71CHの開発に対して使用することで、セキュアアプリケーションを素早く実装することができます。
Maxim IntegratedのDS28C36、NXPのSE050、NXPのAC71CHTK2/TOBC2VJなど専用のセキュリティIC、およびこのクラスのその他のデバイスは、他に類を見ない利点を複数実現します。専用のセキュリティICで機能を統合することにより、設計に安全な機能を追加するための比較的シンプルなアプローチを利用できるようにしつつ、秘密のデータおよび操作が公開される機会を減らします。たとえば、Maxim IntegratedのDS28C36では、ハードウェアの暗号アクセラレータ、完全な乱数発生器、および8キロビットの保護されたEEPROMや、その他の機能ブロックが統合されています。DS28C36が楕円曲線デジタル署名アルゴリズム(ECDSA)ファームウェアの署名を認証すると、保管中、送信中、使用中のデータの保護が保証されます。これは、秘密鍵、関連データ(図1を参照)、そしてこれらの秘密を使用する動作がデバイス内に封じ込められた状態のままになるためです(図3)。
図3:Maxim IntegratedのDS28C36など、セキュリティデバイスの機能が統合されているということは、秘密鍵と関連データがチップ内に封じ込められた状態のままになるということを意味しています。(画像提供:Maxim Integrated)
プロセッサベースの秘密鍵の保護
IoT設計のすべてが専用のセキュリティICに対応できるとは限りません。要件によっては、別の暗号化方式の使用、またはフットプリント、部品表(BOM)、コスト、顧客の仕様に関連した設計の制約が指定される可能性があります。こうした設計に対しては、STMicroelectronicsのSTM32WB55やMicrochip TechnologyのATSAML11のようなセキュリティ対応プロセッサが、暗号アルゴリズムのハードウェア加速エンジンと秘密データ保護メカニズムの組み合わせを実現します。この記事では鍵の保護に焦点を当てていますが、このようなプロセッサにより、多数の高度なセキュリティ機能を追加することができます。この件については、本シリーズの第3部で取り上げます。
STMicroelectronicsのデュアルコアSTM32WB55ワイヤレスデバイスでは、Arm® Cortex®-M4 CPU(CPU1)がホストプロセッサとしての機能を果たして、無線サブシステム専用のArm Cortex-M0+マイクロコントローラ(CPU2)経由で専用のプロセッサ間通信コントローラ(IPCC)およびセマフォメカニズム(HSEM)と通信します。このCPU2サブシステムでは、セキュアなメモリがAdvanced Encryption Standard(AES)ハードウェアアクセラレータによって使用されるカスタマーキーストレージ(CKS)エリアを提供します(図4)。
図4:デュアルコアのSTMicroelectronics STM32WB55プロセッサにより、無線サブシステムコア(CPU2)のみが鍵に直接アクセスできるようになりますが、ホストコア(CPU1)で実行される信頼されたアプリケーションは、これらの鍵を間接的に使用することができます。(画像提供:STMicroelectronics)
STM32WB55アーキテクチャは、CKS鍵に対してデバッグポートからアクセスしたり、ホストCPU1プロセッサを実行する安全ではないルーチンからアクセスしたりできないようにします。同時に、ホストCPU1で実行される信頼されたアプリケーションは、AES暗号の特定のCKS鍵を、鍵インデックスを使用して参照することによって使用することができます。このAESハードウェアブロックは、内部バス経由でCKSエリアから目的の鍵を受け取り、鍵の送信がCPU2サブシステム内で引き続き保護されるようにします。
Arm Cortex-M23ベースのATSAML11プロセッサの場合、Microchip TechnologyはArmのTrustZoneテクノロジに組み込まれたセキュリティ機能を利用しています。TrustZoneでは、ハードウェアベースのメカニズムを使用して、信頼されたリソースと信頼されていないリソースが強制的に分断されています。
MicrochipのATSAML11プロセッサでは、TrustZoneのImplementation Defined Attribution Unit(IDAU)を使用することにより、安全なアプリケーションコードおよび安全ではないアプリケーションコードごとにメモリのサブリージョンへのアクセス制御を変更するなどのセキュリティポリシーを強制します。TrustRAMと呼ばれる256バイトのセキュリティランダムアクセスメモリ(RAM)エリアが、一時的な鍵を対象に追加の安全なストレージを提供します。
安全なプロビジョニング
専用のセキュリティICおよびプロセッサには、IoTデバイスの秘密鍵および関連データを保護するために開発者が必要とするメカニズムが用意されています。セキュリティ上の脆弱性は頻繁に発生しますが、秘密鍵または証明書を備えたセキュリティICまたはプロセッサの最初のロード、つまりプロビジョニングで使用されるプロセスで障害が発生すると、窃盗者に対して秘密鍵が公開されてしまいます。サイバー犯罪者はこのようにして盗難された鍵や侵害を受けた証明書をブラックマーケットで素早く販売します。その結果、ハッカーが、一見有効な証明書を使用して安全なネットワークに侵入できるようになります。
このシリーズの第4部では、Amazon Web Services、Microsoft Azure、Google Cloudなど、特定のIoTクラウドサービス向けにメーカーが事前にプロビジョニングし、鍵と証明書が用意されたセキュリティデバイスと開発キットについて取り上げます。ただし、多くの開発者は、実稼働向けの展開では独自のカスタム鍵および証明書を使用することを選択します。または、こうした鍵および証明書を使用しなければならない場合もあります。
カスタムのプロビジョニングをサポートするために、大半の半導体メーカーは、自社設備を使用したプロビジョニングやプロビジョニングパートナーとの協力を通じたプロビジョニングを実施しています。たとえば、Microchipは、TrustonicやIAR SystemsのSecure Thingzなど、サードパーティのパートナーによって提供されるプロビジョニングキットに含まれる安全なラッピングツールを使用して作成された、カスタム秘密を使用してデバイスをプロビジョニングしています(図5)。
図5:自社ブランド製品製造会社の開発者は、安全なラッピングツールを使用して秘密を保護することができます。これらの秘密は、後で製造パートナーの安全なプログラミング設備でMicrochipのSAML11のような安全なマイクロコントローラをプロビジョニングするために使用されます。(画像提供:Microchip Technology)
生産の準備ができたら、自社ブランド製品製造会社の開発者はこの安全なラッピングツールを使用して、鍵と証明書を暗号化された形式でMicrochipの工場に提供します。この鍵と証明書は、パートナーの安全なプログラミング設備にあるハードウェアセキュリティモジュールを使用してのみ復号することができます。このアプローチにより、保護されていないネットワーク経由で製造情報を交換する必要性が満たされると同時に、最終的には、安全にプロビジョニングされた鍵およびファームウェアを備え、生産の準備ができたデバイスが提供されることになります。
PUFの技術を利用した自己プロビジョニング
セキュリティにおけるPhysical Unclonable Function(PUF)技術の利用が進んだことにより、プロセッサや専用ICで、プロビジョニングに対するさらに安全なアプローチを実現できる可能性があります。PUF技術を利用することで、デバイスに秘密鍵を明示的に読み込む代わりに、セキュリティデバイスで、各デバイスに固有の特性から作成される秘密鍵を使用できるようになります。
PUF技術では、製造時のバリエーションやその他の物理的なプロセスが原因で発生する、デバイス自体に固有であり、通常のシステム動作において反復可能な値が利用されています。下記で説明するとおり、この値を暗号用の一意の秘密鍵として利用することができます。つまり、各PUF対応デバイスに対して、最初から組み込みの秘密鍵が用意されているということになります。
セルフプロビジョニングが可能になることに加えて、PUF技術により、セキュリティのレイヤがさらに追加されます。デバイスに侵入して、このデバイス固有の値を公開しようと試みると、この値を生成するために使用される特性が変更されるため、生成される値も変わることになります。
PUFのメカニズムは複数ありますが、この基本的なアプローチはすべてのPUF対応デバイスでほぼ同じです。たとえば、Maxim IntegratedのMAX32520セキュアマイクロコントローラや、一部のセキュリティICで使用されているChipDNA PUF機能では、鍵を生成するために一連のアナログPUFエレメントおよび制御ロジックが利用されています(図6)。
図6:Maxim IntegratedのChipDNA PUF技術では、オンチップの制御ロジックで一連のPUFエレメントのランダムな状態が使用され、一貫性のあるデバイス固有の鍵が生成されます。(画像提供:Maxim Integrated)
Maxim IntegratedのDS28C39 ECDSAセキュアオーセンティケータでは、ChipDNA PUFの出力がECDSA操作の秘密鍵として、そして関連データを保護するための秘密鍵として使用されます(図7)。
図7:Maxim IntegratedのDS28C39 ECDSAセキュアオーセンティケータは、そのオンチップのChipDNA PUF回路によって生成される秘密鍵を使用します。(画像提供:Maxim Integrated)
NXPは、同社のPUF対応LPC55Sプロセッサファミリに対して、SRAMアレイの初期ランダム状態によって生成された出力を基にするPUF技術を利用しています(図8)。
図8:NXPのLPC55SプロセッサファミリのPUF実装では、SRAMの起動データを使用してデジタル指紋および関連するアクティベーションコードが生成されます。このアクティベーションコードは、後でデジタル指紋の復元や、秘密鍵の生成および暗号化に使用されます。(画像提供:NXP)
これらのデバイスでは、PUFの使用は一意のデジタル指紋および関連するアクティベーションコードを生成する登録操作から開始されます。この指紋とコードは、新しい登録操作が実施されるまで有効です。このアクティベーションコードはデバイスの保護されたフラッシュに保存されます。これによりデバイスは、電源投入時に一貫して生成されるSRAM起動データからデジタル指紋を再構築することができます。
このデジタル指紋を使用して、開発者は独自の鍵や生成鍵を暗号化できます。このプロセスでは、デバイスが鍵コードを返します。開発者はアクティベーションコード、鍵コード、そしてインデックスを指定することにより、デバイスで、該当するオンチップの鍵スロットから必要な秘密鍵を復号し、その秘密鍵を暗号ソフトウェアライブラリに送信できるようになります。鍵スロット0は特殊な鍵復号方式を提供します。この方式では、鍵が内部バスディレクトリ経由でプロセッサのAESハードウェア暗号エンジンに提供されます。
鍵の暗号化と複合を担うLPC55SのPUFデジタル署名は、保管中または送信中の秘密データの保護を強化するために以前から使用されている鍵暗号化鍵(KEK)としての役割を果たします。KEKを使用することで、大型のセキュアストレージ、および秘密データの保護に必要な、関連する内部メカニズムに対する要件を緩和することができます。
図9:NXPのLPC55Sプロセッサファミリは、そのデジタル指紋をKEKとして使用して、その鍵ストアで保護されており、関連するアクティベーションコード、鍵コード、インデックスを使用してプログラムによって参照される鍵を復号します。(画像提供:NXP)
KEKを使用してカスタム鍵と関連データを暗号化すると、暗号化された結果を非セキュアで不揮発性のメモリに保存することができます。このアプローチによって、開発者はさまざまな種類の鍵と関連データを、安全なストレージが限定されているデバイスにおいても保護することができます。PUF生成のKEKを利用することで、安全なIoTデバイスにおいて、開発サイクル全体を通じてアプリケーションを保護できるようになります。
結論
暗号アクセラレータを備えた専用のセキュリティICおよびセキュアプロセッサを利用することにより、安全なシステムを構築する能力が飛躍的に向上します。ただし、安全なシステムを実現するには、秘密鍵や、暗号化メカニズムおよびプロトコルに関連するその他のデータの安全性が極めて重要です。セキュリティデバイスでは、さまざまなメカニズムを利用して、保管中、送信中、そして使用中の秘密データが保護されています。これらのデバイスを使用することで、開発者はさらに安全性の高いIoTソリューションを、他の設計要件を犠牲にすることなく構築することができます。
免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。


