加密、解密,以及OpenSSL建立私有CA

          加密解密的技术


一、对称加密


    加密方和解密方使用是同一个密钥,加密解密的速度都很快,先将数据明文分成数据块儿,一般来讲是大小相同的,如果到最后剩下的不能与其他数据块儿的大小相同,那么就给它添加一些填充物,然后对每个数据块儿逐个加密,然后把加密后的数据块儿发给对方,每一次管理一块儿,但是,加密后的块儿怎么处理,因为每一个块儿都是单独处理,对方在破解数据时每一块儿独立破解,也就是说这样的加密过程对反破解并没有任何帮助。

    对于加密以后的数据块儿的处理有以下两种方法:

① ECB:每一块儿单独加密,加密一个传递一个;

② CBC:加密后密文块链,通过抑或运算实现,每一个数据块,在发送给对方之前会实现将此数据块与此前的数据块做一次抑或运算,并把结果发送给对方,所以得不到第一个块,得到其他也就没有用,即使是第一块,也会和一个随机数进行抑或运算,其最大好处在于,做两次抑或运算后可以将数据还原。

 

    常见算法:

DES:Data Encryption Standard, 56bits数据加密标准,使用56位的密钥长度

3DES: 在DES被机器硬件更新所摧残破解后不甘心退出历史而产生,对原有数据做3次复合加密(不是简单的三次DES加密)

AES: Advanced Encryption Standard, (128bits, 192, 256, 384, 512bits)

Blowfish

Twofish

IDEA

RC6

CAST5

    缺陷:1、一个人跟众多对象通信的时候需要记的密码过多;

  2、密钥分发困难,是最大的难题,没有一种可靠的手段将密钥送给一个没有见过面的对象。

 

二、非对称加密


    非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。

    公钥加密算法:DSA,RSA,EIGamal

    加密方和解密方使用不同的密钥

    现在主流的密钥长度是2048

    用处:

身份认证:私钥拥有者用自己的私钥加密的数据,只要用其公钥能解密,即可认证私钥拥有者的身份;

密钥交换:与被通信方通信之前,首先获取到对方的公钥,自己生成一个加密密码,用对方的公钥加密,并发送给对方;

数据加密:加密过程太慢,一般不做数据加密。

    缺陷:加密速度慢,比对称加密慢3个数量级 1000倍,一个数量级10倍;

  公钥加密一般不用于加密数据,主要用于实现用户认证,数据加密主要是通过对称加密实现的;

    如何实现用户认证:

现在假设,有两个通信的对象,一个较小黑,一个较小白,现在小黑给小白发了一封电子邮件,但是,小白在接受邮件的时候不希望自己的邮件的内容被篡改,这时小黑就将邮件内容加密且说自己是小黑,并产生一个公钥和一个私钥,私钥小黑会随身携带,而且不能外泄,公钥则连同邮件一起发给小白,这是小白拿着小黑的公钥如果能够解密,则说明小黑就是小黑。这就实现了认证,但是如果小黑加密的数据很大,再加上公钥加密要用很长时间,等加密好,小黑也无语了,所以小黑加密的不是数据而是这段数据的特征值。

 

三、单向加密


    单向加密就是去计算一段数据的特征值,加密过程是不可逆的,是去计算一段数据的特征码,是独一无二的,用于对数据完整性的校验。

    特点:

雪崩效应:输入的数据有一点点不同,结果会有巨大不同,主要目的在防暴力破解

②定长输出:无论你输入的数据是多长,输出的结果都是一样长度

    算法:

MD5:message digest,输出结果固定长度128bit

SHA1:secure hash algorithm安全的哈希算法,输出结果固定长度160bit;

SHA256:输出结果固定长度256bit

SHA384:输出结果固定长度384bit

SHA512:输出结果固定长度512bit

    一次加密通信过程:

发送者:

1、使用单向加密算法提取生成数据的特征码;

单向加密:MD5,SHA1,SHA256,SHA384,SHA512,CRC32

