这篇博客主要介绍的内容有对称加密,非对称加密,单向加密,秘钥交换,CA,pki

操作部分主要有:对称加密,非对称加密,单向加密的实现,以及openssl的常用功能,生成密码,生成随机数,以及使用openssl创建私有CA

  数据安全的定义:

  保密性:防止别人偷看

   数据保密性

    隐私性:信息不被随意的收集

  完整性:防止别人修改

   数据完整性:信息或程序只能别制定或授权的方式改变不能被随意的修改

   系统完整性:确保系统以正常的方式执行预定的功能

  可用性:数据与服务随时可用

常见的加密方法和算法

对称加密

什么是对称加密 

 对称加密算法使用同一密钥提供安全的保护,加密和解密使用的是一个密钥

加密和解密流程图
1.两台服务器共享密钥,以使用同一个密钥进行加密和解密。

2.服务器A给服务器B发送数据,使用算法和密钥一起将数据加密,然后发送给服务器B

3.服务器B接受到数据后,使用算法和密钥进行解密,得出明文数据。

加密解密基础、PKI及SSL、创建私有CA_服务器说明:加密数据依赖与算法和密钥,安全性依赖于密钥。因为算法是公开的人人都可以得到,但是密钥只有主机才有。

常见的算法:

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生成私钥和公钥。

加密解密基础、PKI及SSL、创建私有CA_流程图_02

服务器B将生成的公钥传送给服务器A

加密解密基础、PKI及SSL、创建私有CA_数据安全_03

服务器A使用服务器B的公钥将数据加密,这个时候只有服务器B的私钥可以解密,就连加密的A服务器也无法解密

加密解密基础、PKI及SSL、创建私有CA_服务器_04

然后A服务器将加密后的数据传输给B服务器,传输到B服务器之后,B服务器用自己的私钥解密,整个过程来说是安全的,因为私钥没有在公网传输。

加密解密基础、PKI及SSL、创建私有CA_数据安全_05

整个加密过程私钥都在服务器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,使用接收方的公钥加密此临时密钥,附加在对称加密后的数据后方;


加密解密基础、PKI及SSL、创建私有CA_安全性_06接收方:

1,使用自己的私钥解密加密的临时密钥;从而获得对称密钥;

2,使用对称密钥解密对称加密的数据和私钥加密的特征码密文;从而获得数据和特征码密文;

3,使用发送方的公钥解密特征码密文,从而获得从计算机生成的特征码;

4,使用与对方的单向加密算法计算数据的特征码,并与解密而来的特征码进行比较;

加密解密基础、PKI及SSL、创建私有CA_流程图_07

 数字证书CA

  公钥在网络传输过程中,无法保证可信度,容易被窃取或者伪装,所以我们就需要一个受信任的第三方机构CA来保证公钥信息的安全分发。

  如果用户想得到一份属于自己的证书,应该先向CA提出申请。在CA判明申请者的身份后,便为他分配一个公钥,并且CA将该公钥与申请者的身份信息绑在一起,并为之签字后,形成证书发给申请者。

  如果一个用户想鉴别另一个证书的真伪,他就用CA的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的,证书实际是由发证签证机关CA签发的对用户的公钥的认证。

 问题:机构A发给用户A证书,机构B发给用户B证书,那么用户A和B还是不信任的,这个时候就需要有一个根CA,让所有证书颁发机构都信任根,用户就可以通过查询根证书得知此证书的可信度;如何保证用户在获取CA证书的时候不被劫持,这点不用担心,操作系统的提供商的windows在安装完成操作系统的时候就自动让你的计算机信任了根CA

图解:没有跟CA不同机构颁发的证书互不信任。

加密解密基础、PKI及SSL、创建私有CA_数据加密_08

有了根CA之后,证书颁发机构信任根CA,不同证书颁发机构只要信任根CA那么颁发的证书都是受信任的。

加密解密基础、PKI及SSL、创建私有CA_数据安全_09

查看内置在系统的受信任的根证书的颁发机构

加密解密基础、PKI及SSL、创建私有CA_流程图_10

 

  PKI公钥基础设施

  签证机构:CA

   用户在注册机构注册证书,CA就会签发用户的公钥认证,并且和申请者的身份信息绑定在一起并且签名后,以证书形式发给申请者,然后在本地的证书存取库备份(可以理解成现实社会的公安部)

  注册机构:RA

  一般用户都是在这里注册证书(可以理解成现实社会的派出所)

  证书吊销列表:CRL

    如果用户私钥丢失,必须要申请吊销证书,否则可能会被人冒名顶替。

  证书存取库:

  所有发出的证书都会在这里存一份,如果丢失证书可以在这里得到,如果丢失私钥的话,那么只能申请撤销证书。


 openssl

openssl的组成:

libcrypto:加密,解密库文件;

libssl:ssl协议实现

openssl:多用途的命令行工具,每种功能都能使用专用的子命令来实现

 子命令分类:

加密解密基础、PKI及SSL、创建私有CA_数据安全_11

加密解密基础、PKI及SSL、创建私有CA_数据安全_12

加密文件(对称加密)

工具: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文件

加密解密基础、PKI及SSL、创建私有CA_数据安全_13

加密解密基础、PKI及SSL、创建私有CA_数据安全_14

单向加密

算法:md5,sha1

工具:openssl dgst md5sum,sha1sum,sha224sum,sha256sum,sha384sum,sha512sum

语法:openssl dgst -cipher/path/to/somefile

实例:下图所示

 加密解密基础、PKI及SSL、创建私有CA_安全性_15

生成密码

语法: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

加密解密基础、PKI及SSL、创建私有CA_流程图_16

补充:如果想要了解更多参数,可以打开配置文件旁边有英文注释


工作目录:/etc/pki/CA/

加密解密基础、PKI及SSL、创建私有CA_流程图_17

建立私有CA

(1)生成私钥文件

加密解密基础、PKI及SSL、创建私有CA_数据加密_18(2)生成自签证书

加密解密基础、PKI及SSL、创建私有CA_服务器_19参数说明:

-new:生成新的证书签署请求;

-x509:直接输出自签署的证书文件,通常只有构建CA是才这么用;

-key:私钥文件路径,用于提取公钥;

-days N:证书有效时长,单位为天

-out :输出文件保存位置;

(3)提供辅助文件

  cd /etc/pki/CA

  touch index.txt :生成索引文件

 echo 01 > serial :生成序列号文件


 3.给节点发证书

  1,节点申请证书

在证书申请的主机上进行如下步骤:

(1)生成私钥:

加密解密基础、PKI及SSL、创建私有CA_数据安全_20

(2)生成证书请求;

   注意:

   (a)其中的subject信息部分,要与CA的保持一致;

   (b)Common Name 要使用此主机在通信真实使用名字

    加密解密基础、PKI及SSL、创建私有CA_数据安全_21


(3)把请求发送给CA


加密解密基础、PKI及SSL、创建私有CA_安全性_22

(4)CA签署证书并且把证书返还给请求者

加密解密基础、PKI及SSL、创建私有CA_服务器_23查看索引和序列号文件已经有信息了加密解密基础、PKI及SSL、创建私有CA_数据加密_24

   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

由于吊销证书用的不是很多,我在这里只列出了基本的步骤。