您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

软件中的加密算法

时间:2019-11-11 09:34:43  来源:  作者:
软件中的加密算法

 

这个虽然是闲扯淡的,但是看的时候请抓牢:

  • 我们一切以业务方案为目的,
  • 一些关键名词和概念还是很认真。

加密签名

一个故事

这是从别人那边听来的故事,作为安全知识的入门非常有意义。

  1. 一个国王英年早逝,留下年幼的王子,国王的弟弟就做了摄政王。
  2. 王子快18岁的时候,他叔叔派他做信使,给另外一个国王送信,还让侍卫长跟着。
  3. 王子晚上趁着侍卫长睡着了,偷偷打开信件,看见里面的内容是: 请您杀了这个信使
  4. 王子于是把信件修改了一下:请把您的女儿嫁给信使
  5. 王子然后做了那个国家的驸马。过几年后,岳父也死了,他就做了国王,带兵杀回去报仇。

叔叔的反思和改进

暂时不讨论善恶,我们站在叔叔的立场上,看他哪些事情没做好?

  • 数据的隐秘:他的信件内容被别人看到了。
  • 数据的篡改:他的邮件被人冒充了。

所以从技术层面上,我们可以给他一个有效建议,跟别的国王约定:

  • 针对第一个情况:他写的信,每个字母向后偏移10个位置——数据被加密了
  • 针对第二个情况:商量了一个算式,每个信件,把全部字母的数字加起来,通过这个算式算出来一个新的数字,写在信件最后,这样除了他俩,没谁能伪造信——数据被签名了

PKI里的加密和签名

在事实上,信息传输的物理通道是不安全的,【信使】作为信息的传递人,可以轻易的偷窥别人的信息,甚至“代表”别人发言。老外的思路是认可这个现状,然后从数理逻辑上来应对这个问题。

Public Key Infrastructure,公开密钥体系,就是针对这个情况的。 
这个体系的特点是,算法思路和实现都可以是公开的,只要保证Key的安全就可以。

这个章节里面,我们只要讲到加密和签名就可以了。

加密

加密根据密钥可以粗略的分俩类

对称加密

对称加密,就是加密和解密的过程里面,用的key都是一个——我们称为SecretKey。

  • AES:一般记得这个就可以了,因为现在好像也就它是最好用的
  • DES、3Des:我经常在代码里面能看见的。
  • 其它

业务跟进:在前面我们给王叔的建议,很明显是一个比较土的对称加密方案。

非对称加密

非对称加密,加密和解密的密钥不同,用于加密的称为公钥(PublicKey),用于解密的称为私钥(PrivateKey)。

业务跟进:我们的建议,国王们各自有一套公钥+私钥,私钥自己保留好,公钥发布给大家。谁想给某人写信了,就用这个人的公钥加密,信件半路上被人截胡了,也无法解密内容。

  • RSA:最出名的,在以前非对称加密就是区分为RSA和其它,
  • ECC:当前最牛的规范,rsa也变成其它了
  • 其它:

对称和非对称的优劣对比

  • 对称加密在技术上有优势,同样的安全级别下,加密解密的速度快很多
  • 对称加密同时也兼具签名功能
  • 但是在多用户业务场景,有无法解决的问题:
  • 俩个人玩,一套SecretKey就够了
  • 三个人玩,3套
  • 四个人玩,12套,
  • …… N的组合数量。
  • 结论:后面讨论各自适合场景。

签名和验签

业务跟进:我们的建议,国王们各自有一套自己的公钥+私钥,私钥自己保留好,公钥发布给大家。谁想发邮件,用私钥对内容进行“签名”,签名的结果写在信封上;收到邮件的人,用【发件人的公钥】+【内容】+【签名】进行验签,以确保这个邮件就是那个国王发的

JAVA伪码表示如下

  • 签名:byte[] sign(byte[] content, PrivateKey prvKey)
  • 验签:boolean verify(byte[] result, byte[] content, PublicKey pubKey)

小结

其实对称加密可以忽略,我们就记得非对称加密和签名比较重要

  • 私钥放在自己手里,用来解密和签名,这俩个事情都明显是个人的私密行为,因此私钥
  • 公钥发布出去,用来加密和验签,这俩个事情明显是个人对外的公开行为,因此公钥

我们的“完美”方案

到这里,我们就可以给王叔和其他的国王们一个比较完美的RSA方案

  • 每个国王自己做一套公钥私钥
  • 把自己的私钥保存好,把公钥送给其他的每个国王,
  • 同时也保存好其他国王送过来的公钥,名称不能搞乱了,更不能让别人替换了
  • 发邮件的过程如下:
  • 把邮件的正文用自己的私钥签名,附在邮件最后
  • 用接受者的公钥加密邮件的正文和签名
  • 把信送过去
  • 收邮件的过程如下:
  • 用自己的私钥解密,获得邮件正文和签名
  • 拿着发送者的公钥,对正文和签名进行验签

把自己的公钥送到别人那边,要包装一下,那个就是公证书 
自己的私钥也要好好的包装一下,这个就是私证书

证书和证书链

证书的烦恼

假设国王们已经建立了证书体系,这个时候,某个国王英年早逝,他的弟弟扶持?/挟持?年幼的侄子摄政。很不幸的是,暴毙的国王把象征权力的个人私证书和其他国王的公证书都付之一炬。

