强命名 DLL 中内嵌的公钥有什么用途吗?

alphapaopao 2008-08-30 02:08:42
我认为这个公钥不能用来验证签名的合法性。
因为攻击者可以获得 DLL 之后使用伪造的 公钥、密钥 对,重新哈希签名,替代原来的哈希签名。然后把伪造的公钥嵌入 DLL。由此可见,嵌入 DLL 的公钥是不能直接用来验证签名的。

要进行签名验证唯一的道路是:
公钥(或只含公钥的证书)被系统中的证书信任。比如 DLL 中的公钥被系统中的证书信任。或者,对 DLL 签名的证书单独发行。客户得到这个证书,安装这个证书,并且这个证书受到系统中的证书的信任。然后再安装软件。这个时候采用刚才安装到系统中的证书验证签名,才可靠。

所以,DLL 中的那个公钥有什么用呢?如果纯粹是一个公钥,那么没什么用。如果出了公钥之外,还声称被某个证书信任,这样才会有用。

小生迷惑不解。请赐教!
...全文
174 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫气东来_999 2008-08-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hztltgg 的回复:]
嵌入 DLL 的公钥就是用来构成标识的。而不是用来验证签名的。
[/Quote]
alphapaopao 2008-08-31
  • 打赏
  • 举报
回复
当然,我就是在看这本书。
签名当然是用密钥签名。我只是好奇嵌入DLL的公钥是干什么的。我疑心这个公钥要用来做签名验证,但从理论上可知,这是不可以的。
现在知道啦,只是用来构成标识。
lextm 2008-08-31
  • 打赏
  • 举报
回复
首先建议你看看CLR via C#这样的说。详细的讲了,强命名里面使用的是一对密钥,如果只是公钥的话,那真的一点用处也没有了。

其次真正的数字签名,要用证书的,那个就更加复杂,当然也更加安全。但是只有公司才会用这样的证书了。个人不太会的。
alphapaopao 2008-08-31
  • 打赏
  • 举报
回复
多谢 HZ
hztltgg 2008-08-31
  • 打赏
  • 举报
回复
嵌入 DLL 的公钥就是用来构成标识的。而不是用来验证签名的。


alphapaopao 2008-08-30
  • 打赏
  • 举报
回复
比没有签名要安全得多。
zzuyongp 2008-08-30
  • 打赏
  • 举报
回复
安全 存在绝对的安全么 呵呵。。。。
alphapaopao 2008-08-30
  • 打赏
  • 举报
回复
“程序不被修改” 就是通过签名实现的。
“版本控制” 我想你的意思是 DLL 唯一标识。这是通过版本号、cultural、公钥 组成。或许,嵌入 DLL 的公钥就是用来构成标识的。而不是用来验证签名的。
hztltgg 2008-08-30
  • 打赏
  • 举报
回复
是用来设计程序不被修改的,版本控制用的,不是用来签名

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