码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-04-08 01:06:31      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:


在OSI模型和tcp/ip模型中,应用发送某个数据到服务器,通过很多条路径才能到达服务器,在发送的路上,因为数据是明文,且任意人都可以查看,这就给数据带来了风险。因此,加密就很有必要了。

技术分享

常见的密钥算法和协议
  对称加密(加密解密使用同一个密钥)
  公钥加密(非对称加密,公钥和私钥)
  单向加密(只能加密,不能解密)
  认证协议


对称加密

  对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加 密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密 性好,而且对计算机功能要求也没有那么高。IDEA加密标准由 PGP(Pretty Good Privacy)系统使用。

工作过程

下面举个例子来简要说明一下对称加密的工作过程。甲和乙是一对生意搭档, 他们住在不同的城市。由于生意上的需要,他们经常会相互之间邮寄重要的货物。为了保证货物的安全,他们商定制作一个保险盒,将物品放入其中。他们打造了两 把相同的钥匙分别保管,以便在收到包裹时用这个钥匙打开保险盒,以及在邮寄货物前用这把钥匙锁上保险盒。技术分享

上面是一个将重要资源安全传递到目的地的传统方式,只要甲乙小心保管好钥匙,那么就算有人得到保险盒,也无法打开。这个思想被用到了现代计算机通信的信息加密中。在对称加密中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。接收方收到密文后,若想解读原文,则需要使用加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密。


对称加密常用的算法:

    DES:Data Encryption Standard;
    3DES:Triple DES;
     AES:Advanced Encryption Standard;  (128bits, 192bits, 256bits, 384bits)
     Blowfish
     Twofish
     IDEA
     RC6
     CAST5
                
  特性:
   1、加密、解密使用同一个密钥;
   2、将原始数据分割成为固定大小的块,逐个进行加密;
                    
  缺陷:
   1、密钥过多;
   2、密钥分发困难;


公钥加密    

   与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果 用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两 个不同的密钥,所以这种算法叫作非对称加密算法。


工作过程

1.A要向B发送信息,A和B都要产生一对用于加密非对称加密算法和解密的公钥和私钥。

2.A的私钥保密(自己保存),A的公钥告诉B;B的私钥保密(自己保存),B的公钥告诉A。

3.A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。

4.A将这个消息发给B(已经用B的公钥加密消息)。

5.B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。

技术分享

       特性:        

    公钥:从私钥中提取产生;可公开给所有人;pubkey
     私钥:通过工具创建,使用者自己留存,必须保证其私密性;private key;
   特点:

    用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;
                
   用途:
     数字签名:主要在于让接收方确认发送方的身份;
     密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;
     数据加密
                
   算法:RSA, DSA, ELGamal
     DSS: Digital Signature Standard
     DSA:Digital Signature Algorithm


单向加密  

  又叫单向散列算法,又称hash函数,Hash函数(也称杂凑函数或杂凑算法)就是把任意长的输入消息串变化成固定长的输出串的一种函数。这个输出串称为该消息的杂凑值。一般用于产生消息摘要,密钥加密等。即提取出数据指纹;只能加密,不能解密;  

    特性:定长输出、雪崩效应;
     功能:完整性验证;
     常见算法:
       md5:Message Digest 5, 128bits
       sha1:安全的哈希算法 Secure Hash Algorithm 1, 160bits
           sha224, sha256, sha384, sha512
   

密钥交换:

    IKE(Internet Key Exchange)一种用以获得认证密钥的协议。

  密钥交换的两种机制:

   1、公钥加密实现:

发送方用接收方的公钥加密自己的密钥,接收方用自己的私钥解密得到发送方的密钥,逆过来亦然,从而实现密钥交换。

   2、使用DH算法:前提发送方和接受方协商使用同一个大素数P和生成数g,各自产生的随机数X和Y。发送方将g的X次方modP产生的数值发送给接收方,接受方将g的Y次方modP产生的数值发送给发送方,发送方再对接收的结果做X次方运算,接受方对接收的结果做Y次方运算,最终密码形成,密钥交换完成。


通信阶段加密解密

技术分享

BOB和ALICE通信阶段

  黑框A:表示要传输的数据
  黑框B:就是单项加密对这段数据提取的特征码,这段特征码同时运用了非对称加密,具体过程是用BOB的私钥加密,传输给ALICE,只要到达后ALICE能解密,表明对方确实是BOB。这一过程同时起到了用户认证和数据完整性的校验。黑框B又称为数字签名
  红框A:这一阶段会生成一段很长的随机数(密钥)然后配合对称加密算法对黑框A和黑框B加密,但是我们如何把加密的密钥传输给ALICE呢?这就要用到红框B了
  红框B:这一阶段是用ALICE的公钥加密这串随机数(对称加密阶段的密钥),ALICE接收到数据后如果能用自己私钥解密,那就证明接受者确实ALICE

