首页 理论教育 Linux内核安全模块:密钥管理与加密算法

Linux内核安全模块:密钥管理与加密算法

时间:2023-11-22 理论教育 版权反馈
【摘要】:为了保护完整性度量值,内核使用了加密算法。加密算法需要密钥,IMA/EVM用到了三组密钥:evm-key、_evm、_ima。evm-key扩展属性security.evm值包含几个安全相关扩展属性值的加密处理后的运算结果,一种处理方式是使用HMAC。HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。关于密钥管理,请参考第16章。在扩展属性security.evm的值中包含一个数字签名,EVM子系统在内核钥匙链“_evm”中寻找用于验证签名的公钥。

Linux内核安全模块:密钥管理与加密算法

回顾一下,IMA要做完整性保护,完整性的基础是文件的哈希值,这个哈希值被存入了文件的扩展属性“security.ima”中。为了保护这个文件扩展属性的完整性,又对包括这个扩展属性在内的几个安全相关的扩展属性值进行一个运算,将运算结果存入“security.evm”中。然后呢?为了保护扩展属性“security.evm”的完整性,再引入一个扩展属性?显然是不行的。

为了保护完整性度量值,内核使用了加密算法。加密算法需要密钥,IMA/EVM用到了三组密钥:evm-key、_evm、_ima。下面逐一叙述。

(1)evm-key

扩展属性security.evm值包含几个安全相关扩展属性值的加密处理后的运算结果,一种处理方式是使用HMAC。HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)。HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

上述加密运算使用的密钥是内核中一个名称为“evm-key”,类型为“encrypted”的密钥。关于密钥管理,请参考第16章。EVM子系统将安全相关的扩展属性的值合在一起作为消息输入,将密钥“evm-key”作为密钥输入,算出当前的HMAC值,用这个值和之前存储在扩展属性security.evm中的值进行比较,确定文件的安全相关扩展属性的完整性是否被破坏。

(2)_evm(www.xing528.com)

另一个保护安全相关扩展属性值的方式是使用数字签名。数字签名涉及公钥和私钥。在扩展属性security.evm的值中包含一个数字签名,EVM子系统在内核钥匙链(keyring)“_evm”中寻找用于验证签名的公钥。

(3)_ima

EVM是用来保护IMA的。EVM自身依靠数字签名或HMAC保护,那么如果直接用签名来保护IMA,不就可以省略EVM了吗?后来,IMA做了一些扩展,在security.ima中直接存储一个和文件完整性校验值相关的数字签名,这样在没有EVM的情况下,IMA自己就可以保证自己的完整性。

验证签名的公钥存储在内核钥匙链(keyring)“_ima”上。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