web-dev-qa-db-ja.com

組み込みシステム用のTLS秘密鍵ストレージ。ベストプラクティスはありますか?

Cortex-M MCUなどの小さなシングルチップ組み込みシステム用のTLS秘密キーストレージに関するベストプラクティスを探しています。モノリシックファームウェアは内部フラッシュに保存されています。ほとんどの推奨事項は非常にPC中心であるように思われ、ほとんどの場合、それらのPC中心の推奨事項は物理的なアクセスから保護することさえ考慮していません。多くの人は、PCが一部のサーバールームに閉じ込められていると想定していますが、これは、組み込みデバイスには当てはまらない仮定です。

また、ユーザーの対話なしで機能する必要があるため、ユーザーパスワードの入力は組み込みシステムのオプションではありません。

これまでに、2つの基本的なアプローチを確認しました。

  1. 秘密鍵を外部セキュリティチップに保存します。これは基本的に、平文アクセスから秘密鍵を保護します。しかし、私が知る限り、セキュリティチップにアクセスして、攻撃者が秘密キーを使用するのを阻止することは絶対にありません。 MCUファームウェアのエクスプロイトによるものか、セキュリティチップへの物理的なアクセスによるものです。

  2. MCUの内部フラッシュメモリにキーを保存し、ヒューズを飛ばして外部デバッグインターフェイスを無効にします。キーが保存されているメモリ領域にMCUファームウェアの特権部分のみがアクセスできるように、Cortex-MのMPUを設定します。これは物理的なアクセスに対する優れた保護を提供するように思われますが、ファームウェアの特権部分での悪用により、キーへのプレーンテキストアクセスが発生する可能性があります。

これらの2つのアプローチのどちらが他方よりも優れているかは、私には明らかではありません。他のアプローチはありますか?このような組み込みシステムに固有の推奨されるベストプラクティスはありますか?できれば、異なるアプローチとその長所と短所をランク付けします。

7
Timmy Brolin

信頼できる情報源から入手できるベストプラクティスがあることを期待していました。それがなければ、私はこれを提案として投稿しており、それに関するいかなる情報も歓迎します。

組み込みデバイスでの安全なキーストレージの方法は、脅威のシナリオによって異なります。

脅威シナリオ1:リモート攻撃と物理攻撃の両方。

脅威シナリオ2:リモート攻撃のみ。

------------

両方のシナリオで最高のソリューション

  • 内蔵暗号プロセッサとセキュアキーストレージを備えたシングルチップMCU(PUF-RAMや改ざん防止書き込み専用フラッシュなど、専用の暗号プロセッサからのみアクセス可能)。
  • オフチップからロードされたファームウェアはすべて署名する必要があります。
  • 理想的には外部RAMはありません。
  • MPUを使用して、暗号機能へのアクセスをファームウェアの特権セクションに制限します。
  • 物理的な攻撃に対する防御が必要な場合は、JTAGデバッグヒューズを切断します

2番目に最適なソリューション、シナリオ1のみ

  • 外部セキュリティチップを備えたシングルチップMCU。
  • 外部セキュリティチップとのすべての通信は、デバイス固有のキーを使用して暗号化されます。
  • オフチップからロードされたファームウェアはすべて署名する必要があります。
  • 理想的には外部RAMはありません。
  • MPUを使用して、暗号機能へのアクセスをファームウェアの特権セクションに制限します。
  • 外部セキュリティチップとの暗号化通信のキーは、オンチップフラッシュに格納されています。
  • JTAGデバッグヒューズを切断します。

欠点:実装が最も複雑で、実装にバグがあるとセキュリティが低下する可能性があります。追加の暗号化により、パフォーマンスが低下する可能性があります。

2番目に最適なソリューション、シナリオ2のみ

  • 外部セキュリティチップを備えたシングルチップMCU。
  • リモートでロードされたファームウェアには署名が必要です。
  • MPUを使用して、暗号機能へのアクセスをファームウェアの特権セクションに制限します。
  • JTAGを無効にする必要はありません。メンテナンスを大幅に簡素化します。

