防止第三方操纵 XML 文件

Prevent third parties manipulation of an XML file

我今天的问题是,我必须保护 XML 我要从我的互联网网站分发的文件免受第三方操纵。
我会尽可能清楚,前提是我对 XML 没有任何经验。

首先让我澄清一下,这些 XML 基本上是出于对下载它们的 "clients" 的礼貌而分发的,它们将被阅读以便插入到他们的数据库中。它们基本上是 数据库的条目 。我无法避免这样做。 XML 文件 将以这种方式分发 ,我无法识别下载它们的 "clients"。

我不知道为什么我的 "clients" 应该接受来自其他来源的文件,但是 可能 有可能发生这种情况。如果是这样,这些其他来源也可以下载、读取、修改我的 XML(按原样是纯文本)的参数,并将修改后的文件转发给最终用户("client").

我以为我可以实现一个 Checksum 方法,但从长远来看,第三方也可以找到算法并提供一个修改后的文件,并提供正确的校验和。
有什么办法可以签署那些 XML 以便签名在掺假后丢失?

任何public-密钥加密算法都可以解决您的问题(这是他们可以提供的功能之一,真实性):

http://en.wikipedia.org/wiki/Public-key_cryptography

最重要的一点是客户端需要检查签名是否有效。他们要么手动执行,要么您可以提供一个程序让他们检查它是否有效。

步骤:

  • 选择您选择的 public 密钥加密算法(例如:RSA、PGP)
  • 生成 public 和私钥。
  • public 密钥将 public 仅放置在您的网站上,以便客户可以访问它(您可以使用您拥有的 XML 文件提供它)。您应该对私钥保密(这样才能保证其他人无法冒充您)。
  • 使用任何算法创建文件的哈希值(例如:SHA256)。
  • 使用私钥为此散列创建签名。这将保证哈希有效。
  • 任何客户端都可以使用相同的算法创建哈希,并使用您的 public 密钥检查签名是否有效(文件未被修改,是您签名的)。

例如,您可以使用 OpenSSL 来完成所有这些操作:

创建哈希(由您签名,由客户端验证):

openssl dgst -sha256 data.txt > hash 

签名:

openssl rsautl -sign -inkey privatekey.pem -keyform PEM -in hash > signature

验证签名:

openssl rsautl -verify -inkey publickey.pem -keyform PEM -in signature

如果文本数据的安全性至关重要,那么它必须通过可信通道进行带外传输。

您的客户可以根据需要从您的站点获取记录,并且您可以按照@gbuzogany.

的解释使用加密哈希对它们进行数字签名

然后,让用户定期连接到您的站点以检索他们可以用来从数据库中提取数据的个性化密钥。

这样,您可以控制访问密钥的生命周期,但数据可供任何客户免费使用。任何第三方数据都不会从您的主密钥生成散列,因此应用程序无法成功读取。

然后您的应用程序将忽略您使用获取的密钥验证的未经身份验证的记录。

参见: