web-dev-qa-db-ja.com

ハードウェアの安全なキー

Androidのデバイスキーはハードウェアにあり、使用済みのヒューズが作成されています。このヒューズメモリはどこにありますか?プロセッサに直接アクセスできますか?

ハードウェアキーはメモリに読み込まれないため、AES操作はプロセッサで直接実行する必要があります。この融合キーを使用するAES実装はどこで行われますか?同等のAES-NI命令セットがアームにありますか?

これがこの質問の正しい場所ではない場合、どこで質問できますか?

2
stflow

ハードウェアセキュアキーはAndroidの機能ではなく、Androidを実行している一部の(すべてではない)デバイスの機能です。これには、ハイエンドおよびミッドエンドのスマートフォンやタブレットのほとんどが含まれます。それらが機能する方法は、ハードウェアの機能によって異なります。

ARM Cortex-Aコア(および一部の古いもの))に基づくすべてのプロセッサは、32ビットまたは64ビットのどちらであっても、 TrustZone と呼ばれる機能を備えています。一種の高度に専門化された仮想化。2つのパーティションがあります。セキュアワールドと通常の世界です。セキュアワールドは通常の世界にアクセスできますが、通常の世界はセキュアワールドにアクセスできません。TrustZone自体では不十分です有用なことを行うには、メモリバスが保護を適用する必要があります。これは、Cortex-Aに基づくほとんど(すべてではない) system-on-chips (SoC)の場合です。

セキュアな世界では、適切なプロセッサ上で、小さなオペレーティングシステムを使用する信頼された実行環境(TEE)が実行されます。合理的に最新のAndroidバージョンでは、Android keymasterのキーはTEEに保存されます、Android )はそれらに直接アクセスできません。デバイスの暗号化キーがTEE内に存在する電話がありますが、常にそうであるとは限りません。

TEEデータは、Androidがアクセスできないキーを使用して暗号化されて保存されます。このキーは、追記型メモリに保存されているルートキーから派生します(これはヒューズまたは他の1回限りの場合があります)プログラム可能な(OTP)メモリテクノロジー)Androidこのキーにアクセスできない理由は、プロセッサが安全な世界にのみアクセスできるようにするためです。

一部のSoCでは、セキュアワールドがメモリを直接読み取ります。他のSoCでは、ルートキーに排他的にアクセスできる専用コンポーネントがSoCにあり、メインプロセッサで実行できるすべての安全な方法は、ルートキーに基づいてキーの派生を要求することです。これはシステムのセキュリティに関してあまり変わりません。どちらの場合でも、システムのセキュリティが依存するキーは、安全な世界のメモリに格納されるキーです。

セキュアワールドを派生キーに制限することには、1つの利点があります。派生のTweakを変更することにより、キーを変更できます。 TEEに部分的に違反し、データを読み取ることはできても、任意のコードを実行することはできなかった攻撃者は、キーにアクセスする可能性があります。バグが修正され、新しいTEEバージョンが別のキー派生パラメーターを使用する場合、攻撃者はTEEデータを読み取ることができなくなります。

一部のARMv8プロセッサ(現在のすべてのハイエンドフォンを含む)はAES-NIと同様の命令を備えていますが、これはセキュリティに影響を与えません(間接的に、暗号化を安価にし、サイドチャネル攻撃を受けにくくします)。 AES-NIとARM同等のものは、AESをより高速に計算するための単なる方法です。キーとデータは同じ場所にあります。