常见的加密算法
1、对称加密
所谓对称加密,就是同一个密钥可以同时用作信息的加密和解密。
常见的对称加密算法有:DES、3DES、Blowfish、AES等。
对称加密的特点:
对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
对称加密算法的缺点是在通信之前,发送方和接收方必须商定好秘钥,然后双方都能够保存好秘钥。另外,无法实现对数据来源的确认。
对称加密的隐患是:如果任何一方的秘钥没有保存好,那么数据就不安全了;其次,收、发双方在使用对称加密时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。
其工作原理可参考下图:将原始数据分割成固定大小的块,逐个进行加密
2、非对称加密
对称加密有一个密钥,其加密与解密的过程使用一个密钥,而非对称加密有两个密钥,即公钥(public
key)和私钥(private
key),公钥与私钥是一对儿,其加密与解密的过程要使用两个密钥;如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
常见的非对称加密算法有:RSA(加密,数字签名)、DSA(数字签名)
非对称加密的特点:
非对称的优点是在收发双方通信之前,不需要协商秘钥;公钥与私钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的。
非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
非对称加密可参考下图:
RSA:
从上图可看出:在非对称加密中,发送方首先得生成一个秘钥对儿(公钥与私钥),然后公开公钥,使用自己的私钥加密数据成密文,最后发送;而接收方会用发送方的公钥对密文解密。
非对称加密可实现数字签名与对称密钥交换的功能:
数字签名:就是加密特征码,把文件指纹信息(特征码)取出来,用私钥加密特征码,数字签名的目的是验证对方的身份。
对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
注:提取特征码的过程就是单向加密
3、单向加密
所谓单向加密,就是只能加密,不能解密,其作用主要就是提取数据的特征码,又称指纹信息。
常见的单向加密算法有:MD5: 128bits定长输出, SHA1: 160bits输出;SHA256, SHA512
单向加密特点:
(1) 定长输出:无论原来的数据是多大级别,其加密结果长度是一样的;
(2)雪崩效应:原始数据微小改变,将导致结果巨大变化
(3) 不可逆
单向加密的功能:
(1) 数据完整性
(2)系统帐号密码校验
常用工具
md5sum | sha1sum [ --check ] fileopenssl、gpg
rpm -V
4、密钥交换
密钥交换,IKE(Internet Key Exchange): 双方通过交换密钥来实现数据的加密解密;密钥交换有以下两种情况:
公钥加密:将公钥加密后通过网络传输到对方进行解密,不常用,因为很有可能被截取破解;
DH(Deffie-Hellman):
双方共有一些参数,共同协商加密算法,此外,双方还有属于自己的私有参数;通过共有的参数、私有参数和算法信息进行加密,然后双方将计算后的结果进行交换,交换完成后再和属于自己私有的参数进行特殊算法,经过双方计算后的结果是相同的,而这个结果就是密钥。
DH算法协商过程:
A: a,p协商生成公开的整数a,大素数p
B: a,p2、A:生成隐私数据:x (x<p ),计算得出a^x%p,发送给B
B:生成隐私数据:y,计算得出a^y%p,发送给A3、A:计算得出(a^y%p)^x = a^xy%p,生成为密钥
B:计算得出(a^x%p)^y = a^xy%p, 生成为密钥
在数据通信的过程中,加密往往都不是单一的,一个可选的加密通信过程,会有自己特有的加密算法组合,如:
a–>b
Pb{data+Sa[hash(data)]}
{Pb(key){对称key}}+{对称key{data+{Sa[hash(data)]}}}
一般地,一次加密的通信过程:
发送者:
1.使用单向加密算法提取生成数据的特征码;
2.使用自己的私钥加密特征码附加在数据后面;
3.生成用于对称加密的临时密钥;
4.用此对称密钥加密数据和已经使用私钥加密后的特征码;
5.使用接收方的公钥加密此对称密钥,附加在对称加密后的数据后方;
接收方:
1.使用自己的私钥解密加密的对称(临时)密钥,从而获得对称密钥;
2.使用对称密钥解密对称加密的数据和私钥加密的特征码密文;从而获得数据和特征码密文;
3.使用发送方的公钥解密特征码密文,从而获得计算生成的特征码;
4.使用与对方相同的单向加密算法计算数据的特征码,并与解密而来的特征码进行比较;
SSL: Secure Socket Layer
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
1995:SSL 2.0 Netscape1996: SSL 3.0
1999: TLS 1.0
2006: TLS 1.1 RFC(Request For Comments )4346
2008:TLS 1.2 当前使用2015: TLS 1.3
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:
SSL记录协议(SSL Record
Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL
Handshake
Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
Openssl
Openssl是ssl的一个,其由三部分组成:
openssl: 命令行工具,实现私有证书颁发机构
libcrypto: 加密算法库
libssl:加密模块应用库,基于会话的、实现了身份认证、数据机密性和会话完整性的TLS/SSL库、
openssl:命令行工具,实现私有证书颁发机构
众多子命令:
标准命令
消息摘要命令(dgst子命令)
加密命令(enc子命令)
标准命令:enc, ca, req, genrsa, ...
对称加密:
实现算法的工具:openssl enc, gpg
支持的算法:3des, aes, blowflsh, towflsh
示例:
[root@localhost ~]# cp /etc/inittab ./
[root@localhost ~]# openssl enc -des3 -salt -a -in inittab -out inittab.des3
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[root@localhost ~]# rm inittab
rm:是否删除普通文件 "inittab"?y
[root@localhost ~]# cat inittab.des3
U2FsdGVkX19e67iSEaNx+takTrpC3GtJ5+TggUtRTpoet+8Gdhz5e54jGsxUEe0P
52Xw1hvU3N1Q+qGUW7Fx1a5F0jN8saFB2s0NCfBQQkM1rIO1P3UHNA803tfKF+NZ
S3Wjd7gEYdpu2ji1C8gBad5gh+qtH4xkZ7+wTSFcdpxDNKfioOGcL4Ofm2ONMeSa
Hyg3AsAqTWT+8Z8WOefLlWWd5JLqlAmfIFzIR65QGI4b9PHKxae3ARn6jJSKqOYZ
pYW6F0SK/VdcT5j/yMN7GHp2MDSIg4YXn9R+8nL5fyg1BBu45MeXAnnlfP8WDRJB
nm0DqpuOX0VR0gYAUMTnhY4jZREGHiaUMj9lUQmNqb3fGyOFn9eosHkLOVqnxk0L
YQ2YEVVzQSSmkPBER4i45osZC0PH/25Z5BUSfd8pe1dNrxdgCBmMmS4FrMoctKhF
ZBz1PxwxenYWHfp2ctPf7oI/q3wZrHHVZa2HHz4FXd3ode7fNflYK3G+kS2L16SQ
rXrFTdeWmRAQc40AzTb8Sud32xU++PrIXGfRO4TUrKClXui9sLy3AuDGkVwxVcuD
FcN4SXS0YV7sE2Yo0SePV3MERhGETcBHFDKGKwKIAOABEIGqfcYbD6vKdeUy92LL
L25wbgSaOYH7kFcmGMlO5ijjCdiBaH0u1AY+nBB/gZYvprR9U4xiyPrZ4pCK4doe
[root@localhost ~]# openssl enc -des3 -d -salt -a -in inittab.des3 -out inittab
enter des-ede3-cbc decryption password:
[root@localhost ~]# cat inittab
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
[root@localhost ~]#
可见,加密有“盐” -a -salt 时,解密必须加-a -salt,否则会解密失败。但加密时可以省略-a -salt.
单向加密:
工具:openssl dgst,md5sum, sha1sum,sha224sum,...gpgdgst命令:
~]#openssl dgst -md5 /PATH/TO/SOMEFILE
[root@localhost ~]#openssl dgst md5 issue
MD5(issue)= f078fe086dfc22f64b5dca2e1b95de2c
[root@localhost ~]#
生成用户密码:
工具:passwd,openssl passwd
openssl passwd -1 -salt SALT
salt的生成–>生成随机数:
生成随机数工具:openssl rand
[root@localhost ~]# openssl rand -base64 8
Y/fAcCRad/M=
[root@localhost ~]# openssl rand -base64 12
x/Rj7tG7nuQ7W82c
[root@localhost ~]# openssl rand -hex 8
4bd62b2457add52c
[root@localhost ~]# openssl rand -hex 12
6eda721ddc2e011205b71517
[root@localhost ~]# openssl passwd -1 -salt `openssl rand -hex 4`
Password: 123456
$1$510ef137$eCOhjfTyfyye4Ynh/Y7Iq0
公钥加密:
加密解密:
算法:RSA, ELGamal
实现算法的工具:openssl rsautl, gpg
数字签名:
算法:RSA, DSA, ELGamal
实现算法的工具:openssl rsautl, gpg
密钥交换:
算法:DH
生成密钥:
生成私钥:
~]# (umask 077; openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS)
提取公钥:
~]# openssl rsa -in /tmp/mykey2.private -pubout
MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制。
CBC-MAC
HMAC:使用md5或sha1算法
随机数生成器:random和urandom
键盘和鼠标
块设备中断
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞
熵池:在操作系统上有一个叫做熵池的地址,它是用来保存硬件中断产生的随机数,即每一次硬件终端都会产生一个随机数。