数据加密和解密

起因: 为防止进程间通信的数据泄露;

    进程间的通信分为两种:

        同一主机内的进程间通信:    

            signal: 发送信号

            shm: 利用共享内存的方式, 如: 管道

            semaphore: 旗语

            message queue: 消息队列

        不同主机之间的进程间通信: (主)

            Socket-pair: 套接字

            三种类型的Socket:

                流套接字(Sockket_Stream): 基于TCP协议通信额套接字

                数据报套接字(Socket_Dgram): 基于UDP协议通信的套接字

                裸套接字, 原始套接字(Socket_Raw): 基于底层协议通信的套接字

            套接字Socket: 进程的地址标识; 

            一个套接字就是指某个特定主机上的特定应用程序;

        大多数情况下, 网络通信都是从客户端到服务器的通信; 对于服务器来说, 必须要有套接字的监听机制, 即进程的监听模式; 而通常来讲, 把具有这种监听模式的进程, 称为守护进程, 或者叫服务进程;

        服务进程所监听的套接字资源, 是在其启动之前向内核申请注册得到的; 而且, 套接字资源是所有服务进程独占的资源, 具有排他性, 如apache进程占用了80端口后, 其他的进程就无法使用80端口;

保护进程间通信的数据安全目标:

    机密性: confidentiality, 保证信息不泄露;

    完整性: integrity, 保证信息不被篡改;

    可用性: availability, 保证信息内在价值;

威胁安全的行为:

    威胁机密性的***行为: 窃听, 嗅探, 扫描, 通信量分析

    威胁完整性的***行为: 更改, 伪装, 重放, 否认

    威胁可用性的***行为: 拒绝服务(DoS)

安全解决方案:

    技术: 加密和机密;

        传统的加密方案:

            替代加密算法;

            置换加密算法;

        现代的加密方法:

            块加密算法;

    服务: 安全服务;

        身份认证;

        访问控制机制;

机密方案:

    加密算法和密钥;

    加密算法:

        对称加密算法

        公钥加密算法

        单向加密算法

        密钥交换算法

    对称加密算法: 

        加密和解密使用同一密钥;

        特征: 

            1.每对通信主机都需要保有一个相同密钥, 用于加密和解密;

            2.将原始数据分割成固定大的块, 逐个加密;

            3.加密和解密的速度比较快;

        缺陷:

            1.加密解密所需要保有的密钥数量过多;

            2.密钥分发过于困难;

        主流加密算法:

            DES: Data Encryption standard, 数据加密标准;

            NSA, 3DES

            AES: Advanced Encryption Standard, 高级加密标准;

            Blowfish, Twofish, IDEA, RC4, RC6

    公钥加密算法:

        密钥分为私钥和由私钥抽取生成的公钥组成;

        私钥: 长度有: 512bit, 1024bit, 2048bit, 4096bit, 8192bit, 1638bit;

        特点: 

            1.使用密钥对进行加密和解密; 使用私钥加密的数据, 必须由从中抽取出的公钥解密; 使用公钥加密, 必须使用与之相对的私钥才能解密;

            2.密钥长度都比较长, 加密之后的数据的安全等级较高;

        缺陷:

            加密数据的时候, 消耗的系统资源和时间都较多; 很少用来加密大批量数据;

        用途:

            数字签名: 主要用于让接收方确认发送方的身份; 使用发送方的私钥加密数据, 到了接收方之后, 使用发送方的公钥解密数据;

            密钥交换: 发送数据的一方使用接收方的公钥加密对称密钥, 将加密后的对称密钥发给对方;

            数据加密: 通常用于加密小数据;

        常用的公钥加密算法:

            RSA: 加密, 数字签名;

            DSA: Digital Si个nature Algorithm, 数字签名算法; 只能实现数字签名的功能; 有时候算法被称为DSS, Digital Signature Standard;

            ELgamal(收费的)

    单向加密算法:

        只能进行加密不能解密: 从已知数据中提取密码指纹;

        特征: 

            1.定长输出;

            2.雪崩效应(蝴蝶效应);

        功能: 保证数据的完整性;

        常用的算法:

            md5: Message Digest Version 5, 信息摘要算法的第五版; 128bit定长输出;

            sha系列:

                sha-1: Sha-1: Secure Hash Algorithm, 安全哈希算法; 160bit定长输出;

                sha224, sha256, sha384, sha512

    密钥交换算法: IKE(Internet key Exchange)

        公钥加密:

        DH算法: Deffie-Hellan

