組み込みデバイスのメモリに安全なキーを保存する


10

私は、データを送受信し、それらを暗号文モード(暗号化モード)で保存する組み込みデバイスに取り組んでいます。キーを保存するための最善の方法は何ですか(私はARM CORTEX MシリーズMCUを使用しました)?

1-SRAMメモリと各起動シーケンスでキーを保存し、組み込みMCUにキーを挿入してSRAMメモリに保存します。MCUが侵入を検知すると(タンパーセンサーまたは...を使用して)、SRAMをすばやく消去してリセットすることができると私が考える最良の方法です。短所:攻撃者が改ざんを通過してデバイスにアクセスできた場合、SRAMメモリは(コードマイニングに対して)安全です。MCUでこのメモリのセキュリティ機能を見つけることができません。

2キーを生成し、プログラミングMCUのフラッシュメモリに保存します。MCUフラッシュメモリのサポートCRP(コード読み取り保護)は、コードマイニングを防ぎ、内部AESエンジンとRNG(乱数生成)エンジンの助けを借りて、ランダムキーを作成し、フラッシュメモリを暗号化して、OTPにそのランダムキーを保存します(ワンタイムプログラマブルメモリ-128ビット暗号化メモリ)、次にコード実行でRNGキーを使用してフラッシュメモリをデコードし、初期キーとコードにアクセスします。短所:不揮発性メモリに格納されたキー、改ざんは役に立たず、攻撃者はキーをマイニングするために多くの時間を費やします。

EEPROMメモリに3つ格納されたキー、上記の2つのアプローチの組み合わせ、キーは不揮発性メモリに格納されますが、改ざんが感知された場合、EEPROMは消去可能です。

LPC18S57FBD208(1 MBのフラッシュメモリ、180 MHz、136 KBのSRAM、16 KBのEEPROM、および7インチのTFT LCDおよびAES 128ビットの暗号化エンジンを駆動する必要があるTFT LCDコントローラーを備えたcortex m3)を検討します。

回答:


18

これらのオプションはどれも非常に安全でないため、他のオプションよりも特に優れている、または劣っているオプションはありません。オプション4を使用します。

  1. SRAMはキーを保存する最も安全な場所ですが、外部からキーを注入してはなりません。これらは常に、起動時にプロセッサ内で生成する必要があります。他のことをするとすぐに残りが無効になります-それは自動的に安全ではありません。

  2. キーを不揮発性メモリに保存しないでください。これは正しいことです。EEPROMまたはフラッシュメモリが読み取られないように保護するかどうかは関係ありません。このコード読み取り保護ヒューズは簡単に元に戻すことができます。攻撃者はキャップを外すだけです(黒いエポキシパッケージを取り除くか化学的にエッチングして、内部のシリコンダイを露出させます)。この時点で、それらは不揮発性メモリセルであるダイの一部を覆います(これらのセクションは非常に規則的であり、個々のメモリセルは非常に小さいので見えますが、大きな構造が見られます)。 UVに不透明な部分はその部分でマスクされます。その後、攻撃者はチップに5〜10分間、UVライトを照射するだけで、CRPヒューズを含むすべてのヒューズをリセットできます。OTPメモリは、標準のプログラマであれば誰でも読み取ることができます。

または、十分な資金がある場合(たとえば、これらのキーを取得することは、1000ドル以上の価値がある場合)、いくつかの種類の電子顕微鏡でメモリセルを直接読み取ることができます。

安全のために、キーは隠さずに消去する必要があります。

  1. いいえ、上記と同じ理由で。

次に、オプション4に進みます。

  1. 暗号化を使用するだけです。鍵の配布は解決された問題です。そのため、すぐに利用できるソリューションを使用してください。チップはRNGを使用する必要があり、十分なエントロピーが利用可能であることを保証するために他のさまざまな考慮事項を行う必要があります。また、ブートローダーは、汎用である必要な秘密鍵を生成するプログラムを直接起動する必要があります。登録され、SRAMに直接移動されます。SRAMは、消去されるまで残ります。

ただし、CPU以外に秘密鍵が何であるかを理解できないという問題があります。問題ありません。公開鍵暗号を使用してください。OTPメモリに保存しているのは公開鍵です。このキーは誰でも読み取ることができ、スタック交換に投稿できます。オイルタンカーの側面に高さ5フィートの文字でペイントできます。これは重要ではありません。公開鍵暗号化のすばらしい点は、非対称であることです。何かを暗号化するための鍵はそれを復号化できません。秘密鍵が必要です。逆に、公開鍵で暗号化されたものを復号化するための鍵は、何かを暗号化するために使用することはできません。したがって、CPUは秘密鍵を生成し、保存されている公開鍵を使用して秘密鍵を暗号化し、USBまたはRS232などの任意の方法で送信します。秘密鍵を読むには秘密鍵が必要ですが、保存、送信、またはチップに関わる必要はありません。秘密鍵を秘密鍵(チップ外の別の場所)で復号化すると、準備が整います。完全にチップ内で生成された安全に送信された秘密鍵があり、公開鍵以外は何も保存する必要がありません。これは、前述のように、読み取りから保護する必要はまったくありません。

