fs-verity 集成
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
fs-verity 是一個 Linux 內核功能,它允許系統使用受信任的數字證書不斷驗證 APK 文件。當平台提供這種即時驗證機制時,使用來自受支持商店(如 Play)的受信任證書,商店可以安裝具有 fs-verity 簽名的 APK 文件以進行持續驗證。受 fs-verity 保護的文件是不可變的,讀取請求只有在內容驗證後才會成功。
一旦內核支持 fs-verity,合作夥伴可以將新類型的證書從其受信任的存儲中放入產品分區/product/etc/security/fsverity
,證書在啟動時加載到內核密鑰環中。在支持此功能的設備上,受信任的商店可以安裝帶有相應 fs-verity 簽名的 APK。
執行 關鍵點: 搭載 Android 11 的設備默認啟用 fs-verity。搭載 Android R 的設備 fs-verity 是自 5.4 起上游的Linux 內核功能 ,並已向後移植到Android 通用內核 4.14 及更高版本。使用通用內核 4.14 或更高版本並使用 ext4 或 f2fs 作為用戶數據分區的新設備不需要採取任何措施,因為它們已經通過Linux 內核 支持 fs-verity。
注意: 搭載 Android R 的 GMS 設備需要隨附 Google 的簽名證書。升級到 Android R 的設備可以選擇加入。升級到 Android R 的設備 fs-verity 補丁需要反向移植到設備內核。對於 ext4,將fsverity
添加到fstab
中的fs_mgr
標誌。然後可以使用以下設置啟用該功能:
ro.apk_verity.mode=2
API 引入了新的公共 API 來查詢設備的支持狀態並確定證書是否在設備上受信任。
public final class FileIntegrityManager {
public boolean isApkVeritySupported();
@RequiresPermission(anyOf={
android.Manifest.permission.INSTALL_PACKAGES,
android.Manifest.permission.REQUEST_INSTALL_PACKAGES})
public boolean isAppSourceCertificateTrusted(@NonNull java.security.cert.X509Certificate)
throws java.security.cert.CertificateEncodingException;
}
驗證 運行以下 VTS、CTS 和 GTS 測試以驗證實施。
[VTS] ApkVerityTest [CTS] CtsAppSecurityHostTestCases:android.appsecurity.cts.ApkVerityInstallTest [CTS] CtsSecurityHostTestCases#android.security.cts.KernelConfigTest [GTS] GtsPlayFsiTestCases & GtsPlayFsiHostTestCases 注意: 如果 GTS 測試失敗,請確保 Google 的證書文件位於/product/etc/security/fsverity
中。 GTS 測試僅適用於 GMS 合作夥伴。
這個頁面中的內容和程式碼範例均受《內容授權 》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2022-06-06 (世界標準時間)。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"缺少我需要的資訊"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"過於複雜/步驟過多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"過時"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻譯問題"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/程式碼問題"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"容易理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"確實解決了我的問題"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u4e0a\u6b21\u66f4\u65b0\u6642\u9593\uff1a2022-06-06 (\u4e16\u754c\u6a19\u6e96\u6642\u9593)\u3002"}
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2022-06-06 (世界標準時間)。"]]