RKPとは何ですか
RKP はリモート キー プロビジョニングです。
なぜRKPなのか
従来、携帯電話やタブレットのプロジェクトを制作する際には、Googleから認証キー(googleキー)を申請し、生産ラインにあるツールを使って携帯電話やタブレット端末に書き込んでいました。
この書き方にはセキュリティ上のリスクがあります。Google
から適用される証明書と鍵には秘密鍵漏洩のリスクがあるため、Google は Android S から RKP アプローチを提案しました。簡単に言えば:
- デバイスからキーを生成します。
- 生成された公開キーをエクスポートします。
- CSR の形式で Google サーバーにアップロードします。
RKPのやり方
Google のガイダンス文書を参照すると、リファレンス ツールの実装は AOSP ソース コードで提供されています。リファレンス実装は
system/security/provisioner の下に提供されます。
チップ メーカーがデフォルトの製品ツールを提供していない場合、OEM はこのリファレンスを使用できます。実装して、独自の生産ラインツールに適したものに変換します。
コードの説明
rkp_factory_extraction_tool.cpp (最新の AOSP コード、Android14 である必要があります)
//定义导出的CSR格式
DEFINE_string(output_format, "build+csr", "How to format the output. Defaults to 'build+csr'.");
//定义这个程序是测试使用,还是导出文件使用,默认是导出功能。
DEFINE_bool(self_test, false,
"If true, the tool does not output CSR data, but instead performs a self-test, "
"validating a test payload for correctness. This may be used to verify a device on the "
"factory line before attempting to upload the output to the device info service.");
主要な関数を見てください。
実装するために getCsr が rkp_factory_extraction_lib.cpp に呼び出されます。
// 获取keymint aidl service硬件信息,这个地方是TEE 厂商实现
irpc->getHardwareInfo(&hwInfo);
// 生成一个attest key,会调用到TEE中实现;
getProdEekChain(hwInfo.supportedEekCurve);
// 调用keymint aidl 的api,然后会调用到TEE中生产CSR;
irpc->generateCertificateRequest
TEE での実装手順
つづく…