欠点:物理的なアクセスに対する防御がありません。外部セキュリティチップの暗号化されていないインターフェイスは、物理的な攻撃に対して広く開かれています

番目に最適なソリューション、両方のシナリオ

  • シングルチップMCU。
  • オフチップからロードされたすべてのファームウェアは署名されている必要があります。
  • MPUを使用して、暗号機能へのアクセスをファームウェアの特権セクションに制限します。
  • オンチップフラッシュに格納された秘密キー。
  • 物理的な攻撃に対する防御が必要な場合は、JTAGデバッグヒューズを切断します。
  • 物理的な攻撃に対する防御が必要な場合、理想的には外部のRAM=はありません。

欠点:攻撃が成功すると、キーへの間接的なアクセスではなく、平文のキーが生成されます。

Pro:セキュリティ標準が進化するにつれて、ファームウェアの更新により新しい暗号アルゴリズムのサポートを追加する機能

------------

説明

リモート攻撃に対する2つの防御ライン

リモート攻撃に対する2つの防御線は、上記の4つのソリューションすべてで同じです。

  1. バグのないモノリシックなメインファームウェア。リモート攻撃は、ファームウェアにバグがある場合にのみ可能です。
  2. メインファームウェアのバグのない特権部分。バグのためにファームウェアの主要部分が危険にさらされている場合でも、MPUは、ファームウェアの特権部分と秘密鍵を保護する部分的な第2層を提供します。

これは、ハードウェアソリューションに関係なく、セキュリティに重点を置く必要がある場所です。

外部セキュリティチップ

必要なすべてのECC、RSA、およびAES機能を実行できる、組み込みのセキュアキーストレージと暗号化プロセッサを備えた専用デバイス。通常、I2CまたはSPIを使用してMCUに接続

これらは実際に攻撃に対する防御の追加のラインを追加するとは言えません。より良い説明は、彼らが成功した攻撃の結果を変えると言うことです。セキュリティチップがなければ、攻撃に成功すると平文のキーが生成されます。セキュリティチップを使用すると、攻撃が成功すると、キーを使用するための間接アクセスが発生します。後者は、損害がわずかに少ない結果です。

しかし、ケーブルテレビ業界にこの種の保護についてどう思うか尋ねてください。キーを介した間接的なアクセスは、インターネットを介して間接的にアクセス可能なキーを持たせることにより、広範囲にわたるケーブルテレビの海賊行為に十分です。

セキュリティチップには重大な欠点もあります。セキュリティチップは、キーを使用するためのアクセスしやすいハードウェアインターフェイスを公開し、実際に物理的な攻撃を非常に簡単にします。例外は、MCUとの暗号化された通信をサポートする外部セキュリティチップであり、その暗号化されたインターフェイスを介しても、秘密キーを読み取ることはできません。しかし、それはMCUに新しいキーストレージ問題を作成します。

MCU内部ハードウェア暗号化プロセッサと保護されたキーストレージ

外部セキュリティチップと同じ利点がありますが、物理的な攻撃の弱点やパフォーマンスの問題はありません。

物理的な攻撃ベクトルとその防御

最も簡単なものから最も難しい攻撃ベクトルへとランク付けされます。

  1. 外部セキュリティチップへのシリアルインターフェイス。
    • 代わりにMCU内部の暗号化プロセッサとキーストレージを使用してください。
    • 暗号化されたインターフェイスとデバイス固有の暗号化キーを備えた外部セキュリティチップを使用します。
    • セキュリティチップを使用せず、代わりに秘密キーをMCU内部フラッシュに直接保存します。
  2. JTAGデバッグインターフェイス。
    • JTAGヒューズを切断します。
  3. 外部ブートフラッシュ。
    • ロードされたファームウェアの署名またはハッシュを確認します。
  4. 外部RAM。
    • 内部RAMのみを使用してください。
  5. シリコンプローブ。
    • 改ざん防止ハードウェア。
    • PUF-RAM。
4
Timmy Brolin