加密那点事

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

大家好,又见面了,我是你们的朋友全栈君。



加密那点事

 

加密是个神奇而古老的技术,被应用于战争、贸易等场景,而最近的炙手可热的比特币和区块链技术又让某些极为小众的计算机专业领域的加密技术进入大家视野,例如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/

 

转载于:https://www.cnblogs.com/xguo/p/10503860.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136467.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpstom2021激活码[在线序列号]

    phpstom2021激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    46
  • 9.电阻线性电压转换电路[通俗易懂]

    9.电阻线性电压转换电路[通俗易懂]电阻线性电压转换电路在电子设计中,电阻值的测量是非常重要的。比如在薄膜压力传感器中需要对电阻值进行测量,利用PT100测温度的时候需要测量其电阻。1.电阻分压测量方法在测量电阻的时候通常都是转换为电压测量,串联一个已知电阻,测量两个电阻之间的电压,利用分压公式得到电阻值。显然这个电路中,输出电压为:式中,为串联分压的电阻,为参考电压。令为10K,为5V,利用MATLAB画出U-R曲线,如图:从曲线可以看出,U与R不成线性关系,计算复杂。并且R的测量精度在不同值

    2022年5月8日
    87
  • 搭建云计算平台(云计算管理平台搭建)

    搭建云计算平台Openstack是一个开源项目。任何公司或个人都可以构建自己的云计算环境,这已经打破了亚马逊等少数公司的垄断,意义重大。简介:如果你是开源社区的CTO或代码贡献者,你一定听说过openstack。Openstack是由网络主机服务提供商Rackspace和NASA联合发起的一个开源项目。其目的是开发一套开源软件标准。任何公司或个人都可以建立自己的云计算环境(IAAs),这打破了亚…

    2022年4月18日
    218
  • memory.h_MemoryMappedFile

    memory.h_MemoryMappedFile(转载)C#使用MemoryStream类读写内存MemoryStream和BufferedStream都派生自基类Stream,因此它们有很多共同的属性和方法,但是每一个类都有自己独特的用法。这两个类都是实现对内存进行数据读写的功能,而不是对持久性存储器进行读写。读写内存-MemoryStream类MemoryStream类用于向内存而不是磁盘读写数据。MemoryStr…

    2025年7月29日
    6
  • docker导出镜像命令_docker批量导出镜像

    docker导出镜像命令_docker批量导出镜像docker导出镜像docker导出镜像使用dockersave命令,可以使用dockersave–help查看用法为dcokersave[镜像名]:[TAG]-o[保存后文件名]-o,–output#输出为文件,后跟保存后的文件名[TAG]可以通过dockerimages查看示例…

    2025年9月23日
    8
  • jmeter-header获取ssionid

    jmeter-header获取ssionid

    2021年9月18日
    76

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号