首页 > 代码库 > Linux之加密和解密技术

Linux之加密和解密技术

加密和解密技术



本章内容:

  • 安全机制

  • 对称加密

  • 不对称加密

  • 散列算法

  • PKI和CA



相关知识:

1)传输层协议:

       TCP(面向连接),UDP(面向无连接),SCTP(流控协议)

2)port(端口):传输层协议都会提供端口,

       端口(port)是标记进程的地址,进程向内核注册才能使用某端口(独占)

       任何一个进程占领某个端口之后,其他进程进不能使用了;

3)同一主机上的进程间通信:

       IPC,message qoeue(消息队列),shm(共享内存),semerphor

4)不同主机间的进程通信

        通过套接字方式来实现(socket) 

               cip:port<-- -->sip:port(客户端ip和端口到服务端ip和端口)

5)监听模式LINTEN(ip:port),

       无论有没有人访问,它都要打开自己的进程,并监听在某个ip:port上,随时等待客户端请求;

       为某些众所周知的应用,事先分配好一个固定的端口(比如http的80端口)

6)SSL :Secure Socket Layer

       http-->ssl-->https

    http协议一但调用了ssl就变成了https,从而能够完成安全通信

1.介绍

★  SSL 也就是Secure Socket Layer 叫做安全套接字协议,是一种应用层协议,主要用于数据传输的加密。OpeenSSL是SSL协议开源形式,是广泛使用的商业及SSL工具,同时OpeenSSL也是一种命令行工具;

  在计算机网络中,我们知道跨主机之间的进程通信是通过套接字方式实现的,服务器监听在某个TCP Socket之上(IP:Port),客户端在本地打开一个随机的Socket,然后通过TCP/IP协议,将请求通过交换机、路由器层层转发到目标服务器上,然后服务器可以判断出客户端请求的资源,进而转交到应用层相关服务上,服务端应用进程从磁盘上获得相应的资源信息,然后封装成相应的网络数据包格式以同样的方式层层传输给客户端对应的端口上。

  无论数据从应用层向下传输还是从下层到应用层传输,每个层次中的协议都仅仅是对数据进行封装解封装,而里面的数据本身并没有发生变化,所以,数据在发送过程当中是什么还是什么,也就是明文发送的,没有加密,任何人只要获取到了相关的数据包就能通过其他方法获知其中的铭文内容;因此就需要有一种加密机制能够保护互联网数据在传输过程中的隐秘性了;

 NIST(美国国家标准与技术研究院)定义的安全属性:

      ·保密性:数据保密性,隐私性 

      ·完整性(不可篡改):数据完整性,系统完整性

      ·可用性

攻击类型:

      ·威胁保密性的攻击:窃听、通信量分析 ;

      ·威胁完整性攻击:篡改,伪装,重放,否认;

      ·威胁可用性的攻击:拒绝服务(Dos)

 解决方案:

      ·安全机制:

              加密解密;

              数字签名;

              访问控制;

              数据完整性;

              认证交换;

              流量填充;

              路由控制;

              公证

     ·安全服务用于抵御攻击的服务

              认证服务;

              访问控制服务;

              数据保密性服务:连接保密性、无连接保密性、选择域保密性、流量保密性

              数据完整性服务;

              不可否认性服务;

 设计原则:

       ·使用成熟的安全系统

       ·以小人之心度输入数据

       ·外部系统是不安全的

       ·最小授权

       ·减少外部接口

       ·缺省使用安全模式

       ·安全不是似是而非

       ·从STRIDE思考

       ·在入口处检查

       ·从管理上保护好你的系统

安全算法

       ·常用安全技术

             认证

             授权

             安全通信

             审计

       ·密码算法和协议

             对称加密

             公钥加密

             单向加密

             认证协议

  Linux系统:OpenSSL, gpg(pgp协议的实现)

2.常见的加密算法和协议

1)对称加密

 对称加密:加密和解密使用同一个密钥

      ·DES:Data Encryption Standard,56bits

      ·3DES:

      ·AES:Advanced (128, 192, 256bits)

      ·Blowfish,Twofish

      ·IDEA,RC6,CAST5

 特性:

      ·加密、解密使用同一个密钥,效率高;

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

缺陷:

     ·密钥过多;

      ·密钥分发;

      ·数据来源无法确认


2)非对称加密(公钥加密)

 非对称加密采用公钥加密同时还需要另一个秘钥来解密,也就是私钥;两者统称为密钥对。

      ·公钥:从私钥中提取产生,公开给所有人;public key

      ·私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key

 特点

      用公钥加密数据,只能使用与之配对的私钥解密;反之亦然

 功能

      ·身份认证:私钥拥有者用自己的私钥加密的数据,只要用其公钥能解密,即可认证其身份;私钥加密的这个过程为数字签名

      ·密钥交换:发送方用对方的公钥加密后发送给对方;

      ·数据加密:适合加密较小数据

 缺点:

      密钥长,加密解密效率低下

 算法:

      RSA(加密,数字签名),DSA(数字签名),ELGamal


