当前位置:首页 > 芯闻号 > 充电吧
[导读]摘要:本文探讨 XML 数字签名规范,介绍其处理模型和某些功能。此外,还可以通过本文更加详细、深入地了解有关 WS-Security 规范如何实现其消息安全功能。简介数字签名十分重要,因为它可以提供端

摘要:本文探讨 XML 数字签名规范,介绍其处理模型和某些功能。此外,还可以通过本文更加详细、深入地了解有关 WS-Security 规范如何实现其消息安全功能。
简介
数字签名十分重要,因为它可以提供端到端的消息完整性保证,还可以提供有关消息发件人的验证信息。为了达到较好的效果,签名必须是应用程序数据的一部分,这样可以在创建消息时生成签名,并可以在最终使用和处理消息时对签名进行验证。

除消息保密性功能以外,SSL/TLS 还提供消息完整性保障,但这项功能仅在传送过程中有效。服务器(或更常见的对等接收方)接收消息后,必须“解除”SSL 保护才能处理消息。

更为有趣的是,SSL 只在通信端点之间起作用。如果在开发新的 Web 服务时使用传统的 HTTP 服务器(例如 IIS 或 Apache)作为网关,或者与具有 SSL 加速器的大型企业进行通信时,消息完整性可以一直得到保障,直到 SSL 连接终止。

可以拿传统信函进行类比说明。当将支票邮寄到电话公司时,通常会在支票(即“消息”)上签名,并将支票放入信封中以达到保密和邮寄的目的。收到消息后,电话公司会拆开信封,将信封扔在一边,然后处理支票。当然,也可以让消息成为信封的一部分,例如将付款贴在明信片上邮寄过去,但这样做显然很愚蠢。

XML 签名可以定义一系列 XML 元素,这些元素可以内嵌或以其他方式附加在任何 XML 文档中。这样,收件人可以验证收到的消息与发件人原本发送的消息是否相同。

XML 签名的语法和处理规范(本文中缩写为 XML DSIG)是由 W3C 和 IETF 联合制定的。自 2002 年 2 月以来,它一直是正式的 W3C 推荐规范,并得到了广泛的应用:.NET Framework 中的 System.Security.Cryptography.Xml 就应用了此规范。在 WS-Security 具有的验证、内容完整性和内容保密性三种功能当中,XML DSIG 可以提供完整性,并可用于进行发件人验证。

不涉及复杂数学的数字签名加密
在深入了解 XML DSIG 之前,需要了解一些基本加密算法。本节将探讨这些概念,但是不要害怕:并不会涉及复杂数学。

数字签名对某些内容提供完整性检查。如果原始内容的某个字节已经被修改(例如在价格上多加了个零,“2”改成了“4”,或者“否”改成了“是”等),那么签名验证将失败。下面是它的工作原理。

首先需要“散列”消息。加密散列使用的是任意字节流,并将其转换为某个固定长度的值,这个值称为“摘要”。摘要是一个单向过程:从计算角度来说,无法通过散列重新创建消息,也不可能找到可以产生相同摘要值的两封不同消息。

最常用的散列机制是 SHA1,即“安全散列算法”。此算法由美国政府创建,并在 1995 年作为标准发布。SHA1 可以处理 2**64 字节以内的任何消息,并生成一个 20 字节的结果。(这意味着将有 2**160 个可能的摘要值;比较起来,目前估计宇宙中的质子数目大约是 2**250。)

所以,如果我生成消息 M 并创建摘要(用 H(M) 代表“M 的散列”),您将收到 M 和 H(M),您可以创建自己的摘要 H'(M),如果两个摘要值匹配,表明您收到了我发送的消息。要保护 M 使其不被修改,我只需要保护 H(M),使它不被修改。

那该怎么做呢? 有两种常用的方法:第一种是将共享密钥混合在摘要中,即创建 H(S+M)。您收到消息后,可以使用自己的 S 副本来创建 H'(S+M)。新的摘要称为 HMAC,即“散列后的消息验证代码”(Hashed Messsage Authentication Code)。

在使用 HMAC 时,完整性保护的有效性取决于攻击者计算出 S 的能力。因此,S 应该不容易被猜出,并应该经常更改 S。符合以上要求的最好方法之一是使用 Kerberos。在 Kerberos 中,中央机构将在两个实体希望通信时分配包含临时会话密钥的“票”。此会话密钥将用作共享密钥。在要将签名发送给您时,我将得到一张票,以和你通信。我打开票中的属于我的那一部分来获得 S,然后将消息、消息的 HMAC 和票中您的那一部分发送给您。您打开票(使用原来通过 Kerberos 注册的密钥),获取 S 以及有关我身份的信息。您现在可以获得消息 M,生成自己的 H'(S+M),并查看它们是否匹配。如果匹配,表明您原封不动地收到了我的消息,并且 Kerberos 将通知您我是谁。

