加密那点事

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Windows net start mysql 启动MySQL服务报错 发生系统错误 5 解决方法

    Windows net start mysql 启动MySQL服务报错 发生系统错误 5 解决方法netstartmysql启动MySQL服务报错发生系统错误5解决方法

  • C51单片机实验——定时器实验

    C51单片机实验——定时器实验实验名称:单片机定时器实验实验环境:普中实验系统;KeilμVision4软件;实验目的:(1)掌握单片机定时器的原理和控制方法。(2)通过编程利用定时器实现定时功能,并利用该定时功能实现时钟分、秒的功能。硬件连线:P2^1口连接led1P2^3口连接led3P2^5口连接led5P2^7口连接led7实验主要代码:/********************************************************************************

  • KETTLE教程:转换

    KETTLE教程:转换所谓的转换,可以理解为将数据开中的数据转换为excel表格,txt文档,.bat等格式输出;将excel表格,txt文档,.bat等格式转换成数据库中表格的数据。kettle的转换功能十分便捷,大大减少了我们的工作量。下面开始介绍如何使用kettle进行转换:以文本转换为mysql数据表为例首先,点击文件:在文件中新建→转换然后,点击转换下的DB转换:选择要转换成什么数据…

  • SQL 模糊查询(like)「建议收藏」

    SQL 模糊查询(like)「建议收藏」在进行数据库查询时,有完整查询和模糊查询之分。SQL模糊查询,使用like比较字,加上SQL里的通配符,请参考以下:1、LIKE’Mc%’将搜索以字母Mc开头的所有字符串(如McBadden)。2、LIKE’%inger’将搜索以字母inger结尾的所有字符串(如Ringer、Stringer)。3、LIKE’%en%’将搜索在任何位置包含字母en的所

  • android 分区丢失,分区数据恢复

    android 分区丢失,分区数据恢复作者:SelenaKomez5月23,2018上更新总结:硬盘分区被删除或丢失?如何取回已删除或丢失的分区?数据恢复软件将帮助您恢复数据,即使在Windows或Mac计算机上删除或丢失分区。执行分区数据恢复不需要任何技术技能。硬盘分为一个或多个逻辑分区,以便更好地进行资源管理,并根据用户要求将数据分布在不同的位置。这些逻辑分区称为分区,并给出了某些独立硬盘协调工作的错觉。但是,计算机分…

  • django 验证码_django获取当前登录用户

    django 验证码_django获取当前登录用户验证和授权概述Django有一个内置的授权系统。他用来处理用户、分组、权限以及基于cookie的会话系统。Django的授权系统包括验证和授权两个部分。验证是验证这个用户是否是他声称的人(比如用户名

发表回复

您的电子邮箱地址不会被公开。

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