加密过程:
  第一步:用单向加密算法提取数据(黑框A)的特征值
  第二步:用自己的私钥加密这段特征值形成黑框B
  第三步:用对称加密算法,对黑框A和黑框B来加密,得到红框A
  第四步:用ALICE的公钥来加密第三步所用的密钥,得到红框B


解密过程:
  第一步:ALICE用自己的私钥解密红框B得到对称加密的密钥
  第二步:用这个密钥解密红框A内容
  第三步:用BOB的公钥解密黑框B,如果能成功,说明发送方确实是BOB,这就完成了身份验证(解密后会得到一串数据的特征值)
  第四步:用同样的单项加密算法来对这段数据提取特征值,如果和第三步的特征值一样,说明这段数据是完整的,这就完成了数据完整性的校验


还有一个问题就是BOB和ALICE如何获得对方的公钥,或者说如何证明获得的公钥就是对方。这就需要引入另一方证书颁发机构CA,下面是对证书颁发机构跟BOB/ALICE之间的解释


  黑框C:代表要颁发给BOB/ALICE的公钥,组织,地址等信息
  黑框D:是对黑框C进行单向加密后得到的数字签名,然后用自己的私钥对其加密,传输给BOB和ALICE,拿着这个证书颁发机构的公钥(这些证书颁发机构 的公钥一般已经被microsoft事先放在windows里面,当然其他操作系统也是一样的)的BOB和ALICE如果能对这个证书进行解密,说明这个 证书颁发机构不是冒充的
  红框E:表示颁发给BOB和ALICE的证书


CA的工作方式:

技术分享


PKI

PKI(Public Key Infrastructure)公钥基础设施是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书。一个机构通过采用PKI 框架管理密钥和证书可以建立一个安全的网络环境。PKI 主要包括四个部分:X.509 格式的证书(X.509 V3)和证书废止列表CRL(X.509 V2);CA 操作协议;CA 管理协议;CA 政策制定。一个典型、完整、有效的PKI 应用系统至少应具有以下五个部分;

            公钥基础设施
     签证机构:CA
     注册机构:RA
     证书吊销列表:CRL
     证书存取库


CA:
 公共信任的CA,私有CA;
        
  建立私有CA:
    openssl
    OpenCA


openssl命令:
   配置文件:/etc/pki/tls/openssl.cnf
            
构建私有CA:
   在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;
                
步骤:

    1、生成私钥

    2、生成自签证书

    3、为CA提供所需的目录和文件


操作步骤

   (1) 生成私钥;

[root@bogon ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
Generating RSA private key, 4096 bit long modulus
..........................................................................................
..........................................................................................
.....................................................++...................................
..........................................................................................
...............................................................++
e is 65537 (0x10001)

  (2) 生成自签证书;
  

 [root@bogon ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:test
Organizational Unit Name (eg, section) []:test
Common Name (eg, your name or your server‘s hostname) []:test
Email Address []:abc@qq.com

     选项解释:

       -new:生成新证书签署请求;
       -x509:生成自签格式证书,专用于创建私有CA时;
       -key:生成请求时用到的私有文件路径;
       -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;
       -days:证书的有效时长,单位是day;
  

  (3) 为CA提供所需的目录及文件;

[root@bogon ~]#  mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts}
[root@bogon ~]#  touch  /etc/pki/CA/{serial,index.txt}
[root@bogon ~]#  echo  01 > /etc/pki/CA/serial


要用到证书进行安全通信的服务器,需要向CA请求签署证书:
  步骤:(以httpd为例)
  

(1) 用到证书的主机生成私钥;

[root@bogon ~]#  mkdir /etc/httpd/ssl 
[root@bogon ~]#  cd /etc/httpd/ssl
[root@bogon ~]#  (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

(2) 生成证书签署请求

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


(3) 将请求通过可靠方式发送给CA主机;
    U盘复制或其它可靠方式               


(4) 在CA主机上签署证书;
    

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

                        
查看证书中的信息:

[root@bogon ~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject

                            
吊销证书:
  步骤:
   (1) 客户端获取要吊销的证书的serial(在使用证书的主机执行):

[root@bogon ~]# openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject

 

   (2) CA主机吊销证书
    先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;
                        
  吊销:

[root@bogon ~]# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

   注:其中的SERIAL要换成证书真正的序列号;
                                
   (3) 生成吊销证书的吊销编号(第一次吊销证书时执行)

[root@bogon ~]#  echo  01  > /etc/pki/CA/crlnumber

                    
   (4) 更新证书吊销列表

[root@bogon ~]#  openssl  ca  -gencrl  -out  thisca.crl

                        
   查看crl文件:

[root@bogon ~]#  openssl  crl  -in  /PATH/FROM/CRL_FILE.crl  -noout  -text

                           
           

本文出自 “涛声依旧” 博客,请务必保留此出处http://zhaoyongtao.blog.51cto.com/10955972/1761505

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

标签:

原文地址:http://zhaoyongtao.blog.51cto.com/10955972/1761505

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!