加密算法的联合应用:

    1.通信双方互相交换证书, 并到信任的CA进行证书验证;

    2.发送方使用某种对称加密算法对数据进行加密; 对加密后的数据使用单向加密计算其特征值; 发送方再用自己的私钥加密此特征值, 以证明数据来源的可靠; 发送方使用接收方的证书加密对称密钥;

    3.接收方在收到数据之后, 先使用自己的密钥解密对称密钥; 然后使用发送方的公钥解密特征值, 再利用相同的单向加密算法, 重新结算加密书据的特征值; 比较两个特征值; 如果特征值一致, 则表示数据完整; 再用解密出来的对称密钥解密出原始数据;

国际标准化组织(ISO)定义了证书的结构和认证标准; X.509协议标准;

证书里面主要包括:

    拥有者的名称;

    拥有者所提供的公钥;

    有效期;

    证书的版本号;

    证书的序列号;

    签发算法ID;

    签发CA的名称;

    主体名称;

    发证者的唯一标识;

    发证者的数字签名;

    扩展信息;

PKI: Public Key Infrastructure, 公钥基础设施;

    证书的签证机构: CA

    注册机构: RA

    证书吊销列表: CRL, Certification Revoke List;

    证书存取库: CAB, Certification Access Base;

CA如何发挥其作用的:

    1.通信双方交换证书;

    2.双方协商加密算法;

    3.双方验证证书的真伪;

    4.用CA的公钥解密证书中CA的签名, 能解密说明证书来源可靠;

    5.用通用的加密算法加密证书, 取得特征值; 与解密出来的特征值比较, 如果相同, 说明证书完整性可靠;

    6.检查证书的有效期是否在合法时间范围,如果过期则证书不被认可;

    7.检查证书的主体名称和此次通信的目的是否能够对应;

SSL: Secure Socket Layer, 安全的套接字层; (在传输层与应用层之间, 是利用库加密的, 可以说是半层, 传输层与应用层之间传输数据可跳过SSL)

    历史: 1994年, Netscape(网景)公司最先声明并实施;

TLS: Transport Layer Serurity, 传输层安全;

    IETF: Internet Engineering Task Force, 互联网工程项目小组; 

    1999年提出,    TLS V1.0

    2006年, TLS V1.1

    2008年, TLS V1.2草案, 将椭圆曲线加密算法引入TLS;

    分层设计:

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

        2.向上一层: 各种算法的基本实现;

        3.再向上一层: 各种算法组合实现的半成品;

        4.最高层, 用各种组件拼装而成的各种成品密码学协议软件;

SSL/TLS的handshake(握手)的四个阶段:

    1.客户端向服务器所要证书并验证证书;

        Client Hello发送的信息内容;

            支持的协议的版本, 如: TLS V1.2;

            客户端生成一个随机数, 稍后用户生成会话密钥;

            支持的加密算法, 如: AES, DES, RSA等;

            支持的压缩算法;

    2.双方协商生成会话密钥;

        Server Hello发送的信息内容;

            确认使用的加密协议的版本号, 如: TLS V1.2;

            服务器生成一个随机数, 稍后用于生成会话密钥;

            确认加密算法及压缩算法;

    3.双方采用已经生成的会话密钥进行安全加密的通信;

        客户端验证服务器证书, 在确认无误后, 取出其公钥;

        验证服务器证书需要验证下述内容:

            验证发证机构(CA);

            验证证书的完整性;

            验证证书的持有者信息;

            验证证书的有效期;

            验证证书的吊销列表;

        客户端发送嘻嘻给服务器端:

            一个随机数, 用于服务器上的公钥加密;

            编码格式变更通知;

            表示随后的信息都将双方已经协商好的加密算法和密钥仅从加密发送;

        客户端握手结束;

    4.双方互相通告握手结束的信息;

        服务器收到客户端发送来的此次握手阶段的第三个随机数Pre-Master_Key; 计算生成本次会话所用到的会话密钥, 想客户端发送相关信息;

            编码变更通知, 变更后的信息都将用双方已经协商好的加密算法和密钥进行加密发送;

        服务器端握手结束;