我们被要求开始开发一种标准化的方法来在项目中传输XML数据,最终将在整个特定行业中使用。一些要求包括:
'服务器'和'客户'将注册'相互之间,都会发起消息发送。
联盟提出的一些想法:
我们已经在概念验证阶段使用了基本的XML模式,基本上包括:
我们目前处于高级阶段,我有兴趣了解目前存在哪些标准以及建议的方法。
答案 0 :(得分:0)
我不知道我是否能够根据所提供的信息充分回答您的问题,但您要求的是公钥/信任网基础设施。
XML必须允许部分/完整的数据加密
如何实现这一点以及使用哪种语言。大多数填充对称密码就足够了,也许如果你把它作为base64嵌入你的xml中就像是<编码>,这应该有用。
必须能够验证XML的来源(服务器和客户端将彼此了解)
HMACs。简单和简单的HMAC,通过Diffie-Hellman系统进行签名和认证密钥交换。
但老实说,标准不存在你想要的那种方式。您可以将最佳实践和加密系统放在一起。虽然从不建议您发明自己的系统。它会破裂。您最好的方法是使用SSL / TLS和x509基础架构。
答案 1 :(得分:0)
如果您要进行部分加密,那么PKCS#7 / CMS很快就会变成一块垃圾。 PGP可能对此也不是很有用,所以这会留下你的XML签名和放大器。 XML加密标准。
对于签名生成/验证,使用XML数字签名是合乎逻辑的。但是,您需要非常清楚地指定要签署的内容以及您要对验证做出哪些选择。一个好的验证清楚地验证了规范化方法,散列方法等。除此之外,您必须确保您签署的内容是您从XML 中检索的内容。验证一个部分非常容易,并且发现您正在使用完全不同的XML部分。有时软件是易受攻击的,因为攻击者可以简单地从数据中剥离签名!
如果你总是(总是)在解密之前验证你的XML,你可以简单地使用XML加密和AES-CBC。如果不这样做,则应使用GCM mode。由于它目前是一个工作草案,它可能需要您在当前软件中创建一些更改。如果没有验证或具有完整性保护的密码,您将容易受到填充oracle攻击。
当然,对于签名生成和验证以及加密/解密,您应该使用x509基础结构。您可以设置自己的CA软件,例如使用EJBCA,但你应该获得专业知识(购买支持?)。证书和密钥管理应该是主要关注点之一。或者,您可以使用标准SSL / TLS证书。这样您也可以设置启用SSL的服务器。如果您选择SSL / TLS(强烈推荐),请使用客户端身份验证和一小组安全密码套件。
最后,您应该真正限制可用选项的数量,同时保持选项对未来的更改开放。如果你打开太多选项,那么测试就会变得非常困难,而攻击者只会选择最难攻击的选项。如果感兴趣性能,请选择具有众所周知的命名曲线的X509证书的ECC,但要注意一些合作伙伴无法找到合适的库的复杂性和可能性。
您可以从信誉良好的供应商那里购买所有这些,但我对XML加密支持非常怀疑。我从一些开源库中徘徊(甚至在测试它们之前),因为我根本无法信任它们。不幸的是,我从“盈利”组织看到了更糟糕的情况。您需要一个具有良好声誉的加密专家来检查协议和实现 - 只是将某些东西放在一起并不够好。