2、使用自己的私钥加密特征码附加在数据后面;

非对称加密:RSA、DSA、ELGama

3、生成用于对称加密的临时密钥;

4、用此临时密钥加密数据和已经使用私钥加密后的特征码;

对称加密:DES、3DES、AES、blowfish,twofish,IDE、RC6、CAST5

5、使用接收方的公钥加密此临时密钥,附加在对称加密后的数据后方;

非对称加密:RSA、DSA、ELGama


接收方:

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

非对称解密:RSA、DSA、ELGama

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

对称解密:DES、3DES、AES、blowfish,twofish,IDE、RC6、CAST5

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

非对称解密:RSA、DSA、ELGama

4、使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较;如果这两个值相同,则说明数据完好,以上过程就实现了三重验证

单向加密:MD5,SHA1,SHA256,SHA384,SHA512,CRC32

可以实现这整个过的工具:

opssh

gpg

但是这两个过程还存在问题,就是怎么去获得对方的公钥,以及在传输公钥的时候怎么避免可能出现的欺骗呢:

IKE:互联网密钥交换,实现双方使眼色交换密钥,和密钥本身不在互联网上传播

PKI:公钥基础设施,或公钥基础架构,CA证书颁发机构,证书内放的就是通信人的公钥信息。


    怎样基于证书通信:

双方在通信时都出示证件,这个证件由某个权威机构发放,只要验证证件内的有效信息就可以验证对方的身份,但是在发证的时候怎样防止中间出现欺骗呢?

这又是一个鸡生蛋,蛋生鸡的问题,想想该如何解决呢?

所以一些操作系统在安装时就已经将一些权威的发证机构的证书放在你的电脑里了,这样在一定程度上可以解决一些问题。

 

证书的格式:X509,PKCS 

证书废弃列表:CRL

------------------------------------------------------------------------------------------

openssl建立私有CA的过程及吊销证书

一、建立私有CA

  1、生成私钥文件:   /etc/pki/CA/private/cakey.pem

        # (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

 wKiom1VEXrryNp8hAAMap8V6lqw463.jpg


  2、生成自签证书(实际上是给自己生成一个公钥)


     # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days #


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

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

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

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

          -x509:证书文件格式,只有CA才使用;

wKioL1VEYEzSpdpcAAa1Q1nNFlY647.jpg

   3、提供辅助文件

          # touch /etc/pki/CA/index.txt

          # echo 01 > /etc/pki/CA/serial

wKiom1VEX2fhZE0UAAJ68qqG4Ns866.jpg

二、给节点发证书:

   1、节点申请证书

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

     (1) 生成私钥;

     (2) 生成证书签署请求;

           注意:

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

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

     (3) 把请求发送给CA;

wKioL1VEYPuidzYqAAjJI0XKDMQ184.jpg

   2、CA签发证书

       (1) 验正请求者信息

       (2) 签署证书

            # openssl ca -in /PATH/FROM/CSR_FILE -out /PATH/TO/CRT_FILE -days N

       (3) 把签署好的证书发还给请求者

wKiom1VEYv_DL23BAAvknNcJgDs478.jpgwKioL1VEZWjwzb76AAZuh_qddTc092.jpg

三、吊销证书:

   1、获取吊销证书的序列号;

        # openssl x509 -in /PATH/FROM/CRT_FILE -noout -serial -subject

wKiom1VEZKWQSozKAAK2VXFK0Ng377.jpg

   2、实现证书吊销

       (1) 吊销证书

            # openssl ca -revoke /etc/pki/CA/newcerts/NUM.pem

              NUM:查询到的要吊销证书的序列号


       (2) 生成吊销证书的编号

            # echo 01 > /etc/pki/CA/crlnumber


       (3) 更新证书吊销列表

            # openssl crl -gencrl -out /etc/pki/CA/crl/NAME.crl

               NAME : 自己取的名字

wKioL1VEZiDSsQOdAASJF2qQ-oA244.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章