欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Web 3.0 - 基础层技术 - SCQA 模型 有趣的密码学

最编程 2024-04-30 15:58:23
...

【小木箱成长营】密码学系列教程:

Web3.0 · 基础层技术 ·密码学在移动端应用与实践

一、序言

Hello,我是小木箱,欢迎来到小木箱成长营密码学系列教程,今天将分享Web3.0 · 基础层技术 · SCQA模型趣谈密码学。

SCQA模型趣谈密码学主要分为四部分,第一部分是加解密算法,第二部分是Hash算法,第三部分是数据编解码,最后一部分是总结与展望。

其中,加解密算法主要是分为四部分,第一部分是对称加密,第二部分是DH交换算法,第三部分是非对称加密,第四部分是混合加密。

如果学完小木箱密码学系列教程,那么任何人完成高性能日志组件、网络接口组件和网络优化工作,甚至迎接Web3.0都会有巨大帮助。

二、加解密算法

SCQA模型是麦肯锡芭芭拉·明托在《金字塔原理》中提出的“结构化表达”模板工具,常用于方案、文案、广告、演讲、讲故事、写作等。SCQA是Situation、Complication、Question和Answer4个英文单词简称,分别是

  • S—业务背景
  • C—困境冲突
  • Q—分析问题
  • A—解决问题

如果你想把难以理解的密码学知识表达清楚,那么建议采用万能表达模板—SCQA。

加密技术⽆处不在但是容易忽略。更多的了解加密技术能做什么,不能做什么,对我们建⽴更加完善的信息安全意识是⾮常重要的。

加密技术的演进其实是⼀场没有硝烟的战争,在加密⽅和破解⽅惊⼼动魄的攻守战中不断完善。

接下来,我们⾸先利用⼀个⼩故事,然后通过业务背景、困境冲突、分析问题和解决问题的SCQA模型⽅式学习加密技术演进,最后达到活学活用的目的。

S: 业务背景

故事的主⼈公是小木箱和粉丝。他们通过微信公众平台进行传话,小木箱给粉丝发了⼀个消息:微信公众号小木箱成长营。

image.png

但是,消息被潜在黑粉窃听了!

image.png

于是黑粉⽴刻拦截了他们的信息,并把小木箱和粉丝交流关系链中断了。

C: 困境冲突

当下面临的问题有三个。第一个窃听问题,小木箱和粉丝交流过程中,内容是明文传输的,内容被黑粉窃听,导致信息泄露风险。

第二个是密钥配送问题,通过对称加密算法,小木箱和粉丝好像解决了信息传递的问题,但是,实际操作过程中,发现了⼀个⼤问题:如何共享密钥?这就是密钥配送问题。

第三个问题是中间⼈攻击问题,小木箱和粉丝即使解决了密钥配送问题,不一定能确保密钥通信安全。

黑粉通过⾃⼰的聪明才智,想到了⼀个劫持+篡改的⽅案,再次攻破了DH密钥交换和⾮对称加密,即中间⼈攻击。

Q:分析问题

如何解决窃听问题呢?

针对窃听问题,为了避免被黑粉窃听,小木箱和粉丝想到了⼀个好办法:首先小木箱和粉丝共享了⼀个密钥,然后小木箱先把消息加密成密⽂,最后再发送给粉丝,粉丝拿到密⽂之后⽤密钥解密成明⽂。这就是对称加密。

image.png

如何解决密钥配送问题呢?

针对密钥配送问题,密钥配送问题的解决⽅案有很多,有两种解决密钥配送问题⽅案:DH 交换算法和⾮对称加密算法。

如何解决中间人攻击问题呢?

中间人攻击本质即篡改和伪装,解决方案有单向散列、消息验证码、数字签名和数字证书四种方式。

A: 解决问题

针对窃听问题,首先我们来说说对称加密,加密方式主要讲解四种加解密方式: 第一种是DES加密,第二种是3DES加密,第三种是AES加密,第四种是ChaCha加密。

下面小木箱将从简介、历史、现状、明文块长和密钥长和加解密流程等多方面维度讲解四种加解密算法。

2.1 对称加密

2.1.1 对称加密简介

加密处理方式有对称加密和非对称加密两种。

