密钥证明 - 变更挑战
Key Attestation - change challenge
我想我对密钥证明一件事都不了解。似乎不可能在后续证明期间将 "attestation challenge"(作为密钥生成器规范中的参数传递)更改为其他内容。这意味着虽然我可以在开始时验证密钥是在安全元素中创建的,但我以后无法验证它,因为如果应用程序被破坏,攻击者可以轻松地向我发送以前收到的有效证书链,这并不是完全秘密的,在回应我的询问。 [注意:我的意思是很容易证明,如果安全元素确实是安全的并且密钥 material 永远不会离开它,那么收到的证书链总是有效的。但请参阅我的其他问题。]
但我们可以说这是安全的,我应该在每个密钥的生命周期内只接受一次检查。这引出了另一个问题:在证明期间收到的证书中有一个字段 KeyDescription (OID: 1.3.6.1.4.1.11129.2.1.17) 应该包含 AuthorizationList 类型的字段以及其他值,其中包括类型的字段RootOfTrust,包括字段 VerifiedBootState。我无法检查它,但假设它始终包括 当前 启动状态,而不是创建密钥时的启动状态。如果我不能更改证明质询,我怎么能相信这个值?
编辑:我确实意识到,每次我想验证启动状态并随后将其从 SE 中删除时,我都可以创建具有不同挑战的新密钥,但它似乎效率很低,不是很优雅,如果对于由于某种原因,将引入限制密钥创建尝试的政策。
我明白了。我只是误解了事情。单一挑战和无法更改随机数的原因很可能是这样的:
创建密钥后,可以请求证明。如果数据证明硬件存储和安全启动报告设备处于绿色状态(设备未 root,执行安全启动),则任何更改都将导致密钥被擦除。这意味着只要这个密钥存在,我们就可以确定("to a reasonable degree"当然)设备的软件(和硬件)没有发生根本性的变化,如果我们的软件是安全的,它仍然是。
参考文献:
我想我对密钥证明一件事都不了解。似乎不可能在后续证明期间将 "attestation challenge"(作为密钥生成器规范中的参数传递)更改为其他内容。这意味着虽然我可以在开始时验证密钥是在安全元素中创建的,但我以后无法验证它,因为如果应用程序被破坏,攻击者可以轻松地向我发送以前收到的有效证书链,这并不是完全秘密的,在回应我的询问。 [注意:我的意思是很容易证明,如果安全元素确实是安全的并且密钥 material 永远不会离开它,那么收到的证书链总是有效的。但请参阅我的其他问题。]
但我们可以说这是安全的,我应该在每个密钥的生命周期内只接受一次检查。这引出了另一个问题:在证明期间收到的证书中有一个字段 KeyDescription (OID: 1.3.6.1.4.1.11129.2.1.17) 应该包含 AuthorizationList 类型的字段以及其他值,其中包括类型的字段RootOfTrust,包括字段 VerifiedBootState。我无法检查它,但假设它始终包括 当前 启动状态,而不是创建密钥时的启动状态。如果我不能更改证明质询,我怎么能相信这个值?
编辑:我确实意识到,每次我想验证启动状态并随后将其从 SE 中删除时,我都可以创建具有不同挑战的新密钥,但它似乎效率很低,不是很优雅,如果对于由于某种原因,将引入限制密钥创建尝试的政策。
我明白了。我只是误解了事情。单一挑战和无法更改随机数的原因很可能是这样的:
创建密钥后,可以请求证明。如果数据证明硬件存储和安全启动报告设备处于绿色状态(设备未 root,执行安全启动),则任何更改都将导致密钥被擦除。这意味着只要这个密钥存在,我们就可以确定("to a reasonable degree"当然)设备的软件(和硬件)没有发生根本性的变化,如果我们的软件是安全的,它仍然是。
参考文献: