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

一、加密解密技术基础

(一) 安全的目标:
      1.保密性,confidentiality
      2.完整性,integrity
         系统完整性,数据完整性
      3.可用性,avaliability
(二) 攻击类型:
     1. 威胁保密性的攻击:窃听、通信量分析
     2. 威胁完整性的攻击:更改、伪装、重放、否认
     3. 威胁可用性的攻击:拒绝服务(DoS)
(三) 解决方案:
      技术(加密和解密)、服务(用于抵御攻击的服务以及为了实现上述目标而特地设计的安全服务)
     1. 加密和解密
         传统加密方法:替代加密算法、置换加密算法
         现代加密方法:现代块加密方法、
     2. 服务:
         认证机制
         访问控制机制
     3. 密钥算法和协议
        (1) 对称加密:加密和解密使用同一个密钥
             算法:
                 DES:Data Encryption Standard
                 3DES:Triple DES
                 AES:Advanced Encryption Standard(128bits,192bits,256bits,384bits)
                 Blowfish
                 Twofish
                 IDEA
                 RC6
                 CAST5
           特性:
                加密、解密使用同一个密钥
                将原始数据分隔成为固定大小的块,逐个进行加密
            缺陷:
                密钥过多,作为服务器,要与很多客户端通信的话,就必须给每个客户端一个密钥。
                 密钥分发困难 
      (2) 公钥加密:密钥成对出现,分为公钥和与之配对的私钥
            公钥:pubkey,从私钥中提取产生,可公共给所有人
            私钥:secret key,通过公钥加密解密工具创建,使用者自己留存,必须保证其私密性
            特点:用公钥加密的数据只能使用与之配对的私钥解密,反之亦然
            用途:
                 数字签名:主要在于让接收方确认发送方的身份,身份认证
                 密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方
                 数据加密(比对称加密要慢3个数量级,不常用)
            算法:RSA,DSA,ELGamal
                 DSS:Digital Signature Standard
                 DSA:Digital Signature Algorithm
        (3) 单向加密:提取数据指纹(特征码)只能加密不能解密
            特性:定长输出、雪崩效应
            功能:数据完整性验证
            算法:
                 md5:Message Digest 5,128bits
                 sha1:Secure Hash Algorithm 1,160bits
                  sha224,sha256,sha384,sha512
      (4) 密钥交换:IKE(Internet Key Exchange)
二、  PKI:Public Key Infrastructure,公共基础设施
  (一) 四个组件:
         签证机构:CA
         注册机构:RA
         证书吊销列表:CRL
         证书存取库:
  (二) X.509v3:定义了证书的结构以及认证协议标准
        证书版本号
        序列号
        签名算法ID
        发行者名称(CA自己的名称)
        有效期限
        主体名称(个人名称)
        主体公钥
        发行者的唯一标识(CA的唯一标识)
        主体的唯一标识(个人的唯一标识)
        扩展
        发行者的签名
  三、 SSL会话

(一)主要有三步

1. 客户端向服务器索要并验证证书;
        2.双方协商生成“会话密钥”;
            前两步称为握手阶段
        3.双方采用“会话密钥”进行加密通信
  (二) SSL Handshake Protocol,执行流程
        第一阶段:ClientHello:客户端发送请求
            (1) 客户端向服务器端发送支持的协议版本,比如tls 1.2
            (2) 客户端生成一个随即数,用于稍后用户生成“会话密钥”
            (3) 客户端发送自己支持的加密算法:比如:AES,RSA
            (4) 支持的压缩算法
        第二阶段:ServerHello:服务器端回应请求
            (1) 确认使用的加密通信协议版本,比如tls 1.2
            (2) 服务器端生成一个随机数,用于稍后生成“会话密钥”
            (3) 确认使用的加密方法
            (4) 服务器发送自己使用的证书
           (索要客户端证书,一般不会索要,除非在特定的场景中)
        第三阶段:
            (1) 客户端收到服务器端回应,先验证服务器证书(发证机构、证书完整性、证书持有者、证书有效期、吊销列表),在确认无误后取出其公钥
             (2) 客户端发送以下信息给服务器端
                  一个随机数,用于服务器公钥加密
                  编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送
                  客户端握手结束通知
        第四阶段:
            (1)  服务器收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所用到的“会话密钥”
            (2) 服务器向客户端发送如下信息
                 编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送
                 服务器端握手结束通知

四、OpenSSL
(一) 组件:
     1. libcrypto,ibssl主要由开发者使用
     2.openssl:多用于命令行工具
   
(二) openssl的众多子命令:
     1. 标准命令:Standard commands
           enc,ca,req,genrsa
     2.消息摘要命令:Message Digest commands
           dgst子命令
     3. 加密命令:Cipher commands
           enc子命令  
 (三) 标准命令
      1. 对称加密:
        工具:openssl enc,gpg
        支持的算法:3des, aes, blowfish, towfish
            enc命令:
         加密:~]# openssl enc -e -des3 -a -salt -in fstab  -out fstab.ciphertext

         解密:~]# openssl enc -d -des3 -a  salt -out fstab  -in fstab.ciphertext

      2. 单向加密
        工具:openssl dgst,md5sum,sha1sum,...
            dgst命令:计算特征码
             ~]# openssl dgst -md5 /PATH/TO/SOMEFILE
             ~]#  md5sum /PATH/TO/SOMEFILE

             只要使用的是同一个加密算法,特征码将会是一样的,只是显示的格式有所不同
      3. 生成用户密码:
        工具:passwd,openssl passwd
            ~]# openssl  passwd  -1  -salt  SALT

      4. 生成随机数
        工具:openssl rand
            (1) ~]# openssl  rand  -hex  NUM

表示16进制的编码,NUM字节数

(2) ~]# openssl  rand  -base64  NUM
                 结果后面有==,是固定格式,真正使用的时候要去掉==

5. 公钥加密:
        加密解密
             算法:RSA,ELGamal
             工具:openssl rsautl,gpg
     6. 加密过程: 
      (1) 发送方发送数据给接收方,发送方先用单向加密算法计算出这段数据的特征码,然后用自己的私钥加密这段特征码生成数字签名,附加到这段数据后面,从而可以确保自己的身份以及数据的完整性得到验证,但是数据的保密性得不到验证。
      (2) 发送方自己使用对称加密算法生成一个临时的对称密钥,用对称加密算法结合密钥加密整段数据,包括原始数据以及加密过的特征码。
      (3) 为了保证接收方能够解密,然后发送方会用接收方的公钥加密刚才的临时密钥并附加到加密密码后面,把整个的数据发送给接收方。
    7. 解密过程:
      (1) 接收方收到这段数据之后,先用与接收方加密数据的公钥配对的私钥解密解密加密的对称密钥
      (2) 得到对称密钥,然后用对称密钥解密整个这段数据
      (3) 用发送方的公钥解密这段数据后面附加的特征码,能解密的话,发送方的身份得到验证
      (4) 接收方用同样的对称算法计算这段数据的特征码,并与解密出来的特征码进行比较,如果相同数据完整性得到了验证。
        这样的话数据的完整性、保密性以及发送方身份得到验证。
   8. 数字签名 
      算法:RSA,DSA,ELGamal
     工具:openssl rsautl,gpg
     数字签名的实现方式:
          身份认证过程中就依赖了数字签名,发送方用自己的私钥加密数据特征码得到的结果就是数字签名.
   9. 密钥交换
     算法:DH
     密钥交换的实现方式:
          发送方自己生成密钥,然后用对方的公钥加密这段数据,然后发送给接收方,只有接收方的私钥才能够解密,解密出来以后就可以得到发送方自己生成的密钥,然后就可以解密数据,以后双发的通信就一直使用这个密钥。
   10. 生成密钥:
     (1) 生成私钥:~]# (umask 077;  openssl  genrsa  -out  /PATH/TO/PRIVATE_KEY_FILE  NUM_BITS)
          使用umask 077是为了让生成的私钥只能自己读写,其他任何人都没有任何权限
          把命令放到()里面是为了让命令在子shell里面运行,umask命令只对子shell有效,将不会影响当前shell的以后的操作.
          NUM_BITS:位长,必须是2^n,比如512,1024,2048...

(2) 提出公钥:~]#  openssl  rsa  -in  /PATH/FROM/PRIVATE_KEY_FILE  -pubout

  
 11.Linux系统上的随机数生成器
    (1) /dev/random:仅从熵池返回随机数,随机数用尽,阻塞
    (2) /dev/urandom:从熵池返回随机数,随机数用尽,会利用软件生成伪随机数,非阻塞
        伪随机数不安全
       熵池中随机数的来源
            硬盘IO中断时间间隔
            键盘IO中断时间间隔    
五、 CA:
 (一) 种类

公共信任CA

私有CA
 (二) 建立私有CA的工具
       openssl
       OpenCA
 (三) CA的验证:
       1.用CA的公钥解密CA的签名,能解密说明CA的来源可靠
       2.用同样的加密算法加密数据取得特征码,与解密出来的特征码对比,如果一样说明证书完整性得到验证
       3.检查证书的有效期限是否过期
       4.验证证书主体名称与你要通信的主体的名称是否一致
       5.检查证书是否被吊销
 (四) openssl命令:
      1. 配置文件:/etc/pki/tls/openssl.conf
      2. 构建私有CA:
        在确定配置为CA的服务器上生成一个自签证书,并为CA提供所需要的目录及文件即可
      3. 完整步骤:
         生成私钥:
              ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

         生成自签证书:
              ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
               -new:生成新证书签署请求
               -x509:生成自签格式证书,专用于创建私有CA时使用
               -key:生成请求时用到的私有文件路径
               -out:生成的请求文件路径,如果是自签操作将直接生成签署过的证书
               -days:证书的有效时长

为CA提供所需的目录及文件
          ~]# mkdir  -v  /etc/pki/CA/{certs,crl,newcerts}
           如果自动生成就不用再自己手动创建
          ~]# touch  /etc/pki/CA/{serial,index.txt}
          ~]# echo  01 > /etc/pki/CA/serial

4.要用到证书进行安全通信的服务器,需要向CA请求签署证书
        步骤:以httpd为例
             1.用到证书的主机生成私钥
                  ~]# mkdir  /etc/httpd/ssl
                  ~]# cd  /etc/httpd/ssl
                  ~]# (umask  077; openssl  genrsa -out  /etc/httpd/ssl/httpd.key  2048)

             2.生成证书签署请求
                  ~]# openssl  req  -new  -key  /etc/httpd/ssl/httpd.key  -out /etc/httpd/ssl/httpd.csr  -days  365

3.将请求通过可靠方式发送给CA主机
                  ~]# scp http.csr [email protected]:/tmp/

             4.在CA主机上签署证书
                  ~]# openssl ca  -in  /tmp/httpd.csr  -out  /etc/pki/CA/certs/httpd.crt  -days  365

                  查看证书中的信息
                  ~]# openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject

时间: 2024-10-12 20:17:42

加密解密技术基础、PKI、及创建私有CA的相关文章

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