其中,对称加密指的是通信双⽅同时掌握⼀个密钥,加密解密都是由⼀个密钥完成的(即加密密钥等于解密密钥,加解密密钥可以相互推倒出来)。

image.png

对称加密双⽅通信前共同拟定⼀个密钥,不对第三⽅公开,解密时使用加密过程的完全逆过程配合密钥来进行解密。

2.1.2 对称加密手段

2.1.2.1 DES

其中,对称加密指的是加密和解密的密钥不同的加密算法。首先我们讲解一下第一种对称加密算法DES 加密。

2.1.2.1.1 DES 简介

关于DES加密,DES,全称Data Encryption Standard,数据加密标准。

2.1.2.1.2 DES 历史

DES是1975年IBM推出,并随后在国际上⼴泛使⽤开来。

2.1.2.1.3 DES 现状

随着计算机技术的发展,在20世纪末的时候,DES算法已经可以被暴⼒破解。在1999年的DES III ⽐赛中,只⽤了22 ⼩时多就完成了破解。所以现在不要再使⽤DES算法。

2.1.2.1.4 DES 明文块长和密钥长

DES 算法的明⽂块⻓度是64位。密钥总⻓度是64位,其中每隔7位会有⼀个⽐特的错误校验,所以有效密钥⻓度为56位。

2.1.2.1.5 DES 加解密流程

DES的加解密流程如下:

  1. 第一步:DES算法的基本结构被称为Feistel⽹络。Feistel⽹络中,⼀个基本单位叫做轮,整个加密过程就是由16个轮循环组成。
  2. 第二步:明⽂被平分成左右两部分L0和R0。L0经过加密得到加密后的L0,作为下⼀轮的右半部分R1。R0不做处理,直接作为下⼀轮的左半部分L1。

2.1.2.1.6 DES 加密结构

DES解密和加密的结构是⼀样的(利⽤传统的换位、异或、置换等加密⽅法),具体可以参考下面的图解。

2.1.2.1.7 DES 代码实现

github.com/strich1991/…

2.1.2.2 3DES

然后,我们讲解一下第二种对称加密算法3DES加密。

2.1.2.2.1 3DES 简介

3DES算法是将DES算法重复3次的⼀种算法。

2.1.2.2.2 3DES 历史

3DES是DES算法被攻破之后,被开发出来临时替代DES算法的。1999年,NIST(National Institute of Standards and Technology,美国国家标准技术研究所)将3DES指定为过渡加密标准。

2.1.2.2.3 3DES 现状

3DES算法由于其处理效率不⾼,并且作为过渡标准,所以除了⼀些要向下兼容原有的DES算法的场景,现在很少被使⽤。

2.1.2.2.4 3DES 明文块长和密钥长

3DES算法的明⽂块⻓度为64位,有效密钥⻓度为56*3位。

2.1.2.2.5 3DES 加解密过程
  1. 3DES的加密为依次进⾏密钥1的DES加密、密钥2的DES解密、密钥3的DES加密。
  2. 3DES的解密为依次进⾏密钥3的DES解密、密钥2的DES加密、密钥1的DES

解密。

  1. 3DES的加密的结构是加解密交替进⾏⽽不是进⾏3次加密(思考⼀下这是为什么?)

由于DES密码长度容易被暴力破解,增加DES的密钥长度可反破解,因此针对每个数据块进行三次DES加密,即3DES。

组合分组方法设计的分组3DES加密算法,3DES密钥相比DES长度更长,安全性更高。

2.1.2.2.6 3DES 代码实现

github.com/songxiaolia…

2.1.2.3 AES

接着,我们讲解一下第三种对称加密算法AES加密。

2.1.2.3.1 AES 简介

AES算法,Advanced Encryption Standard,⾼级加密标准,是取代DES算法的⼀种新的对称加密标准。

2.1.2.3.2 AES 历史

AES是NIST公开竞选得到的⼀种加密标准。可以说是先有了AES的名字,然后竞选之后才确定的算法。最终被选中的算法叫做Rijndael算法。不过严格来讲,AES是Rijndael的⼀种特殊情况。

2.1.2.3.3 AES 现状

AES现在已经是最流⾏的对称密钥加密算法,⼴泛应⽤在各个领域。也是我们现在推荐使⽤的对称加密算法。

