现在,我们比较 h′和 h′′是否完全相同。如果相同则验证通过,否则验证失败。
3、设计与实现
为了便于描述,我们引入以下几个基本概念:
1. 完全摘要值--指对 ELF 文件的所有数据以及签名相关数据计算出来的摘要值;
2. 不完全摘要值--指对 ELF 文件的一部分重要数据(主要是 ELF 文件头)以及签名相关数据计算出来的摘要值;
3. 完全签名值--指对完全摘要值加密所得到的签名值;
4. 不完全签名值--指对不完全摘要值加密所得到的签名值;
5. 系统验证级别--指系统级的验证级别,它适用于系统中所有的 ELF 文件;
6. 文件验证级别--指单个 ELF 文件的验证级别,它只适用于指定的某个 ELF 文件。
签名相关数据是指原始文件大小、签名者公钥标识 ID、签名算法、签名时间以及签名者基本信息等数据。
3.1 签名策略
对 ELF 文件的签名是通过签名工具完成的,与操作系统核心无关,同时也和平台无关。签名过程完全遵循第二节中所描述的标准和原理。
首先,我们通过 ○1 式计算得到两种摘要值:不完全摘要值(hpart)和完全摘要值(hcomp)。然后再通过 2 式使用签名者私钥(SKsign)加密摘要值,从而得到两种签名值:不完全签名值(spart)和完全签名值(scomp)。
最后,我们将不完全签名值和完全签名值按照固定的格式组合在一起,并放在被签名文件的末尾。如图 3-1 所示(括号中的数字表示该字段所占字节数)。
图 3-1 代码签名过程及签名值存放
|