于是摄政王需要自己做一套公钥私钥,然后派信使去见每个国王,送去自己的公钥,拿回来对方的公钥。这是一个痛苦的折磨,对于所有涉及到的人:

  • 对方国王怎么相信你? 
    突然证书说换就换,我是不是要跑一趟去求证一下?
  • 信使会不会有问题? 
    信使是很乐意用自己的公证书来代表国王的公证书。他做俩个证书,左手的代表国王A把公证书给国王B,右手的代表国王B把公证书给国王A,用不着第三个代表证书,他就可以作为中间人来偷看+篡改来回的信件了。

就实际情况来说,最安全的方式是,其他的国王亲自过去,验证新王,交换证书。

但是很明显这个是一个成本很巨大的工作,而且很危险。说不定回家的半路上,哪个国王头疼脑热的,也英年早逝了,然后大家又要重新跑一趟,包括那个宝座还没坐热的摄政王。

注意:即使有了internet,这样的场景下证书交换是不能通过网络的,因为信任没能解决,只能亲自跑。

证书的本质就是信任

好在国王们都相信一个人——代表了神的意志的教皇。教皇说:你们也别这样跑,来回折腾。我给你们的公证书上面加上主的签名——当然也就是我代表主的签名,以后大家就只要如此如此:

  • 保存一个公证书,那就是主的证书,只要相信他就可以了,这个是一切证书之根;
  • 你们所有人的公证书,都要经过主的签名
  • 你发给别人带有签名的信件的时候,也要把你的公证书带上——记得哦,是主给你签名的公证书
  • 当别人收到你的信件、签名、公证书时候,
  • 他首先要根据主留给他的公证书来验签你的公证书是不是经过主认证的,
  • 再用你的证书来验证信件的签名

更完美的方案

用一个证书给别的证书做签名背书,产生了证书链,就解决了证书的 N*N 问题。

BTW:当某个国王派出军队出去征服新世界的时候,教皇一般也会派出一个大主教,授予他一个特殊的证书,这个证书是由教皇的证书签名,但是它还可以给别的证书签名。 
——这个就是多级授权。

其它

摘要MessageDigest不是加密

也不是所谓的“单向加密”,就是消息摘要

mac

message authentication code,一般不用。



Tags:加密算法   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
说起区块链,似乎大家都懂一点,再往细里一问,似乎又都不懂了。比如,你问一个人:为什么要挖矿,挖的到底是啥。怕是没几个明白人。本文就是要给你讲明白!前言人们一说起区块链,就常常说...【详细内容】
2021-07-13  Tags: 加密算法  点击:(224)  评论:(0)  加入收藏
来源:麦叔编程作者:kevin。JS逆向是爬虫的难点,是爬虫路上的拦路虎。所谓逆向就是破解网站使用的JS加密算法,拆解相关的参数。然后就可以登堂入室了。 本文总结了JS中最常用的加...【详细内容】
2021-03-04  Tags: 加密算法  点击:(195)  评论:(0)  加入收藏
前几天我发表一片关于RSA的加密算法,很多人留言让我讲解一下ECC 椭圆加密算法。首先我在这里声明一下 椭圆加密算法不像RSA 用中学的数学知识就可以解决。本文中也是参考了网...【详细内容】
2020-12-30  Tags: 加密算法  点击:(225)  评论:(0)  加入收藏
1. 简单介绍3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力...【详细内容】
2020-09-25  Tags: 加密算法  点击:(62)  评论:(0)  加入收藏
加密算法我们整体可以分为:可逆加密和不可逆加密,可逆加密又可以分为:对称加密和非对称加密。一、不可逆加密常见的不可逆加密算法有MD5,HMAC,SHA1、SHA-224、SHA-256、SHA-384,和...【详细内容】
2020-08-02  Tags: 加密算法  点击:(57)  评论:(0)  加入收藏
0. 前言这一篇我们将介绍一下.net core 的加密和解密。在Web应用程序中,用户的密码会使用MD5值作为密码数据存储起来。而在其他的情况下,也会使用加密和解密的功能。常见的加...【详细内容】
2020-06-22  Tags: 加密算法  点击:(45)  评论:(0)  加入收藏
RSA加密算法是目前最有影响力的公钥加密算法,并且被普遍认为是目前最优秀的公钥方案之一。RSA是第一个能同时用于加密和数宇签名的算法,它能够抵抗到目前为止已知的所有密码攻...【详细内容】
2020-02-25  Tags: 加密算法  点击:(99)  评论:(0)  加入收藏
当你在浏览器的地址栏上输入https开头的网址后,浏览器和服务器之间会在接下来的几百毫秒内进行大量的通信。InfoQ的这篇文章对此有非常详细的描述。这些复杂的步骤的第一步,就...【详细内容】
2020-02-23  Tags: 加密算法  点击:(75)  评论:(0)  加入收藏
crypto-js是一个前端Javascript标准加密算法库,CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。有时候项目涉及到的敏感数据比较多,为了信息安全,我们常常需要...【详细内容】
2020-02-04  Tags: 加密算法  点击:(158)  评论:(0)  加入收藏
加密,简而言之就是借助一种或多种算法将明文信息转换成密文信息,信息的接收方通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,加密算法可以分为对称加密、非对称加密和对称加密和非对称加密的...【详细内容】
2019-12-06  Tags: 加密算法  点击:(60)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条