华为海思芯片的安全启动数字签名验证机制主要包括以下步骤和原理:
密钥生成与存储:
- 密钥对生成:海思芯片的数字签名验证机制依赖非对称加密算法,会生成一对密钥,即私钥和公钥。私钥是保密的,用于对数据进行签名;公钥则用于验证签名的合法性。这对密钥是数字签名验证的基础。
- 密钥存储:私钥和公钥的存储位置非常关键。在海思芯片中,部分重要信息如密钥等会存储在特殊的存储器中,例如芯片内部的一次性可编程(OTP)存储器。OTP 存储器具有数据写入后不可逆的特性,保证了存储在其中的密钥等信息的安全性和不可篡改性。
签名过程:
- 数据摘要计算:在对启动程序或相关数据进行签名之前,首先会使用特定的摘要算法(如 SHA-256 等)对原始数据进行计算,生成一个固定长度的数据摘要。这个数据摘要能够唯一地代表原始数据的特征,就像数据的 “指纹” 一样。
- 私钥签名:使用私钥对计算得到的数据摘要进行加密操作,生成数字签名。这个数字签名与原始数据是绑定在一起的,并且只有持有相应私钥的一方才能生成这样的签名。通过这种方式,确保了数据的来源可靠性和完整性。
验证过程:
- 获取公钥:在验证数字签名时,系统需要获取相应的公钥。对于海思芯片,公钥的获取方式可能是从芯片内部的特定存储区域读取,或者从预先设定的可靠来源获取。如果公钥的哈希值被保存在海思 OTP 中供用户使用的部分或者明文保存在经过安全启动验证的 uboot 中,系统可以从中获取公钥信息。
- 数据摘要计算:对收到的待验证数据同样使用与签名时相同的摘要算法计算数据摘要。这一步骤是为了确保验证过程中使用的是与签名时相同的计算方法和数据特征表示。
- 签名验证:使用获取到的公钥对数字签名进行解密操作,得到原始数据的摘要。然后将这个解密得到的摘要与重新计算的待验证数据的摘要进行对比。如果两个摘要完全一致,则说明数字签名是有效的,即数据在传输或存储过程中没有被篡改,并且数据的来源是可靠的;反之,如果两个摘要不一致,则说明数据可能已经被篡改或者签名不合法。