加密解密技术基础.PKI及创建私有CA 一.背景 随着互联网的快速发展,整个互联网中涌入了大量的用户,正所谓林子大了什么鸟都有,随之而来的就是数据的安全性得不到保障:因此就有了对数据的加密及解密. 二.安全的目标 1.目标: 信息加密的目的是为了确保所传输的信息具有保密性,不被其他人所劫持后篡改信息:如果被篡改后接收方也应该能知道,而且也应该确保没被劫持的信息接收方可以读取. 2.数据在网络中传输过程中要保证三个要点: (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡改. (2)

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

加密解密技术基础,PKI以及创建私有CA 加密算法和协议:1.对称加密:加密和解密使用同一个密钥 DES:Data Encryption Standard; 3DES:Triple DES; AES:Advanced Encryption Standard; (128bits, 192bits, 256bits, 384bits) Blowfish Twofish IDEA RC6 CAST5 特性: (1)加密.解密使用同一个密钥: (2)将原始数据分割成为固定大小的块,逐个进行加密: 缺陷:

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

一.数据加密和解密概述 数据加密和解密是一门历史悠久的技术,从古代就已经出现了,一直发展到当代.其中,数据加密的目的有很多,可以是为了保证本地数据存取的安全性,可以是为了保证数据流在网络传输过程中的保密性,也可以是为了验证数据的完整性,还可以通过数据加密来实现密钥的交换等. 数据加密依赖于某种加密算法和加密密钥,而数据解密则依赖于某种解密算法和解密密钥.而在当代加密解密技术中,加密密钥既可以与解密密钥相同,也可以和解密密钥不同,这取决于使用什么方法进行加解密. 二.安全的目标 就信息传输过程来说

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

Linux基础中的加密.解密及openssl 数据为什么要加密?      由于互联网刚开始时使用的人非常少,在互联网中交流信息的人都比较"单纯"几乎没有安全问题:但随着互联网的快速发展,整个互联网中涌入了大量的用户,正所谓林子大了什么鸟都有,随之而来的就是数据的安全性得不到保障:因此就有了对数据的加密及解密. 安全的目标       信息加密的目的是为了确保所传输的信息具有保密性,不被其他人所劫持后篡改信息:如果被篡改后接收方也应该能知道,而且也应该确保没被劫持的信息接收方可以读取.

linux关于加密解密技术基础、KPI及创建私有CA

linux加密和解密技术基础.KPI及创建私有CA 一.加密方式分为:1.对称加密:加密和解密使用同一个密钥:      对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,在对称加密算法中常用的算法有:DES. 3DES.TDEA.AES.    Blowfish.Twofish          IDE.ARC6.CAST5等.    特性:      1.加密.解密使用同一个密钥:      2.强原始数据分割成固定大小的块,逐个进行加密

加密解密技术基础,pki以及自建私有CA

网络安全议题,几乎是业内人士避不开的话题,要做到网络安全,主要旨在三个方面的目标:保密性,完整性和可用性.本文在此主要对基础的加密和解密技术,ssl协议,以及ssl协议的实现实例做一些简要描述和梳理. 加密和解密: 目前对于网络安全的攻击,很大部分集中在"威胁保密性的攻击",也就是我们进场所说的数据泄露,加密和解密是目前最为直观的解决保密性问题的手段. 几种加密方式: 对称加密: 特点:加密和解密使用同一个密钥:将数据分割成多个固定大小的块,逐个加密: 缺点:密钥过多(对于服务器端,需

加密解密技术基础及PKI

为了保证网络通信安全,就对其数据进行加密和解密,涉及了密钥分发: 网警公司为http协议通信安全研发了一个库,放在应用层和传输层中间,这个库就叫ssl安全的套接字层,ssl是一个库,是公共功能,加密解密也是协议实现的: 只要应用层的程序在研发时加入了调用ssl这个库,在通信时就会自动完成加解密,实现后续网络通信: SSL: Secure Sockets Layer http --> ssl --> https http协议调用ssl后,就变成了https协议,两者实现方式差别很大,但是加密解密

加密解密技术基础以及公钥基础设施(PKI)

网络之间的通信通过传递报文的方式实现,在传递这些报文的过程中,为了保护报文内容不随意被窃取和修改,对报文进行加密就起到了至关重要的作用. 加密和解密:传统加密方法.现代加密方法. 传统加密算法:替换加密算法.置换加密算法. 现代加密方法:现代块加密方法. 加密和解密都依赖于算法的实现,但加密的安全性不能依赖于算法本身,因为算法是公开的,人人都可以知道.所以就需要通过另一种更安全的方式实现对数据报文的封装,这就需要密钥来实现. 密钥算法和协议:对称加密.公钥加密.单向加密.认证协议. 对称加密:加

加密解密技术介绍和OpenSSL介绍

网络上实现安全传输是一件非常必要的事情,此篇博文主要介绍一下四种常见的加密解密技术和PKI机制以及如何通过openssl建立私有CA. 一.加密解密技术 (1)对称加密 主要加密算法: 1.DES:Data Encryption Standard 数据加密标准 加密端:将明文划分为64bits为一块,用密钥加密产生64bits的密文 解密端:还原回64bits密文 加密和解密均使用56bits的密钥 2.3DES:Triple DES:也就是进行三次DES加密 3.AES:Advanced En