RPMBはeMMC 4.5の特別なパーティションです。インターネットの調査によると、これはキーの保存に使用され、READ、WRITEなどのコマンドに応答する唯一の特別なパーティションです。 etc. RPMBの使用方法と、実際にリプレイ攻撃を軽減する方法を誰かに説明してもらえますか?
RPMBはmmc-utils
を使用して使用できます。
このリージョンに書き込むためのキーを要求することで、リプレイ攻撃に耐えることができます。 rpmbには、一度プログラムできるキーがあります。その後、ホストはrpmbからカウンター値を読み取ります。このカウンター値とプログラムされたキーを使用してMACを生成します。次に、デバイスは指定されたMACと同じキーを使用して計算したMACをチェックし、一致した場合、書き込みアクセスが許可されます( 参照 、スライド4)。
通常、RPMBパーティションへのアクセス(読み取りまたは書き込みなど)の前に、RPMB認証キーをeMMC/UFSまたはNVMeデバイスのRPMBコントローラーにプログラムする必要があります。
このキーは(少なくともRPMB仕様に従って)1回だけプログラムする必要があり、プログラミングコマンド/要求では、RPMBキーはクリアテキストで送信する必要があるため、通常は安全な環境(工場など)でプロビジョニングする必要があります。製造ライン、またはeMMC/UFS/NVMeを新しいものに交換した後の現場の信頼できるファームウェア環境)。
プログラミング後は、このRPMBキーも適切に保護する必要があるため、通常、RPMBの使用には OP-TEE 、 Google Android Trusty または x86 Intelプラットフォームの場合 ただし、このようなTEE環境には通常RPMBドライバーはありませんが、RPMBキーがあり、このキーをTEE内に安全に保持します(または安全な世界)保護のため、RPMBドライバー自体はLinuxのような通常の非安全な世界にある必要があります(Tomas Winklerの RPMBドライバーアップストリーム を参照)。
次に、RPMBへの書き込みアクセスを例にとると、TEEはRPMBキーを使用してRPMBデータに署名し、RPMBデータをHMAC-SHA256認証署名(MAC)と共にLinuxにIPC =(セキュアワールドTEEと非セキュアワールドLinuxの間)、Linuxカーネルドライバーはそのデータ(別名RPMBフレーム)を一緒にRPMB物理デバイスに送信して認証書き込みを行います。
REPLAY保護に関しては、読み取り/書き込みアクセスに対して次のように実現できます。ストレージコントローラーのH/W組み込みの単調な書き込みカウンターは、書き込みアクセスの再生保護に使用され、認証された書き込みが成功すると、H/W書き込みが行われます。カウンターは1だけ増加します(最初はゼロです)。書き込みカウンターは決して減少できないため、再生された書き込みアクセスは拒否されます。これによりデータの鮮度を保証できますが、カウンターがその最大値(32ビット)に達すると、書き込みアクセスは拒否されます(つまり、RPMBは読み取り専用ストレージになります)。
ソフトウェアが生成した乱数(ナンス)は、読み取りアクセス時の再生保護に使用されますが、読み取りアクセス時は、TEEのソフトウェアがデータの認証と鮮度の確認を担当するため、同じノンスまたは貧弱なランダムを使用してはなりませんナンスを生成して、読み取りアクセスのデータ再生を防止するための数値ジェネレーター。
詳細については、Linux Security Summit Europe 2018で私の講演をご覧ください:Implement Android Tamper-Resistant Secure Storage and Secure it in Virtualization)ちなみに、このスライドでは、興味があれば hypervisor の上にあるRPMB仮想化ソリューションの1つについても説明しています。
お役に立てれば。