加密那点事


 

加密是个神奇而古老的技术,被应用于战争、贸易等场景,而最近的炙手可热的比特币和区块链技术又让某些极为小众的计算机专业领域的加密技术进入大家视野,例如HASH、非对称加密算法RSA这些关键词。

数据加密在区块链技术实现里面起到至关重要的作用,可以说没有加密技术对交易信息安全的保证,就没有区块链被广泛使用的可能性,而用到的具体的加密技术就是诞生与19世纪70年代的非对称加密算法:RSA,由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出,RSA是他们三人姓氏开头字母的拼写
(发现西方人很喜欢用名字命名其工作成果,例如笛卡尔、牛顿、冯诺依曼架构等多如牛毛,而国人更愿意用概念和功能来命名)。

接下来咱们聊聊什么是加密,如何加密和发展过程。

首先,大概大家都知道为什么要加密,那我们来梳理总结一下,通常我们希望我们的信息安全,需要做到哪几点?

  1. 信息传输过程中不会被泄露(被人截取后破解)
  2. 信息在传输过程中不被篡改(例如雍正十四改成第四)
  3. 信息归属身份证明(你真的是你,这个信息真的是来自组织的吗?),以及防抵赖

总结完以后,细想一下是不是发现,单靠一个加密是无法同时解决以上几个问题呢?
是的,加密其实只能解决第一项,防泄露,而要想同时解决以上三个问题,就得把PKI(Public Key Infrastructure,公开密钥基础设施规范)抬出来一起说道说道了。

我们知道了要保证信息安全和信息可信,就要同时解决上面提到的三个问题,那就来看看从古至今,是如何通过技术的发展一步步做到的。

1,如何防泄漏?

答案是加密!

对称加密

算法+原文+秘钥=密文,同样,正确的使用 算法+密文+秘钥 就能够得到原文。

如图:

 

 

这就是传说中的 对称加密,其实很好理解,加密、解密用的同一套密钥就是对称加密法。
解密是个逆向过程,也需要用到同样的算法和密文,所以要求双方需都要做好算法和秘钥的保护措施,被别人知道其中之一,密文就可能被破解。

所以说,我们现在明白战争时期的那个密码本是多么的重要,为了它不惜牺牲几条姓名,但其实你明白它的重要性以后,就可以理解了,万一泄露了密码本,敌人就可能通过截取的密文和密码本推算出原文,还记得电影《风声》中的剧情吗,是不是很残酷?
因此,对称加密要求双方都要保护好这个密钥,绝对不能泄露,真的是鸭梨山大呀,所以多方信息传输的成本和代价非常高。

而对称加密法比较典型的算法有DES(Data Encryption Standard[数据加密标准])。

非对称加密

整个过程是:算法+原文+公钥/私钥=密文、算法+密文+公钥/私钥=原文,如图:

 

 

(注意,公钥加密,私钥解密;反之,私钥加密,公钥解密)
前面说到大家保护密码本(密钥)常常会付出了血的代价,即使在和平年代也是非常不安全的,因此,一些专家就想出了更为精妙的想法,那就是所谓的非对称加密法,(一些事实被抽象和包装出一些概念以后往往会增加理解的成本甚至误导),非对称指的是俩头用的密钥不对称,而不是其他。

所以,为了降低保存密钥的负担,发明了非对称加密,算法是公开的,有俩把钥匙,一把钥匙公开,另一把私有,所以称为非对称,通常一方只要把私钥保存好基本上就万事大吉了。

详细的工作流程:

 

 

 

这个过程是,对方要想给你写加密信,只需要用你的公钥把原文加密发出去,不怕别人截取,因为他没有私钥,只有你能解开,反之也是一样的,只要对方把自己的私钥保护好,信息就不会泄露和破解,相对于对称加密的双方都要保护密钥安全多了。
另外,这里的公钥和私钥理论上通常没有明确定义之间的不同,只是在使用上做了人为的区分,本身是相通的,私钥加密也可以用公钥解开,有一些特殊场景做了区别处理的对待,这里不做讨论。

2,如何防篡改(十四改成第四)

答案是签名(摘要+密钥加密)

原文 -> HASH ->密钥加密 = 签名

你写了一篇文章,如何确保它在传播过程中不被别人修改呢?

或者在比特币中的应用,“小花借了小明5元”,万一被小明改成50元?

办法是,我们可以对这句话或文章进行签名,就是要在你说的那句话上加上你的唯一标记。
签名的内容其实也是一个加密后的结果,简单的来说就是非对称加密的另一种用途,
过程是,一方用私钥和文章加密生成一个东西叫签名,然后把这个签名和文章一同发出去,
收到的一方用公钥解开你发过来的签名,得到原文,然后和发过来的文章内容进行比对,看是否相同,就知道文章有没有被篡改了。

通常分为以下的三个步骤:

  1. 为了使签名的内容不至于太大,往往会从原文章中提取部分关键内容,作为签名的原文,一般是文章的HASH值,得到一个摘要
  2. 用自己的私钥对摘要加密(当然你也可以省掉第一个步骤,直接在原文上加密,只是内容太大,不方便传输和校验)得到签名
  3. 把签名(signature)附在原文上一同发出去。

例如下图,上面是原文,下面是签名:

 

 

对方收到以后,也是三个步骤校验:

  1. 对文本进行HASH计算,得到摘要;
  2. 用你的公钥解开这个signature(如果别人改了这个signature,用你的公钥就无法解开了),得到加密前的摘要内容;
  3. 比对俩个摘要的内容,就真相大白了。

这是非对称加密的另一个使用场景,防篡改,而非对称法的典型实现算法就是本文开头说到的RSA加密算法。

3,身份证明(如何证明我收到的是对的那个人或机构发给我的呢?)

答案是找个靠谱的机构做背书

 

 

说白了,不管什么加密方式,解决都是信息本身的安全问题,单独并不能解决信任问题,必须要有独立第三方出来提供证据。
例如上图,是一个基于RSA非对称加密的Https网站和用户交互流程图,整个过程核心任务是交换加密协议,建立安全信道,但对方是谁,彼此是无法得知的,因为信任关系不是个技术问题,这时候就需要一个权威机构出来说话了,辨别真假美猴王!

这个机构通常是"证书中心"(certificate authority,简称CA),例如中国金融认证中心(CFCA),给Https网站颁发证书,在你拿到对方公钥的时候,里面会包含CA发行机构的标识,你可以对其进行校验,当然,浏览通常会做这个校验,没有通过可能是李鬼而不是你要找的李逵。

如果是个网站,会与本地证书管理器安装的证书列表进行比对,查看是否包含在内,如果没有出现,浏览器会告诉你,这个网站十有八九不可靠。

最后

我们开头提到的PKI,就是以上三者的完整结合,就是PKI公开密钥基础设施规范的基本内容,通过PKI来保证信息传输的保密性、完整性、身份的真实性和抗抵赖。

前人栽树,后人乘凉,我们在享受各种技术带来的便利的同时,也不要忘记曾经为之努力过的前辈们,感谢他们,让我们生活在信息相对安全的环境下,放心的在网上交换重要的信息,甚至金钱交易网络支付等!

参考

  1. https://www.ubisecure.com/iot/cryptographic-identities-for-devices/
  2. http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
  3. https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/
 
posted @ 2019-03-10 00:31  土豆的奥特之父  阅读(413)  评论(0编辑  收藏  举报