替代PKI数字签名
我正在寻找在达到以下目标的方式转换XML文档的方法:替代PKI数字签名
- 它可以被分配到在互联网上已知的应用和管理,他们不任何特殊的存储要求
- 该应用程序能够确定该文档的源
- 中的应用可确定它是否已经被篡改或改变的,因为它是生成
- 文档被加密,但是对混淆的目的,而不是因为它包含敏感信息
- 的应用程序可以读取XML
这听起来像一个典型的数字签名方案的内容。但是,我不希望源和收件人应用程序必须处理与管理公钥和私钥相关的后勤问题。
所以,我的问题是:有没有办法可靠地满足这些要求,而不使用数字证书?
如果您没有真正寻找安全性 - 特别是在伪造/变更方面,嵌入在应用程序中的秘密对称密钥足以满足更改检测和加密方面的要求。只需使用标准分组密码和MAC(Message Authentication Code (wikipedia))即可。当然,提取密钥并更改这些文档相对简单。
不幸的是,识别来源有点棘手。当您使用PKI时,身份会隐式出现,因为每个私钥隐含地标识了一个实体。由于您没有这样一个自然的标识符,您现在需要定义您自己的标识方案:可能是您在运行它的计算机上看到的第一个网络适配器的MAC地址,或者可能是您明确指定身份的更精细的方案个人应用程序或使用该应用程序的个人。一旦你有了某种形式的身份定义,在将加密/签名操作作为一个单独的XML字段加入之前,将这个标识字符串添加到文档的开始处会很简单。
感谢一些有用的指针,@ vhallac,正是我所需要的。经过反思,在我的情况下,识别消息来源并不重要。最重要的因素是能够检测原始文档是否已被更改。 – 2013-05-01 08:49:15
据我了解,源应用程序和收件人应用程序都会共享一个密钥来加密/解密文档。为了让恶意用户篡改文档而不会使其变得毫无意义,他们需要获得密钥,解密文档,修改文档并使用相同的密钥对其进行重新加密。那将是这种方法的主要弱点? – 2013-05-01 08:51:59
@PaulTaylor另一个问题是,如果对称密钥从某个应用程序泄漏,则必须替换/更新所有已对其中的密钥进行了硬编码的应用程序。对于PKI,这是不同的 - 在签名的情况下,您需要验证证书的有效性,这是非常自动化的过程,并且如果证书在签名方面被替换,则不需要替换所有验证器。 – 2013-05-01 13:27:38
对于身份验证,您需要有一些确保此身份验证的密钥方案。如果您不特别喜欢证书,则可选择使用OpenPGP密钥进行XML(XMLDSig支持OpenPGP密钥)。
[披露:我为余弦工作由ARX]
不过,我不希望在源和收件人的应用程序必须处理与管理公钥和私钥相关的后勤问题。
另一种方式来指挥人员是使用PKI,但通过集中最小化平常PKI后勤问题。
它可以自动生成已经在收件人的机器的信任链中的证书。 CoSign和其他人这样做。
由此产生的数字签名XML文件可以轻松验证身份/真实性和收件人的完整性,同时最大限度地减少签署XML文件的管理负担。
这也有帮助,谢谢@Larry K,我会研究它。但是,即使这在我正在考虑的场景中可能不可行,因为它需要足够的权限才能访问服务器证书存储。 – 2013-05-02 12:39:33
Re:访问服务器证书存储的足够权限 - 在签名机器上还是在收件人/验证机器上? – 2013-05-03 08:14:07
两者,但收件人特别。 – 2013-05-03 08:26:45
如果不面对密钥管理,就无法获得真正的安全性。您必须交换一些关键材料,无论是某种对称算法的预共享密钥,还是PKI系统中认证机构的公钥。 – erickson 2013-04-30 21:00:46