基于一对公钥/私钥对

      用密钥对中的一个加密,另一个解密

 实现加密过程:

       ·接收者

           生成公钥P和私钥S

           公开公钥P,保密私钥S

       ·发送者

           使用接收者的公钥P来加密消息M

           将P(M)发送给接收者

       ·接收者

          使用私钥S来解密:M=S(P(M))

 实现数字签名:

       ·发送者

           生成公钥/私钥对:P和S

           公开公钥P,保密密钥S

           使用私钥S来加密消息M

           发送给接收者S(M)

       ·接收者

           使用发送者的公钥来解密M=P(S(M))

           结合签名和加密

           分离签名

    

3)单向加密

 只能加密,不能解密,因为解密过程是一个二次加密的过程;主要是提取数据的特征码,即“数据指纹”

特性

       ·任意长度输入

       ·固定长度输出

       ·若修改数据,指纹也会改变(“不会产生冲突”)

       ·无法从指纹中重新生成数据(“单向”)

 功能

       数据完整性(完整性校验)

       系统账号密码校验

 算法

       md5:Message Digest 5(消息摘要),128bits;

       sha1:Secure Hash Algorithm 1(安全哈希算法) ,160bits

       sha224,sha256,sha384,sha512

4)密钥交换

 钥交换(IKE):双方通过交换密钥来实现数据加密解密;密钥交换有两种

  • 公钥交换:将公钥加密后通过网络传输到对方进行解密,这种方式很有可能别截获破解,不常用;


  •  DH双方共有一些参数,共同协商加密算法,除此之外双方还有属于自己的私有参数,通过共有参数、私有参数和算法信息来进行加密,然后双方将计算后的结果进行交换,交换完成后再和属于自己私有的参数进行特殊算法,经过双反计算后的结果是相同的,而这个结果就是密钥


     如:A有p和g两个参数,A还有一个属于自己的私有参数x;

          B有p和g两个参数,B还有一个属于自己的私有参数y;

          A和B有相同的加密算法即:

              A:p^x%g

              B:p^y%g

          然后双方交换计算后的结果,此时

          A拿到B的p^y%g,B拿到A的p^x%g,双方再和自己私有参数进行相同的算法,即

              A:对p^y%g 再求x次方得(p^y%G)^x=p^xy%g

              B:对p^x%g 再求y次方得(p^x%G)^y=P^xy%g

          最后A和B的结果是一样的


  注意:整个过程中对于第三方人员来说只能获取p,g两个值,AB双方交换的是经过计算后的值,因此这种加密算法是很安全的。

5)一次加密通信过程:

发送者:

   1.使用单向加密算法提取生成数据的特征码;    (单向加密技术)

     2.使用自己的私钥加密特征码附在数据的后面; (公钥加密技术)

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

     4.用此临时密钥加密数据和已经使用私钥加密后的特征码;(对称加密技术)

     5.使用接收方的公钥加密此临时密钥,附在对称加密后的数据的后方;(密钥交换技术)

接收者:

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

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

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

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

6)CA和证书

PKI: Public Key Infrastructure

 公钥基础设施:

       签证机构:CA(Certificate Authority)

       注册机构:RA

       证书吊销列表:CRL

       证书存取库:

X.509:定义了证书的结构以及认证协议标准

       版本号:version

       序列号:serial number CA用于唯一标识此证书;

       签名算法标志:

       颁发者:即CA自己的名称;

       有效期限:两个日期,起始日期和终止日期

       主体名称:证书拥有者自己的名字

       主体公钥:证书拥有者自己的公钥信息

       发行者的唯一标识:

       证书主体的唯一标识

       CRL分发点:

       扩展信息

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

验证证书过程

   1.用CA的公钥去解密CA的全名,能解密说明证书来源可靠;

     2.用同样的加密算法去加密证书取得特征码,与解密出的特征码相比较,如果二者相同,说明证书完整性可靠;

     3.检查证书的有效期限在不在当前合理的有效范围内

     4.验证主体名称和期望通信的对方是否一致

     5.检查证书是否被吊销。

 证书类型

      证书授权机构的证书

      服务器

      用户证书

获取证书两种方法

     1.使用证书授权机构;

          生成签名请求(csr)

          将csr发送给CA

          从CA处接收签名

     2.自签名的证书;

          自已签发自己的公钥

3.SSL

1)介绍

SSL: Secure Socket Layer 

  • 安全套接层,是为网络通信提供安全及数据完整性的一种安全协议;

  • SSL为Netscape在1994年所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络之上传输过程中不会被截取及窃听;

  • TLS: Transport Layer Security(SSL的继承版本)与SSL在传输层对网络连接进行加密;

  • 发展历程:

        1995:SSL 2.0 Netscape研发

        1996: SSL 3.0 

        1999: TLS 1.0 IETE研发

        2006: TLS 1.1 RFC(Request For Comments )4346

        2008:TLS 1.2 当前使用

        2015: TLS 1.3

功能:机密性,认证,完整性,重放保护;

分层设计:

  • 最底层:基础算法原语的实现;

  • 向上一层:各种算法的实现;

  • 再向上一层:组合算法实现的半成品;

  • 用各种组件拼装而成的各种成品密码及协议软件

两阶段协议,分为握手阶段和应用阶段

  • 握手阶段(协商阶段):

         客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成。

  • 应用阶段:

        在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信。







































Linux之加密和解密技术