- 对称加密
- 加密和解密使用同一个密钥
- 常见对称加密算法:
- DES:Data Encryption Standard,56bits
- 3DES:
- AES:Advanced (128, 192, 256bits)
- Blowfish,Twofish
- IDEA,RC6,CAST5
- 非对称加密
- 密钥是成对出现
- 公钥:public key,公开给所有人,主要给别人加密使用
- 私钥:secret key,private key 自己留存,必须保证其私密性,用于自已加密签名
- 特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
- 功能:
- 数据加密:适合加密较小数据,比如:加密对称密钥
- 数字签名:主要在于让接收方确认发送方身份
- 常见算法:
- RSA
- DSA
- ECC
- 非对称加密实现加密
接收者 | 生成公钥/密钥对:P和S,公开公钥P,保密密钥S |
发送者 | 发送者使用接收者的公钥来加密消息M,将P(M)发送给接收者 |
接收者 | 接收者使用密钥S来解密:M=S(P(M)) |
- 非对称加密实现数字签名
- 数据传输过程
发送者 | 生成公钥/密钥对:P和S,公开公钥P,保密密钥S,使用密钥S来加密消息M,发送给接收者S(M) |
接收者 | 使用发送者的公钥来解密M=P(S(M)) |
- 利用单向哈希算法核查数据完整性
- 范例:对比官方摘要值一致性(不一致则有被篡改)
确认本地使用镜像
查看官方镜像摘要
用摘要中同样的算法加密本地isos,检查哈希值一致性
对比发现哈希值一致,确认本地isos未被篡改
- 综合应用多种加密算法
- 实现数据加密
- Key(data)+Pb(key)
- 实现数据加密,无法验证数据完整性和来源
- 实现数字签名
- data+Sa(hash(data))
- 不加密数据,可以保证数据来源的可靠性、数据的完整性和一致性
- 综合加密和签名
- Pb{Sa[hash(data)]+data}
- 对称key{Sa[hash(data)]+data}+Pb(对称key)
- 即实现数据加密,又可以保证数据来源的可靠性、数据的完整性和一致性
- 密码交换
- 密钥交换:IKE( Internet Key Exchange )
- 公钥加密:用目标的公钥加密对称密钥
- DH (Deffie-Hellman):生成对称(会话)密钥
- 实现过程
A: g,p 协商生成公开的整数g, 大素数p
B: g,p
A:生成隐私数据:a (a<p),计算得出 g^a%p,发送给B
B:生成隐私数据:b,(b<p),计算得出 g^b%p,发送给A
A:计算得出 [(g^b%p)^a]%p = g^ab%p,生成为密钥
B:计算得出 [(g^a%p)^b]%p = g^ab%p,生成为密钥
- 特点
- 泄密风险:私密数据a,b在生成K后将被丢弃,因此不存在a,b过长时间存在导致增加泄密风险。
- 风险
- 中间人攻击:由于DH在传输p,g时并无身份验证,所以有机会被实施中间人攻击,替换双方传输时的
- 数据
- CA和证书
- 背景:中间人攻击-Man-in-the-middle,简称为 MITM
- 通过中间转发、截取通信双方密钥,骗取数据或者诱导发送错误信息
- CA,Catificate Authority,它的作用就是提供证书(即服务器证书,由域名、公司信息、序列号和签名信息组成)加强服务端和客户端之间信息交互的安全性,以及证书运维相关服务。
- 类型:
- 证书授权机构的证书
- 服务器证书
- 用户证书
- 获取方式
- 自签名的证书
- 使用证书授权机构:
- 1 生成证书请求 csr;
- 2 将证书请求csr 发送给CA;
- 3 CA 颁发签名证书
- 安全协议 SSL/TLS
- SSL/TLS是一个安全通信框架,上面可以承载HTTP协议或者SMTP/POP3协议等。
- SSL/TLS综合运用了密码学中的对称密码,消息认证码,公钥密码,数字签名,伪随机数生成器等,可以说是密码学中的集大成者。
- TLS主要分为两层,底层的是TLS记录协议,主要负责使用对称密码对消息进行加密。
- 上层的是TLS握手协议,主要分为握手协议,密码规格变更协议和应用数据协议4个部分。
- 握手协议负责在客户端和服务器端商定密码算法和共享密钥,包括证书认证,是4个协议中最最复杂的部分。
- 密码规格变更协议负责向通信对象传达变更密码方式的信号
- 警告协议负责在发生错误的时候将错误传达给对方
- 应用数据协议负责将TLS承载的应用数据传达给通信对象的协议。
可参考:一篇文章让你彻底弄懂SSL/TLS协议
- HTTPS
- 过程:
- 1. 客户端发起HTTPS请求
- 用户在浏览器里输入一个https网址,然后连接到服务器的443端口。
- 2.服务端的配置
- 采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通 过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。
- 3. 传送服务器的证书给客户端
- 证书里其实就是公钥,并且还包含了很多信息,如证书的颁发机构,过期时间等等。
- 4. 客户端解析验证服务器证书
- 这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如:颁发机构,过期时间等等,如果发现异常,则会弹出一 个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书中公钥对该随机值进行非对称加密。
- 5. 客户端将加密信息传送服务器
- 这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来 进行加密解密了。
- 6. 服务端解密信息
- 服务端将客户端发送过来的加密信息用服务器私钥解密后,得到了客户端传过来的随机值。
- 7. 服务器加密信息并发送信息
- 服务器将数据利用随机值进行对称加密,再发送给客户端。
- 8. 客户端接收并解密信息
- 客户端用之前生成的随机值解密服务段传过来的数据,于是获取了解密后的内容。
- OpenSSL
- OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连线者的身份。这个包广泛被应用在互联网的网页服务器上。
- 其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。OpenSSL可以运行在OpenVMS、 Microsoft Windows以及绝大多数类Unix操作系统上(包括Solaris,Linux,Mac OS X与各种版本的开放源代码BSD操作系统)。
- Base64 编码
- 以字符n对应的ascII编码110转二进制为例
- 将余数从下到上排列,得到二进制1101110,一个字节8bit,高位补足0,得到01101110。
#短除法
110 / 2 = 55...0
55 / 2 = 27...1
27 / 2 = 13...1
13 / 2 = 6...1
6 / 2 = 3...0
3 / 2 = 1...1
1 / 2 = 0...1
- 以二进制数01101110转10进制为例
- 按权展开求和, 8位二进制数从右到左,次数是0到7依次递增, 基数*底数次数,从左到右依次累加,相加结果为对应十进制数。
#按权展开求和
(01101110)2 = 0 * 20 + 1 * 21 + 1 * 22 + 1 * 23
+ 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27
- 位概念
- 二进制数系统中,每个0或1就是一个位(bit,比特),也叫存储单元,位是数据存储的最小单位。其中8bit就称为一个字节(Byte)。
- 64位编码概念
- Base64编码是将字符串以每3个8比特(bit)的字节子序列拆分成4个6比特(bit)的字节(6比特有效字节,最左边两个永远为0,其实也是8比特的字节)子序列,再将得到的子序列查找Base64的编码索引表,得到对应的字符拼接成新的字符串的一种编码方式。
- base64编码后的大小是原来的4/3倍
- 一个字节需要8个存储单元存储,所以我们要把6bit往前面补两位0,补足8bit,补足后所需的存储单元为32个,是原来所需的24个的4/3倍
可参考:彻底弄懂base64的编码与解码原理
- openssl 命令
#列出所有标准命令
[root@rocky86 ~]# openssl list -commands
......
......
#列出所有摘要命令
[root@rocky86 ~]# openssl list -digest-commands
......
......
#列出所有摘要算法
[root@rocky86 ~]# openssl list -digest-algorithms
......
......
#列出所有加密命令
[root@rocky86 ~]# openssl list -cipher-commands
......
......
#列出所有加密算法
[root@rocky86 ~]# openssl list -cipher-algorithms
......
- openssl passwd生成用户密码
分析shadow中密码段的信息
$6 --sha512
$rmW2sTVQ7dIOwDXW$ --salt val
$W3sfj9./1XisruDpleqdmtiT4UcI25wfzNJmouLD
/EQcOpqNGqdhT5H8UXrjA7ptYmjChLddmIGthxp64UgiR. --加密处理过的密码
- openssl 随机数生成
#直接使用会乱码,默认是以二进制输出,不一定都是可打印字符
[root@rocky86 ~]# openssl rand 10
标签:公钥,加密,证书,CA,安全,密钥,15,客户端 From: https://blog.51cto.com/u_15791168/5786020