另外一个保护摘要的方法是使用公钥加密算法,例如 RSA。公钥加密算法中有两个密钥:一个是只有持有者知道的私钥,另一个是要与密钥持有者通信的任何人都知道的公钥。在公钥加密算法中,使用私钥加密的任何内容都可以使用公钥解密,反之亦然。

下面通过一个简单的示例来说明公钥加密算法的工作原理。在此示例中,我们将消息内容限制为从 a 到 z 的字母,并给这些字母指派 0 到 26 的值。要对消息进行加密,我们需要添加私钥的值;在本示例中,此值为 +4:

字母 h e l l o
数值 8 5 12 12 15
私钥 4 4 4 4 4
加密后的值 12 9 16 16 19

要对消息进行解密,我们需要添加公钥,值为 +22;如果结果超出了数字范围,就加上或减去 26,直到值有效。(换句话说,要对消息进行解密,我们需要添加公钥,并用结果对 26 取模。)

加密后的值 12 9 16 16 19
公钥 22 22 22 22 22
原始加密后的值 34 31 38 38 41
规范化的值 8 5 12 12 15
纯文本 h e l l o

RSA 的工作原理与此相同,只是使用求幂的方法而不是加法,此外,数字的位数比较多。

使用 RSA 生成一个摘要:H(M),并使用我的私钥进行加密,则 {H(M)}private-key 就是我的签名。您收到消息 M 后,可以生成摘要 H'(M),并使用我的公钥来对签名进行解密,就得到我生成的 H(M)。如果 H(M) 和 H'(M) 相同,表明两封消息 M 是相同的。而且,您会发现拥有私钥的人,也就是“我”,是消息的发件人。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

先进数字签名技术采用区块链兼容椭圆曲线密码加密算法,为高价值奢侈品在运输消费过程中保驾护航

关键字: 数字签名 NFC标签芯片

摘 要:文中详细介绍了无线传感网络面临的安全威胁和密钥管理模型,深入分析了无线传感网体系结构的特点,从密钥管理、身份认证和能耗角度考虑WSN的安全问题,在SPIN安全协议密钥预分配模型的基础上,引入数字签名身份认证技术,...

关键字: 无线传感网络 密钥管理 SPIN 数字签名

今天我们来放松下心情,不聊分布式,云原生,来聊一聊初学者接触的最多的 java web 基础。

关键字: Spring xml java

引言   IEC 61850 是国际电工委员会负责电力系统控制及其通信的相关标准的第57 技术委员会( IEC TC57)制定的关于变电站自动化系统结构和数据通信的一个国际标准, 目的是

关键字: xml iec 61850标准

在这篇文章中,我们将进一步讨论它是如何处理信息交换的。但是为了达到这一点,我们将从底部技术开始认识。那么,让我们首先讨论一下公钥加密(也称,非对称加密)。 对称加密: 在对称加密

关键字: 公钥加密 区块链 数字签名

人类总是能够把他们所说的话以书面形式呈现,所以文化需要一种方法来确定文档的起源。一旦能够在纸上交流,就有必要核实纸上所写的字句是否来自合法的发端人。 本文将解释人类如何提供文档

关键字: 加密货币 区块链 数字签名 比特币

现在我们经常在区块链中看到数字签名这一术语是非常常见的。在发送交易时,无论是比特币、Ethereum、Hyperledger Fabric还是任何其他平台,都在使用数字签名进行签名和验证。

关键字: 区块链 数字签名 比特币

明星的签名在粉丝的眼中视若无价,生意场上的签名被视为不可抵赖,而在区块链中,“数字签名”也是一个独一无二的数值。如今网络环境愈发宽泛,大量的信息通过网络传播留下痕迹,人工签名显然无法与电子数据相

关键字: 区块链 数字签名 数字货币

让我们先问自己一个基本的问题:ERP行业从一开始是如何盈利的?显然高水平的答案是:通过在企业内部销售自动化业务流程的解决方案。“内部”这个词很关键。不管是前台还是后台功能,都是关于内部业务流程的

关键字: 区块链 数字签名

早在2013年9月,一位匿名作者在bitcointalk.org网站上发表了一篇文章,建议可以通过联合签名来提高隐私性和可扩展性。多个输入可以共享一个签名,授权代币的集体移动。这样做,人们就有了

关键字: 区块链 数字签名 比特币
关闭
关闭