このプロセスは正式にキーネゴシエーションと呼ばれ、すべてのものがそれを使用します。今日は何度か使用しています。それを処理するために利用できる多くのリソースとライブラリがあります。キーを何にも「挿入」しないでください。

最後にもう1つ注意してください。AESキーはサイドチャネルアタックを使用して簡単に回復できるため、これらはすべて無効です。サイドチャネル攻撃は、電源に接続し、電流引き込みの微小な変化と、CPUのビットフリッピングによって引き起こされるこれらの変化間のタイミングを測定します。レジスタとして。これと、AES(または使用可能な暗号化アルゴリズムの非常に小さなセットのいずれか)の動作に関する知識を組み合わせることで、キーの回復が比較的簡単で安価になります。キーの読み取りは許可されませんが、キースペースを255個の可能なキーのように、途方もなく小さいものに絞り込むことができます。チップは上流にあるため、それを検出することもできません。

これにより、「安全な」暗号化プロセッサのAES-256暗号化ブートローダーが無効になり、それほど難しくありません。私の知る限り、この攻撃に対する真のハードウェア対策はありません。ただし、この脆弱性の原因となっているのは、暗号化アルゴリズム自体、およびビットを反転するためにCPUが必要とする方法です。サイドチャネル耐性またはサイドチャネル証明アルゴリズムを開発する必要があると思います(うまくいけば、開発中です)。

つまり、現在のところ、組み込みデバイスにキーを安全に保存する方法(または一時キーを使用する方法)に対する本当の答えは次のとおりです。

ただし、少なくともオプション4のキーネゴシエーションを使用して毎回新しいキーを生成する場合、サイドチャネル攻撃は使用中のチャネルのキーを危険にさらすだけであり、データを暗号化している間に電力を監視する時間があれば、 。内部で生成された新しいキーを頻繁にネゴシエートする場合、これにより、有用なセキュリティが提供されます。

キーを生成し、それらをできるだけ短時間保存します。


クリアしてくれたMetacollinに本当に感謝します。しかし、私のプロジェクトは、多くのリーダー(mcuを含む)と多くのターゲットMCUで構成されています。各リーダーは、任意のターゲットを読み取ることができ、どのターゲットも任意のリーダーで読み取ることができる必要があります。このうち、データを転送するための一意のキーに同意する必要があると思います。そしてあなたの答えに基づいて、たとえばLPC18S57セキュア皮質m3とSTM32F429一般皮質m4、さらにはLPC1788一般皮質m3(より安い選択)の間にそれほど大きな違いはないと思います、私は最高機密プロジェクトをやっていないが、私はやりたいですこれは私ができる限り安全です。
Mahmoud Hosseinipour 2015年

2
「AESキーは簡単に復元できる」というあなたの声明は、少なくとも疑わしいものです。現在の消費量に基づいて、プロセッサで何が発生しているかを調べる手法の背後にある原理を理解しています。ただし、CPUが取り組んでいるのは暗号化と復号化だけであると想定しています。ただし、ほとんどのアプリケーションには1つのCPUしかなく、同時に多数のタスクを処理します。1つのブロックのAES暗号化中に数十または数百の割り込みが発生し、現在のピークに基づいてキーを見つけることができなくなります。
bakcsa83 2016

2
キーをフラッシュに保存しない場合は、キーを生成するコードも同じです。コードがどれほど複雑であっても、オペコードをアセンブラーに変換すれば、キーが得られます。
ランディン2017年

The wonderful thing about private key cryptography is that it is asymmetric. あなたの投稿からこれを知っていることは明らかですが、他の読者のためにそれについて言及します... s / private / public上記の引用の中で。
ラディアン

方法4を使用すると、任意の2つのデバイス間のチャネルを保護できますが、何らかの形式の共有シークレットがないと、通信しているデバイスの信頼性を保証できません。ユースケースで認証が必要な場合は、フラッシュに単一の共有シークレットを格納するだけの場合よりも、キー交換を行う方がよいでしょう。より優れたセキュリティが必要な場合は、暗号化チップを使用する必要があります。
グレッグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.