这篇博客主要介绍的内容有对称加密,非对称加密,单向加密,秘钥交换,CA,pki
操作部分主要有:对称加密,非对称加密,单向加密的实现,以及openssl的常用功能,生成密码,生成随机数,以及使用openssl创建私有CA
数据安全的定义:
保密性:防止别人偷看
数据保密性
隐私性:信息不被随意的收集
完整性:防止别人修改
数据完整性:信息或程序只能别制定或授权的方式改变不能被随意的修改
系统完整性:确保系统以正常的方式执行预定的功能
可用性:数据与服务随时可用
常见的加密方法和算法
对称加密
什么是对称加密
对称加密算法使用同一密钥提供安全的保护,加密和解密使用的是一个密钥
加密和解密流程图
1.两台服务器共享密钥,以使用同一个密钥进行加密和解密。
2.服务器A给服务器B发送数据,使用算法和密钥一起将数据加密,然后发送给服务器B
3.服务器B接受到数据后,使用算法和密钥进行解密,得出明文数据。
说明:加密数据依赖与算法和密钥,安全性依赖于密钥。因为算法是公开的人人都可以得到,但是密钥只有主机才有。
常见的算法:
1.DES:密钥长度为64位,其中8位用于奇偶校验,所以实际有效长度为56位;由于密钥长度较短,所以使用暴力破解可以很容易的在短时间内攻破DES算法,已经不建议使用该种算法。
2.3DES:DES的增强版,因为3DES使用了三个阶段的DES,即同时使用了三个不同的56位密钥,所以相当于产生了一个168为的有效密钥长度。这种算法目前还没有计算机可以在短时间内破解。
3.aes:3DES虽然是安全的,但随着计算机硬件的更新,总有一天要被攻破;AES欲取代3DES算法,它支持128位,192位和256位密钥长度,有效的密钥长度可达到上千位。更重要的是,AES算法采用了更为高效的编写方法,对cpu的占用率较少;目前广泛使用。
商用的加密算法有这些:Blowfish,twofish,IDEA,RC6,CAST5等等
特性:1,加密,解密使用同一密钥。
2,将明文分割成固定大小的快,逐个进行加密
缺陷:
1,密钥过多:如服务器A和服务器B通信需要一个密钥,和服务器C通信需要一个密钥,和服务器D通信需要一个密钥,所以你懂的。
2,密钥分发:如果服务器A和服务器B,之前没有进行过通信,需要共享密钥,但这个过程是明文的。
公钥加密
什么是公钥加密?
非对称加密算法使用两个不同的密钥“公钥和私钥”进行加密和解密,用一个加密后的数据仅能被另一个密钥解密,而不能推出另一个密钥。
密钥对:私钥和公钥
私钥:仅允许个人使用
公钥:公开给所有人获取
公钥从私钥中提取而来;使用公钥加密的数据,只能使用与此配对的私钥解密;反之亦然。
加密流程图:
服务器A和服务器B传输数据。
初始状态:服务器B生成私钥和公钥。
服务器B将生成的公钥传送给服务器A
服务器A使用服务器B的公钥将数据加密,这个时候只有服务器B的私钥可以解密,就连加密的A服务器也无法解密
然后A服务器将加密后的数据传输给B服务器,传输到B服务器之后,B服务器用自己的私钥解密,整个过程来说是安全的,因为私钥没有在公网传输。
整个加密过程私钥都在服务器B上面,没有在公网传输,大大保证了数据的安全性。
用处:
身份认证:私钥拥有者用自己的私钥加密的数据,只有用其公钥能解密,即可认证其身份;
密钥交换:与被通信方通信之前,首先获取对方的公钥,自己生成一个对称加密的密钥,用对方的公钥加密,并发送给对方
数据加密:很少使用,一般都是用来加密对称加密的密码
算法:
RSA:既能做身份认证又能做密钥交换,使用比较广泛。
DSA:只能做数字签名,即身份认证。
ELGamal:商业算法。
就算法本身的实现来讲,公钥加密技术比对称加密技术的速度慢上不止3个数量级,一个数量级就是10倍,所以3个数量级不是30倍,而是1000倍。因此,在加密数据的时候很少用到公钥去加密的。
特性:
1.密钥长度较大,例如512,2048,4096bits
2,加密解密分别使用密钥对儿中的密钥相对进行;
3,常用于数据签名和密钥交换。
单向加密
特性:
单向加密是提取数据的特征码,保证了数据的完整性。
1.定长输出:无论原来的数据是多大级别,其加密结果长度是一样的。
2.雪崩效应:原始数据的微小改变,将会导致结果的巨大变化;
3,不可逆:不能通过特征码还原数据
算法
MD5:128bits定长输出
SHA1:160bits定长输出
SHA256:256bits定长输出
SHA384:384定长输出
SHA512:512bits定长输出
用处
保证数据完整性:如在一个网站下载软件,为了验证软件在下载过程中没有被第三方修改,网站会提供一个MD5和软件的特征码,只要把MD5码下载下来和我们下载的软件进行运算就可以等到软件的特征码,只要这个特征码和网站提供的一样,说明软件没有被修改,如果不一样,百分之百就是被修改了。
数字签名:
功能:保证信息传输的完整性,发送者的身份认证,防止交易中的抵赖发生。
原理:数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接受者。接受者只用用发送者的公钥才能解密加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
密钥交换
公钥加密:通过非对称加密算法;加密对称加密算法的密钥,在用对称加
密实际要传输的数据。
DH算法:前提发送方和接受方协商使用同一个大素数P和生成树g,各自产生的随机数x和y,发送方将g的x次方mod P产生的数值发送给接收方,接受方将g的y次方mod P 产生的数值发送给发送方,发送方再对接受的结果做x次方运算,接受方对接受的结果做Y次方运算,最终密码形成,密钥交换完成。
一次加密通信过程的简单描述
上面描述的加密算法:无论是对称加密,还是非对称加密,还是单向加密都是有缺点的
对称加密:
1,密钥共享过程为明文
2,密钥过多不易管理
3,无法保证数据完整性
公钥加密:
1,加密速度慢
2,无法保证数据完整性
单向加密:
无法加密数据,只是提取数据的特征码,也就是说有人可以看到数据,但是不能修改
加密过程就是讲这几种加密算法的优点结合起来使用。
公钥加密保证对称密钥共享安全,对称加密保证加密速度,单向密钥保证数据完整性。
下面是一次加密数据和解密数据的流程图;
发送者:
1,使用单向加密算法提取生成数据的特征码;
2,使用自己的私钥加密特征码附加在数据后面;
3,生成用于对称加密的临时密钥;用此临时密钥加密数据和已经使用私钥加密后的特征码;
4,使用接收方的公钥加密此临时密钥,附加在对称加密后的数据后方;
接收方:
1,使用自己的私钥解密加密的临时密钥;从而获得对称密钥;
2,使用对称密钥解密对称加密的数据和私钥加密的特征码密文;从而获得数据和特征码密文;
3,使用发送方的公钥解密特征码密文,从而获得从计算机生成的特征码;
4,使用与对方的单向加密算法计算数据的特征码,并与解密而来的特征码进行比较;
数字证书CA
公钥在网络传输过程中,无法保证可信度,容易被窃取或者伪装,所以我们就需要一个受信任的第三方机构CA来保证公钥信息的安全分发。
如果用户想得到一份属于自己的证书,应该先向CA提出申请。在CA判明申请者的身份后,便为他分配一个公钥,并且CA将该公钥与申请者的身份信息绑在一起,并为之签字后,形成证书发给申请者。
如果一个用户想鉴别另一个证书的真伪,他就用CA的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的,证书实际是由发证签证机关CA签发的对用户的公钥的认证。
问题:机构A发给用户A证书,机构B发给用户B证书,那么用户A和B还是不信任的,这个时候就需要有一个根CA,让所有证书颁发机构都信任根,用户就可以通过查询根证书得知此证书的可信度;如何保证用户在获取CA证书的时候不被劫持,这点不用担心,操作系统的提供商的windows在安装完成操作系统的时候就自动让你的计算机信任了根CA
图解:没有跟CA不同机构颁发的证书互不信任。
有了根CA之后,证书颁发机构信任根CA,不同证书颁发机构只要信任根CA那么颁发的证书都是受信任的。
查看内置在系统的受信任的根证书的颁发机构
PKI公钥基础设施
签证机构:CA
用户在注册机构注册证书,CA就会签发用户的公钥认证,并且和申请者的身份信息绑定在一起并且签名后,以证书形式发给申请者,然后在本地的证书存取库备份(可以理解成现实社会的公安部)
注册机构:RA
一般用户都是在这里注册证书(可以理解成现实社会的派出所)
证书吊销列表:CRL
如果用户私钥丢失,必须要申请吊销证书,否则可能会被人冒名顶替。
证书存取库:
所有发出的证书都会在这里存一份,如果丢失证书可以在这里得到,如果丢失私钥的话,那么只能申请撤销证书。
openssl
openssl的组成:
libcrypto:加密,解密库文件;
libssl:ssl协议实现
openssl:多用途的命令行工具,每种功能都能使用专用的子命令来实现
子命令分类:
加密文件(对称加密)
工具:openssl enc,gpg
算法:des,3des,aes,blowish,idea,cast5
enc命令实现
加密:openssl enc -e -CIPHENAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/SOMECIPHERFILE
参数说明:
-e:表示加密
-CIPHERNAME:表示使用的算法
-salt:生成的密钥还有杂质
-a:ASCII格式输出文件
-in:加密的文件
-out:加密后的输出文件
解密:openssl enc -d -ciphername -a -salt – in /path/from/somecipherfie -out
/path/to/someefile
参数说明:
-d:表示解密
-ciphername:表示使用的算法
-in:表示解密的文件
-out:表示解密后的文件
实例:加密和解密fstab文件
单向加密
算法:md5,sha1
工具:openssl dgst md5sum,sha1sum,sha224sum,sha256sum,sha384sum,sha512sum
语法:openssl dgst -cipher/path/to/somefile
实例:下图所示
生成密码
语法:openssl passwd -1 -salt 随机数
[root@lirui ~]# openssl passwd -1 -salt 12345678 Password: $1$12345678$8Qh2RHCHKlvlYNTPtf/iY. ### [root@lirui ~]# openssl passwd -1 -salt 1234567 Password: $1$1234567$YJSQkU4k3H0ZYl8eJG5qF0 ### [root@lirui ~]#
说明:就算密钥是一样的,只要salt的随机数不一样,那么输出的加密密码就是不一样的,也就无法推出密码。
生成密钥对:
操作过程:生成私钥,从私钥中提取公钥;
生成私钥:(umask 077;openssl genrsa -out my.key 2048)
从私钥中提取公钥
openssl rsa -in my.key -pubout
生成随机数
语法:openssl rand -hex|-base64 NUM
[root@lirui ~]# openssl rand -hex 4 #######使用-hex生成随机数 32d0541b [root@lirui ~]# openssl rand -base64 4 ##########使用-base64生成随机数 RDeelw==
使用openssl构建私有CA
1,生成私钥
2,生成自签署的证书
(1)私钥用于签发证书时,向证书添加数字签名使用;
(2)证书:每个通信方都导入此证书到“受信任的证书颁发机构”
配置文件: /etc/pki/tls/openssl.cnf
补充:如果想要了解更多参数,可以打开配置文件旁边有英文注释
工作目录:/etc/pki/CA/
建立私有CA
(1)生成私钥文件
(2)生成自签证书
参数说明:
-new:生成新的证书签署请求;
-x509:直接输出自签署的证书文件,通常只有构建CA是才这么用;
-key:私钥文件路径,用于提取公钥;
-days N:证书有效时长,单位为天
-out :输出文件保存位置;
(3)提供辅助文件
cd /etc/pki/CA
touch index.txt :生成索引文件
echo 01 > serial :生成序列号文件
3.给节点发证书
1,节点申请证书
在证书申请的主机上进行如下步骤:
(1)生成私钥:
(2)生成证书请求;
注意:
(a)其中的subject信息部分,要与CA的保持一致;
(b)Common Name 要使用此主机在通信真实使用名字
(3)把请求发送给CA
(4)CA签署证书并且把证书返还给请求者
查看索引和序列号文件已经有信息了
** ** 4 吊销证书
(a) 客户端获取要吊销的证书的serial
# openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
(b) CA
先根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致;
吊销证书:
# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
(c) 生成吊销证书的编号(第一次吊销一个证书)
# echo 01 > /etc/pki/CA/crlnumber
(d) 更新证书吊销列表
# openssl ca -gencrl -out thisca.crl
** **查看crl文件:
# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
由于吊销证书用的不是很多,我在这里只列出了基本的步骤。