Android 有人知道PERM-AR-DO的细节吗?
根据, AR-DO(E3)被扩展为包括PERM-AR-DO(DB),它是一个8字节位的掩码,表示64个独立的权限 有人知道PERM-AR-DO的规格吗Android 有人知道PERM-AR-DO的细节吗?,android,specifications,access-control,sim-card,globalplatform,Android,Specifications,Access Control,Sim Card,Globalplatform,根据, AR-DO(E3)被扩展为包括PERM-AR-DO(DB),它是一个8字节位的掩码,表示64个独立的权限 有人知道PERM-AR-DO的规格吗 GlobalPlatform安全元素访问控制规范版本1.0和1.1不包含它。对于访问规则数据对象AR-DO(0xE3),只定义了标记0xD0和0xD1。数据对象PERM-AR-DO(标记0xDB),就像在上定义的其他数据对象(带有SHA-256和PKG-REF-DO的DeviceAppID REF DO)一样,是GP Secure Element
GlobalPlatform安全元素访问控制规范版本1.0和1.1不包含它。对于访问规则数据对象AR-DO(0xE3),只定义了标记0xD0和0xD1。数据对象PERM-AR-DO(标记0xDB),就像在上定义的其他数据对象(带有SHA-256和PKG-REF-DO的DeviceAppID REF DO)一样,是GP Secure Element访问控制规范的谷歌特定扩展。因此,您在GP规范中找不到关于这些DOs的任何信息 您链接的页面实际上提供了常见问题部分中问题的答案: 我们假设我们可以授予对所有基于运营商的权限的访问权,或者拥有更细粒度的控制权。那么,如何定义位掩码和实际权限之间的映射?每个类一个权限?每个方法有一个权限?从长远来看,64个单独的权限足够吗? 答:这是为将来保留的,我们欢迎提出建议 因此,答案是对PERM-AR-DO的解释还没有定义。这也反映在解析访问规则的Android源代码中(在中): 此外,在类
AccessRule
中,除了字段accessType
之外还有一条注释,指示该字段“当前未使用”:
公共长访问类型;//此位当前未使用,但保留供将来使用。
嗨,迈克尔,谢谢你的回答。我没有提到DeviceAppID REF DO与SHA-256和PKG-REF-DO,因为它们似乎是可选的,我将DeviceAppID REF DO与SHA-1一起使用(也不推荐使用),并省略了PKG-REF-DO。一个开放性问题:如果我正确解释Android源代码,PERM-AR-DO标签似乎是必须授予运营商特权的。因此,如果访问规则中没有此标记,则无法获得运营商权限。对吗?如果是这样的话,在访问规则文件(ARF)PKCS#15文件中是否有一个等价物被识别为这样的文件based@AndyNullcouchAndroid中当前的实现似乎授予访问权限,而不管是否存在PERM-AR-DO。关于PKCS#15 ARF:如果我正确解释了实现,那么目前没有ARF的等价物。对于所有证书条目,accessType
字段仅设置为0。我在ARA-M中创建了此规则:E222(REF-AR-DO)E1 18(REF-DO)4F 00 C1 14 ABCD92CBB156B280FA4E1429A6ECEEB6E5C1BFE4 E3 06 D0 01 D10101但测试应用程序(CtsCarrierApiTestCases.apk)正在显示异常junit.framework.AssertionFailedError:此测试要求SIM卡上有运营商特权规则。Cert hash:61ed377e85d386a8dfee6b864bd85b0bfaa5af81Late,但是一些可能有用的信息:它对某些设备不起作用的原因是ARA-M小程序没有安装多选择,因为CarrierPrivileges试图在SmartcardService完成之前选择小程序。(由于更多的日志记录和不同的计时,这在调试高模式下没有发生)我还得到了一个解释,对于ARF,我的SIM卡不工作,因为Google使用AC Main的硬编码值,而不是使用ARF中提到的文件ID。
} else if (rule.startsWith(TAG_AR_DO)) {
TLV arDo = new TLV(TAG_AR_DO); //E3
rule = arDo.parse(rule, false);
// Skip unrelated rules.
if (!arDo.value.startsWith(TAG_PERM_AR_DO)) {
return null;
}
TLV permDo = new TLV(TAG_PERM_AR_DO); //DB
permDo.parse(arDo.value, true);
} else {
long accessType = 0;
[...]
AccessRule accessRule = new AccessRule(IccUtils.hexStringToBytes(certificateHash),
packageName, accessType);
public long accessType; // This bit is not currently used, but reserved for future use.