2.1.2.3.4 AES 明文块长和密钥长

AES的块⻓128位,密钥⻓度⽀持128位、192位、256位三种⻓度。(这⾥注意,Rijndael算法的块⻓和密钥⻓度,是在128-256之间的32倍数即可。

2.1.2.3.5 AES 加解密过程

AES加密过程分为两个过程,⼀是密钥扩展过程、⼀是明⽂加密过程。

A: 密钥扩展过程:

密钥扩展过程是基于⽤户密钥,通过Rijndael密钥编排算法⽣成多组128⽐特⻓的轮密钥,根据密钥⻓度,分别⽣成10组、12组和14组轮密钥。

B: 明文加密过程:

  1. AES加密与DES加密⼀样,是由多轮组成。根据密钥⻓度,分别是10轮、12轮、14轮。

  2. 每⼀轮由以下四种运算组合⽽成:

    1. SubBytes,字节替换。是通过⼀个S-Box对每个字节进⾏替换操作。
    2. ShiftRows,⾏位移。每⼀⾏根据所在⾏数位移不同的字节数。
    3. MixColums,列混合。每⼀列需要跟⼀个常量矩阵相乘。
    4. AddRoundKey,轮密钥加。将列混合之后的结果和轮密钥做异或运算。
  3. 第⼀轮只有AddRoundKey运算。

  4. 最后⼀轮是SubBytes->ShiftRows->AddRoundKey运算。

  5. 中间轮都是SubBytes->ShiftRows->MixColums->AddRoundKey运算。

AES解密过程就是AES加密逆过程,小木箱不做过多讲解。

2.1.2.3.5 AES 代码实现

github.com/ForTheDevel…

2.1.2.4 ChaCha20

最后,我们讲解一下第四种对称加密算法ChaCha20加密

2.1.2.4.1 ChaCha20 简介

ChaCha20算法是Google设计的一种新型流密码算法,ChaCha命名来源于印度某漫画"Chacha Chaudhary",20表示ChaCha20算法有20轮加密计算。

ChaCha20带Poly1305消息认证码的ChaCha20(即ChaCha20-Poly1305),作为OpenSSL中RC4的替代品,用以完成互联网的安全通信。

Google最初实现了HTTPS(TLS/SSL)流量在Chrome浏览器(Android手机版)与Google网站之间的通信。

2.1.2.4.2 ChaCha20 历史

2008年,丹尼尔·J·伯恩斯坦发布“ChaCha”密码家族,目的是增加每一轮扩散以提升性能。

2013年,Google提出ChaCha20-Poly1305算法,11月份在Chrome31版本启用了ChaCha20-Poly1305算法。

2014年,所有的IOS设备和Android设备上Chrome启用了ChaCha20-Poly1305算法。

firfox密码库用的是NSS,NSS3.23版本支持ChaCha20/Poly1305。

2.1.2.4.3 ChaCha20 现状

ChaCha20算法因为其轻量级、链路加密、密钥安全、IOT安全特征,所以更适用于ARM设备。

ChaCha20-poly1305比AES-128-GCM性能高,但因为ChaCha20 IOT安全特征,因此手机设备更适合ChaCha20-poly1305算法,电脑上更适合AES-128-GCM算法。

2.1.2.4.4 ChaCha20 明文长和密钥长

ChaCha20矩阵输入一个256位的密钥长度、64位随机数、64位计数器值以及4×32位的常数,常数填充在32位整型数组中作为初始矩阵。

2.1.2.4.5 ChaCha20 加解密过程

2.1.2.4.5.1 ChaCha20加密

了解ChaCha20加密之前我们首先要熟悉三个新概念,第一个是ChaCha20的初始矩阵,第二个是初始矩阵置换,第三个是轮函数。

首先,聊聊ChaCha20的初始矩阵,ChaCha20的初始矩阵是指输入一个256位的密钥、64位随机数、64位计数器值以及4×32位的常数,它们均填充在32位整型数组中作为初始矩阵。

其次,聊聊初始矩阵置换,初始矩阵置换是指 ChaCha20算法有20轮运算,其中奇数轮次与偶数轮次在执行轮函数前需要分别经过行置换和列置换,故20轮运算可以看作10次迭代,每次迭代先做行置换再做列置换。

接着,聊聊轮函数,轮函数是指在矩阵每次完成置换后,都需要执行一次轮函数QUARTERROUND,该函数输入为4个32位串,即4个数组中的元素,输出同样也为4个32位串,这样执行完轮函数后除了数据以外,矩阵结构未发生任何变化。

最后,聊聊ChaCha20加密过程,ChaCha20加密其实是将需要加密的信息(明文)与密钥流按位异或即得到密文,明文大于512位时,对轮函数进行20轮周期(10轮行周期+10轮列周期),初始矩阵已经变成了一个新的4×4矩阵,此时将新矩阵与初始矩阵矢量相加,得到的矩阵再拆分倒序序列化处理后即得到一个512位的密钥比特流。

由于计数器是32位,理论上可以生成2^512bit(256GB)的密钥流,所以一般长度的信息加密完全足够,这就是ChaCha20加密过程。

2.1.2.4.5.2 ChaCha20解密

聊完ChaCha20加密过程,我们再聊聊ChaCha20解密过程,接收方使用发送方传输过来的初始密钥、随机数以及协商好的常数和依次递增的计数器值按照ChaCha20的密钥流生成规则产生与加密相同的密钥流,按位与密文异或即可得到明文,这就是ChaCha20解密过程。

2.1.2.5 ChaCha20 代码实现

github.com/kitsook/Cha…

2.1.3 对称加密破解思路

说完四种加解密算法,小木箱说说对称加密算法的破解思路。

对称加密算法破解比较简单,首先拿到⼀组或多组原文-密文对,然后设法找到⼀个密钥,这个密钥可以将这些原文-密文对中的原文加密为密文,以及将密文解密为原⽂的组合,即成功破解。

2.1.4 对称加密反破解

对称加密如何反破解呢?

⼀种优秀的对称加密算法的标准是让破解者找不到⽐穷举法(暴力破解法)更有效地破解⼿段,并且穷举法的破解时间⾜够长(例如数千年)。

2.1.5 对称加密优缺点

对称加密算法的优点很明显,效率高,性能高。缺点是有密钥泄露风险,只能在安全网络上传输密钥,一旦密钥泄露则加密通信失败。

2.1.6 对称加密作用

对称加密算法的作用在于加密通信,防⽌信息在不安全网络上被截获后,信息被人读取或篡改。

2.1.7 对称加密分组和填充⽅式

2.1.7.1 分组模式

从上⾯的算法,我们可以看到,输⼊的明⽂都是固定⼤⼩的块。那么对于⼀个任意⻓度的明⽂,要如何加密呢?

答案就是分组。下面简单介绍CBC、CTR和CFB三种分组模式。

2.1.7.1.1 CBC模式

CBC模式的全称是Cipher Block Chaining模式,密文分组链接模式。名字中也展示CBC的实质,像链条一样相互链接在一起。

CBC加密“链条”起始于一个初始化向量IV,这个初始化向量IV是一个随机的比特序列。

CBC加密必须是从“链条”头开始加密,所以中间任何一个分组都无法单独生成密文。

CBC解密的时候,如果解密“链条”中间有一环“断”了,会出现什么问题呢?

CBC解密过程中如果有一环出现了问题,硬盘等问题出现了,但是整个链条长度没变,如上图的情况,那么一个坏的环会影响2个分组的解密。

如果链条长度也发生变化了,或者某个分组中的1个比特位在网络传输过程中缺失了。那么影响的解密分组可能就不止2个分组了。

因为会引起整个链条上重新分组,这样一来导致原文无法解密(因为位数少于分组要求,解密的时候不会填充末尾分组不足的比特位)。

这一点算是CBC链式的一个“小缺点” 。一个比特位的缺失会导致整个密文无法解析。

对CBC的攻击

由于CBC是链式的,所以攻击者可以考虑从“头”开始攻击,即攻击初始化向量IV,例如把初始化向量中的某些比特位进行0,1反转。

这样的话,消息接收者在解密消息的时候,明文1分组会受到初始化向量的影响,出现错误。

还有一种攻击办法是直接攻击密文,例如密文分组中的某个分组n被改变了,那么就会影响到明文分组n+1的解密。

2.1.7.1.2 CTR模式

CTR模式的全称是CounTeR模式(计数器模式)。CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码。

注意上图中解密过程,中间是加密而不是解密!因为需要保证明文和密文之间异或的对象不变。不变才能异或两次还原明文。

计数器每次都会生成不同的nonce来作为计数器的初始值。这样保证每次的值都不同。

这种方法就是用分组密码来模拟生成随机的比特序列。

对 CTR 的攻击

在被攻击方面CTR和OFB是差不多的。CTR模式的密文分组中有一个比特被反转了,则解密后明文分组中仅有与之对应的比特会被反转,这个错误不会被放大。

不过CTR模式比OFB模式相比有一个更好的优点在于,如果OFB模式某次密钥流的一个分组进行加密后生成的结果和前一次一样,那么这个分组之后的每次密钥流都不变了。

CTR模式就不会存在这一问题。

2.1.7.1.3 CFB模式

CFB模式的全称是Cipher FeedBack模式(密文反馈模式)。在CFB模式中,前一个密文分组会被送到密码算法的输入端。反馈即返回输入端。

注意上图中解密过程,中间是加密而不是解密!因为需要保证明文和密文之间异或的对象不变。不变才能异或两次还原明文。

CFB整个过程很像一次性密码本,如果把明文分组前的加密部分全部都看成一个随机比特序列,那么就和一次性密码本的流程一样了。由算法生成的比特序列称为密钥流

在CFB模式中,密码算法就相当于用来生成密钥流的伪随机数生成器,初始化向量相当于是伪随机数生成器的种子。

也因为它是伪随机数,所以CFB不具备一次性密码本绝对无法被破译的性质的。

所以说,CFB是一种使用分组密码来实现流密码的方式之一

对CFB的攻击

可以对CFB实施重放攻击(replay attack)

例如攻击者可以把上一次会话中的部分分组截取出来放进下次会话随机位置。

这样消息接收者在拿到密文后进行解密,会导致其中一个分组出现错误(上图中是明文分组2解密失败),这个时候无法判断是通信出错还是被人攻击所致。(想要判断需要用到消息认证码才行,而此处只是单纯的CFB)

2.1.7.2 填充⽅式

在分组的前提下,如果明⽂的⻓度不能被块⻓整除的情况,就需要填充。主要有三种填充⽅式:

  • NoPadding,不填充,很少⽤。需要使⽤者保证明⽂⻓度是块⻓的整数倍。

  • ZeroPadding,缺字节填0,不缺字节填⼀个块的0。

  • PKCS7Padding,缺⼏个字节就每字节都填⼏。不缺填⼀个块的块⻓

最后,简单总结一下六种分组模式和三种填充方式

填充方式 特点
NoPadding 不填充,很少⽤。需要使⽤者保证明⽂⻓度是块⻓的整数倍
ZeroPadding 缺字节填 0,不缺字节填⼀个块的 0
PKCS7Padding 缺⼏个字节就每字节都填⼏。不缺填⼀个块的块⻓

关于对称加密小木箱讲解到这里了,对称加密小木箱讲解了四种加密方式、对称加密破解思路、对称加密反破解、对称加密优缺点、对称加密作用和对称加密分组和填充方式。

其中对称加密的四种加密方式分为DES加密、3DES加密、AES加密和ChaCha20加密等。

如果想了解更多密码学知识内容,那么小木箱建议大家通过《图解密码技术》一书进行深度学习。下面我们将进入DH交换算法的讲解。

2.2 DH 交换算法

小木箱在加解密算法开篇说了,对称加密算法存在的困境冲突有密钥配送问题,解决密钥配送问题的解决⽅案有很多,下⾯介绍两种常⻅的解决密钥配送问题的⽅案:DH交换算法和⾮对称加密算法。

2.2.1 DH交换算法 简介

解决密钥配送问题第一种⽅案是DH交换算法,DH交换算法是由Diffie和Hellman在1976年发明的。

2.2.2 DH交换算法 历史意义

DH算法作为⾮对称密码技术的⿐祖,⼀⽅⾯将加密算法的基本⼯具从代换和置换扩展到数学函数,另⼀⽅⾯⾮对称的⽅式对密钥配送、数字认证等都有极其重要的作⽤。DH算法可以说是密码学史上最重要的⼀次⾰命。

2.2.3 DH交换算法 现状

⽬前DH算法被⼴泛应⽤在安全领域,⽐如Https中的TLS握⼿协议等。

2.2.4 DH交换算法 理论依据

DH交换算法求模公式(axmod p)y mod p = axy mod p(a^x mod p)^y mod p = a^{xy} mod p ,DH交换算法离散对数难题b = ax mod pb = a^x mod p ,对于给定的素数a和p,已知x求b很容易,但是已知b求x很难,难度大概是O(2n)O(2^n) ,其中n是p的位数。

2.2.5 DH交换算法 过程分析

  1. 小木箱选定公共参数a和p

  2. 小木箱选择一个私密的参数x,并且计算出YaY_a

  3. 小木箱将a、p、YaY_a 一起发送给粉丝

  4. 粉丝选定一个私密的参数y,并且计算出YbY_b

  5. 粉丝将YbY_b 发送给小木箱

  6. 小木箱算出K = Yby mod pK = Y_b^y mod p ,粉丝算出K = Yay mod pK = Y_a^y mod p ,K就是二者共享的秘钥

image.png

公开参数 a、p、 YaY_a YbY_b
私有参数 x和y

2.2.6 DH交换算法 测试代码

github.com/kelvinylon/…

2.3 非对称加密

说完解决密钥配送问题第一种⽅案是DH 交换算法,我们再说说解决密钥配送问题第二种⽅案非对称加密。

2.3.1 非对称加密简介

⾮对称加密就是加密和解密的密钥不同的加密算法。

2.3.2 非对称加密原理

  1. 可以在不可信网络上将双方的公钥传给对方,然后在发消息前分别对消息使用对方的公钥来加密和使用⾃己的私钥来签名,做到不可信网络上的可靠密钥传播及加密通信。

  1. 由于私钥和公钥互相可解,因此⾮对称加密还可以应⽤于数字签名技术。

  1. 使⽤公钥对数据进行加密得到密文;使用私钥对数据进行解密得到原数据。

2.3.3 非对称加密手段

非对称加密手段常见的手段有RSA、DSA、ECC和 ECDHE。

2.3.3.1 RSA

首先,我们来说一下RSA算法

2.3.3.1.1 RSA 简介

1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了⼀种崭新构思, 可以在不直接传递密钥的情况下,完成解密。

这被称为"Diffie-Hellman密钥交换算法"。这个算法启发了其他科学家。⼈们认识到,加密和解密可以使⽤不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。

这种新的加密模式被称为"⾮对称加密算法"。

2.3.3.1.2 RSA 历史

1977 年,三位数学家 Rivest、Shamir 和 Adleman 在 DH 算法的启发下,设计了⼀种⾮对称加密算法,命名为 RSA 算法。

2.3.3.1.3 RSA 现状

RSA算法是使⽤最为⼴泛的⾮对称加密算法,可以说,有计算机⽹络的地⽅,就有RSA算法。

2.3.3.1.4 RSA 理论基础

涉及到互质关系、欧拉函数、欧拉定理、模反元素等数学知识。具体可以参考阮⼀峰的 RSA算法原理

2.3.3.1.5 RSA 算法过程
2.3.3.1.5.1 加密

密文 = E mod N明文^E mod N ,公钥为(E,N)

2.3.3.1.5.2 解密

明文 = D mod N密文^D mod N ,公钥为(D,N)

2.3.3.1.5.3 公私钥的计算过程
  1. 随机选择两个不相等的质数 p & q

  2. 计算 N = p* q

  3. φ(N) = (p1)(q1)\varphi(N) = (p -1)(q -1)

  4. 随机选择E,满足 1<E<φ(N) 且 gcd(E,φ(N)) = 11 < E <\varphi(N) 且 gcd(E,\varphi(N)) = 1

  5. 计算出D, 满足1< D<φ(N) 且 E  D  mod φ(N)= 11 < D <\varphi(N) 且 E * D * mod \varphi(N)= 1

  6. 公钥为(E,N),私钥为(D,N)

2.3.3.1.6 RSA 代码实现

github.com/ForTheDevel…

2.3.3.2 DSA

然后,我们来说一下DSA数字签名

2.3.3.2.1 DSA 简介

DSA数字签名可以理解为是单向加密的升级,不仅校验数据完整性,还校验发送者身份,同时还由于使用了非对称的密钥来保证密钥的安全,所以相比消息Hash算法更安全。

2.3.3.2.2 DSA 历史

DSA是美国NIST作为DSS(DigitalSignature Standard)数字签名的标准。

2.3.3.2.3 DSA 现状

DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,DSA比RSA要快很多。

2.3.3.2.4 DSA 理论基础

DSA是一种更高级的验证方式,DSA是一种公开密钥算法,不能用来加密数据,一般用于数字签名和认证。

DSA 不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名。

在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性,包括数据的完整性以及数据发送者的身份。

如果数据和签名不匹配则认为验证失败!DSA数字签名的作用就是校验数据在传输过程中不被修改。

2.3.3.2.5 DSA 签名过程
  1. 使用消息Hash算法将要发送数据加密生成信息摘要。
  2. 发送方用自己的DSA私钥对信息摘要再加密,形成数字签名。
  3. 将原报文和加密后的数字签名一并通过互联网传给接收方。
  4. 接收方用发送方的公钥对数字签名进行解密,同时对收到的数据用消息Hash算法产生同一信息摘要。
  5. 将解密后的信息摘要和收到的数据在接收方重新加密产生的摘要进行比对校验,如果两者一致,则说明在传送过程中信息没有破坏和篡改;否则,则说明信息已经失去安全性和保密性。

2.3.3.2.6 DSA 代码实现

github.com/ForTheDevel…

2.3.3.3 ECC

其次,我们来说一下ECC算法

2.3.3.3.1 ECC简介

ECC是 Elliptic Curves Cryptography 的缩写,意为椭圆曲线密码编码学。和RSA算法一样,ECC算法也属于公开密钥算法。

2.3.3.3.2 ECC历史

1985年, Koblitz 和 Miller 提出ECC算法,ECC算法的数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性

2.3.3.3.3 ECC现状

因为在安全性、加解密性能、网络消耗方面有较大优势,ECC加密算法大有取代RSA成为下一代主流加密算法的趋势。如今ECC应用范围很广,在TLS、区块链(比特币、以太坊等等)、SM2国密算法、证书、银行*机构等许多方面都有大量应用。

A: 更适合于移动互联网

ECC加密算法的密钥长度很短(256位),意味着占用更少的存储空间,更低的CPU开销和占用更少的带宽。

目前手机已经越来越普及,随着越来越多的用户使用移动设备来完成各种网上活动,ECC加密算法为移动互联网安全提供更好的客户体验。

B: 更好的安全性

ECC加密算法提供更强的保护,比目前的其他加密算法能更好的防止攻击,使你的网站和基础设施比用传统的加密方法更安全,为移动互联网安全提供更好的保障。

C: 更好的性能

ECC加密算法。密钥短,所以相应的计算量、消耗的内存和带宽也就少。可以用较短的密钥长度来提供更好的安全

例如,256 位的 ECC密钥加密强度等同于 3072 位 RSA 密钥的水平(目前普通使用的 RSA 密钥长度是 2048 位)。其结果是你以更低的计算能力代价得到了更高的安全性。

经国外有关权威机构测试,在 Apache 和 IIS 服务器采用 ECC算法,Web服务器响应时间比 RSA 快十几倍。

D: 更大的IT投资回报

ECC可帮助保护您的基础设施的投资,提供更高的安全性,并快速处理爆炸增长的移动设备的安全连接。

ECC的密钥长度增加速度比其他的加密方法都慢(一般按 128 位增长,而 RSA则是倍数增长,如:1024 – 2048 - 4096),将延长您现有硬件的使用寿命,让您的投资带来更大的回报。

ECC算法的可以用较少的计算能力提供比RSA加密算法更高的安全强度,有效地解决了“提高安全强度必须增加密钥长度”的工程实现问题。

上一篇: 读书笔记 - 认知觉醒:伴随身体的学习方法论

下一篇: Leetcode 766。托普利兹矩阵