强命名 DLL 中内嵌的公钥有什么用途吗?
我认为这个公钥不能用来验证签名的合法性。
因为攻击者可以获得 DLL 之后使用伪造的 公钥、密钥 对,重新哈希签名,替代原来的哈希签名。然后把伪造的公钥嵌入 DLL。由此可见,嵌入 DLL 的公钥是不能直接用来验证签名的。
要进行签名验证唯一的道路是:
公钥(或只含公钥的证书)被系统中的证书信任。比如 DLL 中的公钥被系统中的证书信任。或者,对 DLL 签名的证书单独发行。客户得到这个证书,安装这个证书,并且这个证书受到系统中的证书的信任。然后再安装软件。这个时候采用刚才安装到系统中的证书验证签名,才可靠。
所以,DLL 中的那个公钥有什么用呢?如果纯粹是一个公钥,那么没什么用。如果出了公钥之外,还声称被某个证书信任,这样才会有用。
小生迷惑不解。请赐教!