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

问题描述:

我们被要求开始开发一个标准化的方法来在一个项目中传输XML数据,最终将在整个特定行业中使用。一些要求包括:用加密和完整性验证传输XML的好方法是什么?

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

的“服务器”和“客户”将互相“注册”,并都将开始我的发送ssages。

已经由财团提出的一些想法:

  • SOAP不被大多数成员喜欢 - 这往往会导致更多的问题和开销比它解决的
  • 的XML完整性和加密更重要比运输大多数成员更喜欢应用级别的加密/解密概念,而不仅仅是运输
  • SSL连接将仅在线实时,并且不能在Web应用程序级别实施。

我们已经有已经在证明了概念阶段一直使用的基本XML架构,基本上包括:

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

我们现在处于一个高阶阶段,我很想知道目前存在哪些标准以及哪些方法会提示。

+0

如果你还没有看过Schneier的“应用密码学”,祝你好运! – 2011-06-07 20:37:15

如果您打算进行部分加密,那么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加密支持持怀疑态度。我从一些开源库中走开(甚至在测试它们之前),因为我根本无法足够信任它们。不幸的是,我从“赢利”组织看到了更糟糕的情况。你需要一个具有良好声誉的密码专家来检查协议和实现 - 只是一起黑客攻击并不够好。

我不知道我是否可以用提供的信息充分回答您的问题,但您要求的是公钥/信任基础架构Web。

XML必须允许数据

如何实现这一点,并在其中语言是你的事情的部分/完全加密。大多数情况下,填充对称密码就足够了,也许如果你在xml中嵌入base64作为像<编码的那样,那应该可以工作。

必须能够验证XML的源(服务器和客户端将被称为彼此)

HMACs。简单和简单的HMAC,通过Diffie-Hellman系统进行签名和认证密钥交换。

但老实说,标准不存在你想要的方式。有最佳实践和加密系统可以放在一起。尽管它是从来没有建议发明你自己的系统。它会中断。您最好的选择是使用SSL/TLS和x509基础架构。