简单理解非对称加密算法

最初理解非对称加密算法是一件很难的事,可能需要看一些晦涩难懂的读物看很长时间才能理解得了,所以今天我打算用一个简单的例子来解释非对称加密算法,希望可以帮助大家快速的理解这个概念。首先,我们设想这样一个场景:

窝国的两个部队,相隔一段距离,中间都被敌人占领,这意味着他们之间通过信使传递的所有信息,都是可能被敌人监控(阅读)的。

那么如何在事先没有沟通的情况下安全地交换信息呢?

对于经典的对称加密算法, 这是很难做到的。因为对称加密只需要一个密钥,两支部队都通过这一个密钥进行加密解密。而两个部队事先是没有沟通过的,没有对密钥达成共识。而且他们现在也不可能再协商密钥,因为现在他们所有的通信都是被监控的了,一旦他们在这种环境下协商密钥,那么敌人也会知道密钥,便也能解密他们之后传送的加密信息。

所以,我们可能需要的是一种针对加密和解密,使用不同密钥的加密算法。这就是非对称加密的含义:部队A可以生成一对密钥,分别用于加密(公钥)和解密(私钥), 然后将公钥发送给部队B。B便可以使用这份密钥对信息进行加密,再将加密信息发送回A了。这里的公钥,即使被敌人获取也没有关系,因为这里的公钥,仅仅能够用于加密数据,而唯一可以解密数据的私钥,自始自终都在A手中,从未公布出去。这样一来,A和B便可以在受监控的情况下,没有实现沟通,便能安全地交换信息了。

让我们进一步设想,如果敌人可以篡改A和B之间发送的信息呢?

例如当A发送公钥给B的时候,敌人将公钥拦截下来,自己生成一堆公私钥,将自己的公钥发送给B。相当于敌人冒充了B与A建立联系,建立了两个加密通道,分别是从A到敌人,和从敌人到B。这样以来,敌人便可以在两个通道之间,监控到A和B通信的明文了,同时敌人还可以任意篡改A和B之间发送的信息,即使它们已经被加密——这就是经典的“中间人攻击”。应该说如果A和B没有事先沟通过,而且没有一个可信的第三方,那么这个问题几乎是无解的。

那么现在我们提出第二个问题:该如何在敌人可以篡改信息的前提下,保证信息的正确性(即是无法被敌人冒充)呢?

下面我们要使用的就是传说中的“数字签名”,数字签名恰好是公钥加密的逆运算。即将加密密钥保密,而将解密密钥公布出去,使得只有自己可以加密信息,而任何人都可以解密信息。

要实现数字签名,只需自己将要签名的信息(通常是一个散列摘要值)加密并公布即可,其他人可以认为,凡是用你公布出去的解密密钥能解密的信息,都是你自己加密(签名)过的。这样就可以识别一段信息,是否真正地由其宣传的发信人所发送,而不是曾经被中间人所篡改。

在前面的情况下,我们还需要考虑的是“重放”攻击,即中间人虽然不知道A和B传输的实际内容,但却可以将其中的一份信息复制两遍甚至更多,使得解密的信息不正常,达到干扰的目的。通常应对重放攻击只需在加密信息中约定一个递增的编号,或者时间戳即可。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值