使用加密和完整性验证传输XML的好方法是什么?

时间:2011-04-02 11:47:12

标签: xml api encryption soap xml-rpc

我们被要求开始开发一种标准化的方法来在项目中传输XML数据,最终将在整个特定行业中使用。一些要求包括:

  • XML必须允许部分/完整的数据加密
  • 必须能够验证XML的来源(服务器和客户端将彼此了解)
  • 必须支持在线和离线处理(批次)
  • 任何在线处理必须通过安全通道

'服务器'和'客户'将注册'相互之间,都会发起消息发送。

联盟提出的一些想法:

  • 大多数成员都不喜欢SOAP - 它经常会导致比解决更多的问题和开销
  • XML完整性和加密比传输
  • 更重要
  • 大多数成员更喜欢应用程序级别的加密/解密概念,而不仅仅是传输
  • SSL连接仅在线,实时,无法在Web应用程序级别强制执行。

我们已经在概念验证阶段使用了基本的XML模式,基本上包括:

  • 命令/响应类型
  • 变量/响应消息

我们目前处于高级阶段,我有兴趣了解目前存在哪些标准以及建议的方法。

2 个答案:

答案 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加密支持非常怀疑。我从一些开源库中徘徊(甚至在测试它们之前),因为我根本无法信任它们。不幸的是,我从“盈利”组织看到了更糟糕的情况。您需要一个具有良好声誉的加密专家来检查协议和实现 - 只是将某些东西放在一起并不够好。