公钥加密算法

1、Hash(哈希,散列)介绍

1.1 、概念

Hash是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值

简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数定义源自百度百科

1.2、特点

  • 可以应用到任意大小的输入

  • 产生固定大小的输出(比如MD5的输出为32字节)

  • 对于任意的输入x,H ( x )都比较容易计算

  • 输入改变一点点,输出改变很多

  • MD5算法举例(一个曾经应用很广泛的Hash算法),计算hello和hellp两个单词的Hash值

  • “hello” — b1946ac92492d2347c6235b4d2611184

  • “hellp” — 7bd75e0741818d4e6020b0250e52dd46

  • 可以看到输入只相差一个字母,但是输出至少有一半以上的位不同

  • 单向性 (one-way or pre-image resistant)

  • 已知Hash值h,找到对应的输入x使得H ( x ) = h H(x) = hH(x)=h是计算上不可行的

  • 已知一个输入x和其对应的Hash值H ( x ),找到一个不同的输入y使得H ( x ) = H ( y ) 是计算上不可行的

  • 不容易冲突 (collision resistant)

找到一对输入( x , y ) ,满足x ≠ y 并 且 H ( x ) = H ( y ) 是计算上不可行的

计算上不可行:计算找到符合条件的值所需时间不现实,如 需要时间过长

1.3、应用

  • 文件签名

这个最直接的一个应用场景就是”云盘秒传”,在上传资源的时候,云盘会先拿上传文件的Hash值去搜索储存空间,看看是否存在相同文件,假如存在就无需重复上传。这就是为什么一些热门资源上传速度非常快甚至可以实现秒传

  • HashMap的实现

每次读写HashMap只需要计算key的Hash值并到对应的地方进行数据的读写,不需要搜索整个底层数据结构

  • 加密

由于Hash函数的不可逆性,我们可以储存密码的Hash值而不是原文,从而别人即使拿到数据,也无法得到真正的密码

2.加密通信

2.1加密

加密:其中加密又分为两种,一种是实时的(比如加密通信),一种是非实时的(比如加密保存密码)

  • 相同点

  • 都需要对信息进行加密

  • 不同

  • 单向性

  • 加密通信要能加解密

  • 加密保存可能不需要解密

  • 时效性

  • 加密通信对速度有要求

  • 保存对速度没有过高要求

2.2对称加密

对称加密指的是双方使用同一个密钥进行加解密,发送方将“原文本” (plain text)加密后得到“密文” (cipher text),然后发送“密文”;接收方收到“密文”后,使用同一个密钥,解密得到“原文本”。

基本公式如下:

  • c = E s ( p , k ) c = E_s(p,k)c=E s (p,k) — c (cipher text), p (plain text), k (secret key,密钥), E (encryption,加密算法)

  • p = D s ( c , k ) p = D_s(c,k)p=D s (c,k) — D (decryption, 解密算法)

优劣:对称加密的好处是计算速度快,不会给通信带来明显的时延;但是不足之处在于密钥的分发问题,可以看到对称加密的整个安全性都取决于密钥的私密性,只要密钥只有接收和发送双方知道,那么即使第三方截获了信息也无法解密得到信息内容,但是一旦密钥泄露,那么就毫无安全性可言,任何一个知道密钥的人都可以解密得到信息内容。

注意!!!虽然密钥泄露了,但是只要加密算法不泄露,信息一样是安全的。注意加密的一个原则就是,“保持密钥的私密性但不保持算法的私密性”,这里有几个原因:1)常用的加密算法就那么几种,攻击方可以全都试一遍;2)我们应该使用经过无数人验证测试的可靠加密算法(亦即是公开的),而不是自己发明一个新的加密算法(尽管可能没人知道具体算法,但是可能会存在安全漏洞)。

常见加密算法:

  • DES (Data Encryption Standard)

  • Triple DES:用2-3个不同的密钥,计算3次DES

  • AES (Advanced Encryption Standard)

