我很好奇,通过谷歌研究,我一直在学习数字签名和强烈命名的程序集。如果您真的努力,似乎可以使用数字签名来签署强名称的程序集。
我推测通过这种做法,可以通过这种方式来规避数字签名的目的。
微软说:
“强名称本身并不意味着一定程度的信任,例如通过数字签名和支持证书提供的信任。”
- http://msdn.microsoft.com/en-us/library/wd40t7ad%28v=vs.110%29.aspx
我是否正确猜测以这种方式使用数字签名实际上是一种不好的做法,这可能会造成安全漏洞,绝对没有用处?或者甚至可能吗?使用数字签名作为强名称可能或更好然后什么都不做?除了正确使用数字签名之外,它是否提供了一些额外的安全性。
答案 0 :(得分:10)
使用数字签名来签署强名称的程序集是不是一种坏习惯吗?
没有。这是一个非常好的做法。
如果您真的努力,似乎可以使用数字签名来签署强名称的程序集。
这有点棘手,因为强大的命名和数字签名都会修改程序集。必须先对程序集进行强名,然后进行签名。
我推测通过这种做法可以通过这种方式使用它来规避数字签名的目的,因为强名称的程序集可以被黑客攻击
好的,所以你猜测有攻击。我猜测没有。说明漏洞和提议的攻击。</ p>
(至少有些帖子说过)。
你打算让我们猜猜哪个帖子这么说了吗?
“强名称本身并不意味着一定程度的信任,例如通过数字签名和支持证书提供的信任。”
这是对的。强名称和数字证书类似,但它们解决了不同的问题。强名称解决标识程序集问题。签名解决了信任链问题。
我已经看过互联网海报的例子,他们正在考虑他们正在保护自己的软件。
强命名和证书签名都不能保护软件!安全系统的目的不是保护软件,而是保护用户。我们没有驾驶执照来保证机动车辆部门免受忍者袭击。我们有驾驶执照,证明驾照的持有人确实是他们所说的并且被允许驾驶的人。任何认为强有力的命名保护软件的人都非常非常困惑。
我是否正确地猜测以这种方式使用数字签名实际上是一种不好的做法,这可能会造成安全漏洞,绝对没有用处?
不,你的每一个计数都错了。
跨越溪流是好事还是坏事(请原谅幽默。)?
为什么这会是一件坏事?我们所拥有的只是你声称存在攻击,并且没有任何证据确实存在攻击。
或者甚至可能吗?
当然可以。
是我看过的帖子,其中提到使用两个音乐会(使用数字签名来签署一个特别强烈命名(不是数字签名)的程序集)可能或更好然后什么都不做?
您要求我们评论我们尚未阅读的帖子的准确性,而您尚未提供链接。我们应该怎么知道它们是否准确?
答案 1 :(得分:4)
对于用于强烈签署程序集的密钥,不存在信任链。您不能使用相同类型的密钥进行强名称签名和“代码签名”:因此“混合和匹配”没有问题。这两种类型的签名服务器有两种不同的用途,您需要在特定情况下选择您需要的那些(很可能只是强名称签名而.Net没有针对另一种内置验证)。
通过签名强名称,您不能说特定密钥是否属于特定实体,不像其他类型的签名,您知道签名证书的来源(即authenticode签名或HTTPS的SSL证书),并且可以合理地确定原点。
强烈签名告诉您由同一个“实体”创建的相同密钥签署的程序集,但没有指示此“实体”是什么/谁。你不能真的说“这个新版本的装配是由FooBar公司建造的”,你只能说“它与前一个公司/集团建立起来”。
注意:确实有一些“众所周知的”公钥(即由Microsoft签名的框架程序集),但是你不能通过查看公钥来获得任何程序集并说“由X签名”。
请注意,此内容详见Eric Lippert的回答 - Signing of .NET Assemblies。
答案 2 :(得分:3)
把它分成清楚的位,因为我不是非常确定你在问什么。
是否可以使用数字签名的私钥(例如Authenticode)来强烈命名程序集?
是的,至少在理论上 - 因为所有密钥都是一个字节序列。
这样做有什么意义吗?
由于您不需要为强名称支付私钥,因此使用付费数字签名来做这件事就没有多大意义了。您支付的是与数字签名相关的信任。正如埃里克·利珀特(Eric Lippert),阿列克谢(Alexei)和其他人所解释的那样,强有力的命名并不能保证信任。
如果你这样做会是安全漏洞吗?
没有。无论您是数字签名还是强命名,无论您使用哪种私钥,您所提供的所有内容都是公钥。公钥是意味着是公共知识 - 这是非对称加密的全部要点。只要您的私钥保密,就没有漏洞。
ETA:我希望看到问题中提到的帖子,关于使用Authenticode签名进行强命名(而不是将两者结合使用)。