Linux加密算法和协议
文章目录
- 相关名词解释🤣
- 加密算法和协议
- 1 对称加密
- 2 非对称加密▼
- 1 非对称介绍
- 2 非对称实现加密
- 3 非对称实现数字签名
- 4 RSA和DSA
- 3 使用gpg实现两种加密
- ▼1 实现对称加密
- ▼2 实现公钥加密
- 4 单向哈希算法
- 5 综合应用
- 1 实现数据加密
- 2 实现数字签名
- 3 综合加密和签名▼
- 6 密码交换 IKE
相关名词解释🤣
基本概念
| 名称 | 全名 | 定义与功能 |
|---|---|---|
| STRIDE | 安全攻击 | |
| DES | Data Encryption Standard | 常用的对称加密算法 |
| RSA | RSA algorithm | RSA公钥私钥加密算法(创始人) |
| DSA | Digital Signature Algorithm | 【数字签名算法】是一种标准的数字签名算法 |
| ECC | Elliptic Curves Cryptography | 【椭圆曲线密码编码学】比RSA加密算法使用更小的密钥 |
| IKE | Internet Key Exchange | 【秘钥交换】实现安全地建立或更新共享密钥 |
| DH | Deffie-Hellman algorithm | 【实现秘钥交换的一种算法】生成对称(会话)密钥 |
| PKI | Public Key Infrastructure | 【公钥加密体系】实现远程用户之间的的通信安全 |
| CA | Certificate Authority | 【签证机构】负责颁发证书(根CA自己证明自己的权威) |
| RA | Registry Authority | 【注册机构】可以是CA,也可以是CA授权的代理机构 |
| CRL | Certificate Revocation List | 【证书吊销列表】对已经吊销的证书进行公布 |
| CSR | Cerificate Signing Request | 【证书申请文件】用户用私钥生成CSR,用来向CA申请证书 |
易混淆:
| 名 | 定义与功能 |
|---|---|
| SSL | (Secure Socket Layer)【安全传输协议】实现了信息加密、认证、数据完整、重放保护 |
| TLS | (Transport Layer Security)【安全传输协议】同上 |
| HTTPS | 【http + TLS】【加密文本传输协议】对http协议的文本数据进行加密处理 |
| OpenSSL | 开源【软件库包】,实现了基本的加密功能,实现了SSL/TLS协议 |
| SSH | (secure shell protocol)【安全shell协议】实现安全的远程登录与加密通信 |
| OpenSSH | 是ssh协议的开源实现方式之一,CentOS 默认安装此程序 |
加密算法和协议
- 对称加密
- 非对称(公钥)加密
- 单向加密
- 认证协议
=
1 对称加密
对称加密:加密和解密使用同一个密钥(普通人常用与普通文档加密)
【特点】
- 加密、解密使用同一个密钥,效率高
- 将原始数据分割成固定大小的块,逐个进行加密
【缺陷】
- 密钥过多
- 密钥分发
- 数据来源无法确认
【常用算法】
- DES:Data Encryption Standard,56bits
- 3DES
- AES:Advanced (128, 192, 256bits)
- Blowfish,Twofish
- IDEA,RC6,CAST5
=
2 非对称加密▼
1 非对称介绍
【特点】
- 密钥是成对出现,每个公钥唯一对应一个私钥
用公钥加密数据,只能使用与之配对的私钥解密;反之亦然 - 公钥:public key,公开给所有人,主要【给别人加密】使用
- 私钥:secret key,private key 自己留存,必须保证其私密性,用于【自已加密签名】
- 用私钥能算出对应公钥,反之不可
【实现功能】
- 用对方公钥加密——数据加密:适合加密较小数据,比如: 加密对称密钥
- 用自己私钥加密——数字签名:主要作用是让接收方确认发送方身份
【缺陷】
- 密钥长,算法复杂加密
- 解密效率低下
【常用算法】
- RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的
可实现加密和数字签名 - DSA(Digital Signature Algorithm):数字【签名】算法,是一种标准的 DSS(数字签名标准)
- ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学,比RSA加密算法使用更小的密钥,提供相当的或更高等级的安全
2 非对称实现加密
- 接收者生成【公钥/密钥对P和S】公开公钥P,保密密钥S
- 发送者使用接收者的公钥P来加密消息M,然后将P(M)发送给接收者
- 接收者使用密钥S来解密:M=S(P(M))
3 非对称实现数字签名
- 发送者生成【公钥/密钥对P和S】公开公钥P,保密密钥S
- 发送者使用密钥S来加密消息M,并将S(M)发送给接收者
- 接收者使用发送者的公钥来解密M=P(S(M))
4 RSA和DSA
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。
原理:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥
DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,【只用于签名】,它比RSA要快很多,而且安全性与RSA相比差不多
=
3 使用gpg实现两种加密
【gpg】是实现加密的命令,来自于包【gnugp】
▼1 实现对称加密
对称加密
gpg -c file
输入两次密码即可完成
# 加密成功之后生成一个新文件xxx.gpg
在另一台主机上解密file
gpg -d file.gpg
# 直接解密只能输出原文内容,不生成文件
【生成文件】的方法:
gpg [-o file] -d file.gpg
gpg -d file.gpg > file
▼2 实现公钥加密
说明:
centos7 gpg --gen-key
centos8 的 gpg --gen-key 默认开启快捷模式,正常: gpg --full-gen-key
演示过程:在hostB主机上用【A公钥】加密文件boot.html,在hostA主机上用【自己的私钥】解密
注意:gpg在centos7/8上【创建密钥】的操作过程有微小差别
-
在接收方centos7主机上【生成公钥/私钥对】
gpg --gen-key # Your selection? (1) RSA and RSA (default) # What keysize do you want? (2048) 1024 # Key is valid for? (0) 0 = key does not expire # Is this correct? (y/N) y # 输入Real name: # 输入Email address:(可选项) # 描述信息:Comment: (可选项) Change (N)ame, (E)mail, or (O)kay/(Q)uit? # 输入O 表示下一步 Please enter the passphrase to protect your new key '不设密码的情况:'# 要求输入密码保护私钥(timeout=30)# 直接两次 # 继续坚持选择# 要求再次输入:继续直接 OK '设置密码的情况:'# 输入密码,提示密码太弱,铁头娃选择 # 再次输入:Please re-enter this passphrase OK 然后提示随便【进行一些硬件操作】以创建密码# 此操作最好直接在VM上操作,否则抓不到键盘鼠标的操作内容 创建成功:# 存放目录:gpg: /root/.gnupg/trustdb.gpg -
在centos7主机上【查看公钥】
# 一般查看公钥不是去浏览文件,而是使用命令 gpg --list-keys[root@CentOS7 ~]#gpg --list-keys /root/.gnupg/pubring.gpg '公钥的路径' ------------------------ pub 1024R/B2C25345 2020-09-03 uid centos777 '表示所有者,重要凭证' sub 1024R/58F0441F 2020-09-03[root@CentOS7 ~]#tree .gnupg/ .gnupg/ ├── gpg.conf ├── private-keys-v1.d 'centos7私钥' ├── pubring.gpg 'centos7公钥' ├── pubring.gpg~ ├── random_seed ├── secring.gpg ├── S.gpg-agent └── trustdb.gpg1 directory, 7 files -
在centos7主机上【导出】公钥
# 公钥是特殊文件,不能直接复制粘贴发送源文件,需要【导出】 gpg -a --export -o centos7.pubkey[root@CentOS7 ~]#ls dead.letter [root@CentOS7 ~]#gpg -a --export -o centos7.pubkey # 导出文件名可自定义 [root@CentOS7 ~]#ls centos7.pubkey dead.letter # 成功导出 [root@CentOS7 ~]# -
发送公钥文件到需加密的centos8主机上
scp centos7.pubkey 10.0.0.8:/root[root@CentOS8 ~]#ls centos7.pubkey rrreset_jacklee.sh # centos8已收到文件 -
在需加密数据的centos8主机上生成公钥/私钥对(用于5/6步骤的对比演示)
gpg --gen-key # 注意:centos8上操作步骤有所减少,生成速度变快[root@CentOS8 .gnupg]#tree . ├── openpgp-revocs.d │ └── 44CAC02F73907B9FBCE10743887C828C305B3FFF.rev ├── private-keys-v1.d 'centos8的私钥目录' │ ├── 63C50F1AB78C6C78867957FC507131D1EDB67F6B.key │ └── 8D0FF2079640AEFA0D028D459871F2EF32880BF6.key ├── pubring.kbx 'centos8的公钥' ├── pubring.kbx~ ├── random_seed └── trustdb.gpg2 directories, 7 files -
在centos8主机上【导入】7的公钥(注意centos7主机本来也有自己的公钥,如何区分?)
gpg --import centos7.pubkey [root@CentOS8 ~]#gpg --import centos7.pubkey gpg: key 34D03D46B2C25345: public key "centos777" imported gpg: Total number processed: 1 gpg: imported: 1# 此时centos8上有【多个公钥】 [root@CentOS8 ~]#gpg --list-keys /root/.gnupg/pubring.kbx ------------------------ pub rsa2048 2020-09-03 [SC] [expires: 2022-09-03]44CAC02F73907B9FBCE10743887C828C305B3FFF uid [ultimate] centos888 '识别信息' sub rsa2048 2020-09-03 [E] [expires: 2022-09-03]pub rsa1024 2020-09-03 [SC]EEC801402ADBB892E0F6790A34D03D46B2C25345 uid [ unknown] centos777 '识别信息' sub rsa1024 2020-09-03 [E] -
用centos7主机的公钥,加密centos8主机的文件【xxx】,生成【xxx.gpg】
gpg -e -r centos777 xxx 【centos777是uid,不是文件名】 其中'-r centos777'表示指定使用centos7的公钥(因为本机有多个公钥)理由:uid [ unknown] centos777 '识别信息' 加密后生成文件【xxx.gpg】执行file xxx.gpg 查看文件类型:已经是加密文件 -
发送加密文件到centos7主机
scp file.gpg 10.0.0.7:/root -
在centos7主机用自己的私钥解密文件
gpg -d xxx.gpg '只需要写文件,系统自动识别私钥'# 上述解密只能显示在屏幕,生成文件的方法: gpg -o xxx -d file.gpg gpg -d xxx.gpg > file 系统提示信息:gpg: encrypted with 1024-bit RSA key, ID 58F0441F, created 2020-09-03"centos777" -
删除公钥和私钥
# 要删除自己的一套密钥,必须先删除私钥 gpg --delete-secret-keys uidgpg --delete-keys uid
=
4 单向哈希算法
哈希算法:也称为散列算法,将任意数据缩小成【固定大小】的“指纹”,称为【digest】,即【摘要】
【特性】
- 任意长度输入,固定长度输出
- 若修改数据,指纹也会改变,且有雪崩效应,数据的一点微小改变,生成的指纹值变化非常大
- 无法从指纹中重新生成数据,即【不可逆】,具有单向性
【作用】:保证数据完整性,用来确认源数据是否发生过任何改动
【算法】:md5: 128bits、sha1: 160bits、sha224 、sha256、sha384、sha512
【运用工具】
- md5sum | sha1sum [ --check ] file
- openssl、gpg
- rpm -V
=
哈希运算得到摘要:
sha512sum file
将摘要保存到文件
sha512sum file > xxx.log
匹配检查:
sha512sum -c xxx.log# 假设对文件centos7.pubkey进行校验
成功:centos7.pubkey: OK失败:centos7.pubkey: FAILEDsha512sum: WARNING: 1 computed checksum did NOT match
=
5 综合应用
1 实现数据加密
【效果】实现数据加密,但无法验证数据完整性和来源
【原理】由于非对称加密对大文本处理速度很慢,因此可先将体量较大的源数据先进行【对称加密】,
然后再将使用的密码【用公钥】加密,实现大文件的快速加密
【发送内容】对称加密的源文件 + 将密码进行非对称加密得到的gpg文件
2 实现数字签名
【效果】不加密数据,可以保证数据来源的可靠性、数据的完整性和一致性
【原理】先对源数据进行【哈希运算】得到摘要,然后再将得到的摘要【用私钥】加密,实现数字签名
【发送内容】源文件 + 用作者私钥加密摘要得到的gpg文件
- 接收方收到后,用作者公钥解密gpg,得到【标准摘要】
- 接收方再用同样的哈希算法操作源文件,得到【最新摘要】
- 比较两个摘要,内容一致则说明文件内容无问题
=
3 综合加密和签名▼
【效果】即实现数据加密,又可以保证数据来源的可靠性、数据的完整性和一致性
方法1(a发送data给b)
Pb{Sa[hash(data)]+data}1=hash(data) # 得到摘要
2=Sa[hash(data)] # 实现签名
3=Pb{Sa[hash(data)]+data} # 打包并用公钥加密注:无法解决数据量过大,加密解密耗时太长的问题
方法2(a发送data给b)
Pb【对称key{Sa[hash(data)]+data}】1=hash(data) # 得到摘要
2=Sa[hash(data)] # 实现签名
3=对称key{Sa[hash(data)]+data} # 打包并对称加密
4=Pb【对称key{Sa[hash(data)]+data}】 # 对简短的key进行公钥加密'全程文字详解:
1=哈希获得原文的【甲方摘要】
2=原文+摘要一起使用甲方私钥加密,得到【数字签名】
3=再把【数字签名】进行对称加密,得到【对称密文】
4=【对称密文】用乙方公钥加密,得到【传输密文】
-------------
1=用乙方私钥解密,得到【对称密文】
2=用对称秘钥解开,得到【数字签名】
3=乙方用甲方公钥解开数字签名,得到:原文+【甲方摘要】乙方用哈希对原文运算,得到【乙方摘要】
4=比较【乙方摘要】与【甲方摘要】,匹配则文件内容无问题
=
6 密码交换 IKE
密钥交换:IKE( Internet Key Exchange )
- 公钥加密:用目标的公钥加密对称密钥(即为上一节介绍的方法)
- DH (Deffie-Hellman):生成对称(会话)密钥
DH 实现过程:
A、B协商生成公开的整数g、大素数p
A:已知 g,p
B:已知 g,p
A:生成隐私数据:a,(a
=
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
