加密解密技术基础、PKI及创建私有CA


一、背景  

    随着互联网的快速发展,整个互联网中涌入了大量的用户,正所谓林子大了什么鸟都有,随之而来的就是数据的安全性得不到保障;因此就有了对数据的加密及解密。

 

二、安全的目标

 1、目标:

   信息加密的目的是为了确保所传输的信息具有保密性,不被其他人所劫持后篡改信息;如果被篡改后接收方也应该能知道,而且也应该确保没被劫持的信息接收方可以读取。

 2、数据在网络中传输过程中要保证三个要点:

  (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡改。

  (2)数据的机密性:防止文件数据泄漏给未授权用户从而让其利用

  (3)数据的可用性:保证授权用户能按需访问存取文件数据

 

三、加密算法

 1、背景:

   加密在很早之前就已经存在。远在计算机还没问世之前世界上就已经出现了,例如中国古代

的虎符和信牌,或者矾书等。到现在为止密码或加密技术已经广泛应用在生活中的各种场景中,

尤其是在这个互联网时代中加密技术更是发展到了极致。


四、加密算法和协议

 1、对称加密

  (1)通信双方使用同一个密钥,将原始数据分割成固定大小的块,对数据进行逐个加密。这样就确保了就算是通信的信息被第三方知道,由于没有密钥也不能解密被加密的信息;这种加密方法确保了数据的安全性,但使用的密钥必须由安全的方式在两方之间传输。

  (2)加密算法:  

    DES:data encryption standard (数据加密标准)

     3DES: DES增强版

     AES:advance encryption standard(高级加密标准)

    (128bits,192,458,384,512bits)        

  (3)特性:

      a.加密、解密使用同一个密钥;

      b.将原始数据分割成为固定大小的块,逐个进行加密;

  (4)缺陷:

       a.密钥过多;

       b.密钥分发困难;

 2、公钥加密

   (1)公钥加密也称非对称加密,密钥分为私钥(secret key)和公钥(pubkey)。其中公钥是从私钥中提取的。而且加密解密的方式是:公钥加密必须用与之对应的私钥来解密,反之亦然;一般私钥只有加密者本身具有,对应的公钥所有人都可以得到。公钥加密主要可以实现对身份的验证。例如,A用私钥加密一个文件要送给B,B接受到后只有用与A的私钥相对于的公钥解密,如果能解密则说明这个文件是A发送的。

   (2)用途:

     数字签名:主要在于让接收方确认发送方的身份;

     密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;

     数据加密;

   (3)加密算法:

    RSA : 由麻省理工Ron Rivest、Adi Shamir、Leonard Adleman三人提出的加密算法,以三个名字首字母命名 

    DSA :Digital Signature Algorithm (数字签名算法)

 3、单向加密

    (1)单向加密的特点是只能加密不能解密。而且这种加密算术也称为hash散列函数,这种算法会把不同长度的数据压缩成固定长度的一段字符。这种加密方法一般用来验证数据的完整性。发送方用单向加密加密数据后会得到一个特征码,接收方收到数据后也用同样的算法加密数据也得到一个特征码。把这两个特征码作比较如果相同则说明数据没有被改动过。

    (2)特性:定长输出、雪崩效应;

    (3)功能:完整性;

    (4)算法:

 md5:Message Digest 5, 128bits

 sha1:Secure Hash Algorithm 1, 160bits,sha224, sha256, sha384, sha512


 4、加密过程:   

  (1)使用单向加密算法加密明文数据,生成一个特征码。保证了数据的完整性。   

  (2)Bob用自己的私钥加密特征码,附在明文数据后面(使之成为一个新数据),保证了身份认证。(加密后的特征码称为数字签名)

  (3)Bob利用对称加密算法(一次性密钥)对所有的数据加密。   

  (4)Bob再用Alice的公钥(通过可靠的手段获取,第三方认证机构CA)对生成的密钥进行加


密。

 5、解密过程:   

  (1)使用Alice的私钥先解密获取密钥。   

  (2)用得到的密钥去解密加密了的数据和特征码。   

  (3)使用Bob的公钥去解密特征码,得到在Bob发送数据的特征码。   

  (4)Alice用同样的加密算法去计算数据的特征码   

  (5)再比较3,4步中的特征码是否一致。

  三种算法结合,以实现可靠的通信(保证数据的完整性,私密性,用户认证)在上面的介绍中,虽然用到了众多加密算法,但公钥是在网络中传输,双方无法验证其可信度,则需要第三方权威认证机构(CA)才能保障


五、PKI基础内容

 1、概念:

    PKI是Public KeyInfrastructure的首字母缩写,翻译过来就是公钥基础设施;它是使用公开密钥技术和数字证书来确保系统信息安全,并负责验证数字证书持有者身份的一种体系。

 2、常用的证书格式是 x509 格式,它包含有下面的信息:

   (1)版本号(version)

   (2)序列号(serial number),CA 用于唯一标志此证书

   (3)签名算法标志(signatur algotithm ientifier)

   (4)发行者的名称,即 CA 自己的名称

   (5)有效期,起始日期和终止日期

   (6)主体自己的公钥

   (7)发行商的唯一标识

   (8)整数主题的唯一标志

   (9)扩展信息

   (10)发行者的签名:CA 对此证书的数字签名

 3、PKI的组成

  (1)签证机构: CA  (CA是PKI的一个机构,专门负责证书的签署和颁发。)

  (2)注册机构: RA

  (3)证书吊销列表:CRL 

  (4)证书存取库

 4、CA基础内容

    CA是PKI的核心,负责管理PKI结构下的所有用户的证书。通信双方认证对方身份必须要通过CA。

  (1)CA种类:公共信任的CA,私有CA;

     建立私有CA:

        OpenCA

        openssl

  (2)证书申请及签署步骤:

    (a) 生成申请请求;

    (b)RA核验;

    (c)CA签署;

    (d)获取证书;

  (3) openssl命令

        配置文件:/etc/pki/tls/openssl.cnf

        创建私有CA:

   在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件即可;(CA只需要参与签证的过程中)

步骤: 

  (1)创建所需要的文件

   ~]#touch index.txt

   ~]# echo 01 > serial

  (2) CA自签证书

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

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

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

    -x509: 专用于CA生成自签证书;

    -key: 生成请求时用到的私钥文件;

    -days n:证书的有效期限;

    -out /PATH/TO/SOMECERTFILE: 证书的保存路径;

  (3) 发证

   (a) 用到证书的主机生成证书请求;

    ~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

    ~]# openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out                    /etc/httpd/ssl/httpd.csr

   (b) 把请求文件传输给CA;

   (c) CA签署证书,并将证书发还给请求者;

   ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

    查看证书中的信息:

     ~]#openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject

  (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