常见加密模式:

  • 电码本模式 (ECB, Electronic codebook):最简单的方式,将输入划分为若干相等的数据块,使用同一个密钥对每一个数据块进行加密;

  • 密码分组链接模式 (CBC, Cipher Block Chaining):将原文分为若干项等的数据块,每一个数据块的初始plaintext与前一个块输出的ciphertext进行异或之后再将结果进行加密

  • 密文反馈模式 (CFB, Cipher Feedback)

  • 输出反馈模式 (OFB, Output Feedback)

  • 计数模式 (CTR, Counter):设定一个计数器,每处理一个数据块计数器自增,然后将计数器的值加密后再与该块的原始plaintext进行异或操作得到最终结果;

2.3非对称加密

相比较于对称加密,非对称加密使用的是两个密钥(公钥 & 私钥),其中这两个密钥是一同产生的并且数学上相关的。发送方使用公钥将进行加密,接收方使用对应的私钥进行解密

优劣:相比较与对称加密,非对称加密的优点在于不需要考虑密钥的分发问题,因为只需要发送公钥,而公钥并不需要私密性(只能用于加密无法用于解密),所以不存在密钥泄露的问题(私钥本地保存,不要发送到网络上)。但是非对称加密也有个缺点就是速度较慢,假如用于实时通信会有比较明显的时延。

应用:

HTTPS就是这两种加密方式的一个典型应用(相比较于HTTP全部明文传输,HTTPS传输的是加密后的密文),为了将二者取长补短,HTTPS的基本工作流程是,首先客户端和服务器端利用非对称加密进行通信,二者商定一个共同的密钥,然后转为对称加密,利用刚刚商定好的密钥进行通信。这样大部分的通信使用的是对称加密,不会影响通信速度,同时又利用非对称加密解决了对称加密的密钥分发问题。

3.数字签名

3.1原理

加密通信是用公钥进行加密,而用私钥进行解密。而数字签名刚好相反,是采用私钥加密,公钥解密。对于加密通信,公钥加密过程就是通过加密算法把信息加密成密文,私钥解密过程就是通过解密算法解密密文。而对于数字签名,私钥加密过程是通过签名算法来生成数字签名的过程,而公钥解密过程是通过验证算法来确定数字签名是不是有私钥持有者签署的。

3.2功能

数字签名的主要的功能是认证签署人身份,说得具体点,就是让所有人能够确认这个数字签名是不是由私钥的持有人创建的。数字签名是由签名算法去生成的,签名算法的输入有两个,一个是私钥,另一个是被签署的信息,输出的一个字符串就是数字签名了。签名到底是不是由私钥持有人签署的,要通过验证算法判断。验证算法有三个输入,一个是信息本身,另外一个是数字签名,第三个是公钥,输出的结果就是验证成功或者验证失败。数字签名过程中,私钥是“签名 key”,公钥是“验证 key”。

3.3基本流程(源自知乎)

Alice 要签署一个文件,于是她就拿出自己的私钥,执行签名算法,得到数字签名。那么其他人如何去验证这个数字签名的确出自 Alice 呢?首先,Alice 要把自己的公钥放到一个大家都可以访问到的服务器上,这样其他人都可以获得 Alice 的公钥,大家把文件,数字签名以及公钥下载到自己的计算机上,调用验证算法,就可以判断这个文件是不是 Alice 签署的了。不管是签名算法还是验证算法都是全球公开的,每个人都可以在自己的计算机上安装软件来执行这两个算法。

3.4三大作用

  • 认证

  • 确认签署人身份

  • 防止抵赖

  • 同样是纸笔签名也拥有的特性,一份合同签署了,就要承担责任,白纸黑字,不能耍赖

  • 保证文件没有被篡改

  • 数字签名是由两个输入运算得出的,一个是私钥,另一个就是文件,所以如果在验证过程中,发现文件有改动,验证会失败

应用:主要用在各种防伪造场合,在世界上很多国家,数字签名都是有法律效力的。另外要注意,数字签名属于电子签名的一种,但并不是所有的电子签名都是数字签名。

3.5总结

数字签名是公钥加密技术的两大应用之一。主要采用了私钥加密,公钥解密的方式,文件签署者用私钥签署文件,就表示他认可了这个文件的内容。要验证数字签名,只需要签名人公布自己的公钥即可,其他人通过验证数字签名即可验证文件是私钥签署的。签署人不需要暴露自己的私钥,就可以间接证明自己拥有私钥。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值