【文章】应用密码学: 加密数字签名 重发攻击

admin 2021年4月3日18:55:28评论39 views字数 2784阅读9分16秒阅读模式

2.7 带加密的数字签名

    通过把公钥密码和数字签名结合起来,我们能够产生一个协议,可把数字签名的真实性和加密的安全性合起来。想象你妈妈写的一封信:签名提供了原作者的证明,而信封提供了秘密性 。

    (1)Ailce用她的私钥对信息签名。

SA(M).

    (2)Alice用Bob的公钥对签名的信息加密,然后送给Bob。

EB(SA(M)).

    (3)Bob用他的私钥解密。

DB(EB(SA(M)))=SA(M).

    (4)Bob用Alice的公钥验证并且恢复出信息。

VA(SA(M))=M.

    加密前签名是很自然的。当Alice写一封信,她在信中签名,然后把信装入信封中。如果她把没签名的信放入信封,然后在信封上签名,那么Bob可能会担心是否这封信被替换了。如果Bob把Alice的信和信封给Carol看,Carol可能因信没装对信封而控告Bob说谎。

    在电子通信中也是这样,加密前签名是一种谨慎的习惯做法[48]。这样做不仅是更安全(敌人不可能从加密信息中把签名移走,然后加上他自己的签名)。而且还有法律的考虑:当他附加他的签名时,如果签名者不能见到被签名的文本,那么签名没有多少法律强制作用[1312]。有一些针对RSA签名技术的密码分析攻击(见19.3节)。

    Alice没有理由必须把同一个公钥/私钥密钥对用作加密和签名。她可以有两个密钥对:一个用作加密,另一个用作解密。分开使用有它的好处:她能够把她的加密密钥交给警察而不泄露她的签名,一个密钥被托管(见4.13)而不会影响到其他密钥,并且密钥能够有不同的长度,能够在不同的时间终止使用。

    当然,这个协议应该用时间标记来阻止信息的重复使用。时间标记也能阻止其他潜在的危险,例如下面描述的这种情形。

    作为收据的重发信息

    我们来考虑这个协议附带确认信息的实现情形:每当Bob接收到信息,他再把它传送回发方作为接收确认。

    (1)Alice用她的私钥对信息签名,再用Bob的公钥加密,然后传给Bob。

EB(SA(M)).

    (2)Bob用他的私钥对信息解密,并用Alice的公钥验证签名,由此验证确是Alice对信息签名,并恢复出信息。

VA(DB(EB(SA(M))))=M.

    (3)Bob用他的私钥对信息签名,用Alice的公钥加密,再把它送回给Alice。

EA(SA(M)).

    (4)Alice用她的私钥对信息解密,并用Bob的公钥对验证Bob的签名。如果接收的信息与她传给Bob的相同,她就知道Bob准确地接收到她所发送的信息。

    如果同一算法既用作加密又用作数字签名,就有可能受到攻击[305]。在这些情况中,数字签名操作是加密操作的逆过程:VX=EX,并且SX=DX

    假设Mallory是持有自己公钥和私钥的系统合法用户。让我们看看他怎么读Bob的邮件。首先他将Alice在(1)中送给Bob的信息记录下来,在以后的某个时间,他将那个信息送给Bob,声称信息是从Mallory处来的。Bob认为是从Mallory来的合法信息,于是就用私钥解密,然后通过用Mallory的公钥解密来验证Mallory的签名,那么得到的信息纯粹是乱七八糟的信息:

EM(DB(EB(DA(M))))=EM(DA(M)).

    即使这样,Bob继续执行协议,并且将收据发给Mallory。

EM(DB(EM(DA(M)))).

    现在Mallory所要做的就是用他的私钥对信息解密,用Bob的公钥加密,再用Mallory自己的私钥解密,并用Alice的公钥加密。哇!Mallory就获得了所要的信息M。

    认为Bob会自动回送给Mallory一个收据不是不合理的。例如:这个协议可能嵌入在通信软件中,并且在接收后自动发送收据。收到乱七八糟的东西也送出确认收据会导致不安全性。如果在发送收据前仔细地检查信息是否能理解,就能避免这个安全问题。

    还有一种更强的攻击,就是允许Mallory送给Bob一个与窃听的信息不同的信息。不要对从其他人那里来的信息随便签名并将结果交给其他人。

    阻止重发攻击

    由于加密运算与签名/验证运算相同,同时解密运算又与签名运算相同,因此,上述攻击才凑效。安全的协议应该是加密和数字签名操作稍微不同,每次操作使用不同的密钥能做到这一点,每次操作使用不同的算法也能做到;采用时间标记也能做到,它使得输入的信息和输出信息不同。用单向Hash函数的数字签名也能解决这个问题(参看2.6节);;

    一般说来,下面这个协议是非常安全的,它使用的是公开密钥算法:

    (1)Alice对消息签名。

    (2)Alice用Bob的公钥对消息和签名加密(采用和签名算法不同的加密算法),然后将它传送给Bob。

    (3)Bob用他的私钥对消息解密。

    (4)Bob验证Alice的签名。

    对公钥密码的攻击

    在所有公钥密码协议中,回避了Alice怎么得到Bob的公钥这件事。3.1节将更详细地讨论,但在这儿值得提及。

    得到某人的公钥的最容易的方法是从某个地方的安全数据库中得到。这个数据库必须是公开的,以便任何人都可得到其他人的公钥。数字库也必须阻止Trent以外的其他人写入数据;否则Mallory可能用他选取的任意一个公钥代替Bob的,他那样做后,Bob就不能解读发给他的信息,但Mallory却能读。

    即使公钥存贮在安全数据库中,Mallory仍能在传送期间用另外的公钥来代替。为了防止这个问题,Trent可用他的私钥对每一公钥进行签名。当用这种方式时,Trent常被称为密钥鉴证机关密钥分配中心(KDC。在实际的实现中,KDC对由用户名、公钥和其他用户的重要信息组成的一组信息进行签名。被签名的这组信息存贮在KDC数据库中。当Alice得到Bob的密钥时,她验证KDC的签名以使自己确信密钥的有效性。

    在最后的分析中,对Mallory来说并不是不可能,只不过更困难了:Alice仍将KDC的公钥存贮在某个地方,Mallory只得用自己的公钥代替那个密钥,破坏数据库,然后用自己的密钥代替有效密钥(好像他就是KDC一样,用自己的私钥对所有密钥签名),再进行运算,如果Mallory要制造更多的麻烦,他甚至连文件签名都可以伪造。密钥交换将在3.1节详细讨论

文章来源于lcx.cc:【文章】应用密码学: 加密数字签名 重发攻击

相关推荐: 【视频】黑客远程入侵汽车解锁车门,汽车电子钥匙信号重放,重放钥匙扣信号

视频: replay key fobs signal with hackrf for fun 先要在一个封闭的环境下捕获钥匙发射的.在使用gnuradio-companion搭建AM解调,然后输出到WX GUI Scope Sink 但是捕获一次就只能使用一次…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年4月3日18:55:28
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【文章】应用密码学: 加密数字签名 重发攻击https://cn-sec.com/archives/319234.html

发表评论

匿名网友 填写信息