zoukankan      html  css  js  c++  java
  • 密码技术之密钥、随机数、PGP、SSL/TLS

    第三部分:密码技术之密钥、随机数、PGP、SSL/TLS

      密码的本质就是将较长的消息变成较短的秘密消息——密钥。

      一、密钥

        什么是密钥?

        (1)密钥就是一个巨大的数字,然而密钥数字本身的大小不重要,重要的是密钥空间的大小,也就是可能出现的密钥的总数量,因为密钥空间越大,进行暴力破解就越困难。

        如DES的密钥的长度是56bit(7字节),三重DES中DES-EDE2的密钥长度为112bit(14字节)、DES-EDE3的密钥长度为168bit(21字节),AES的密钥长度可以是128、192和256bit。

        需要注意的是一个字节不一定对应一个字符。

        (2)密钥和明文是等价的,即对于窃听者而言,得到了密钥就等于得到了明文

        (3)密钥算法与密钥,密码算法应使用世界公认的密码算法,另外,信息的机密性不应该依赖于密码算法本身,而是应该依赖于妥善保管的密钥。

        密钥分类:

        (1)对称密码的共享密钥,公钥密码中的私钥和公钥,公钥加密,私钥解密

        (2)消息认证码的共享密钥和数字签名的密钥,私钥加签,公钥验签

        (3)对称密码和公钥密码的密钥是用于确保机密性的密钥,相对地,消息认证码和数字签名所使用的密钥,则是用于认证的密钥。

        (4)会话密钥和主密钥,一直被重复使用的密钥称为主密钥;https通信每次通信只使用一次的密钥称为会话密钥。

        (5)用于加密内容的密钥CEK与用于加密密钥的密钥KEK

        密钥的生成

          生成密钥最好的方式就是使用随机数,或者使用口令加盐PBE生成随机数

        PBE(基于口令的密码)

          基于口令的密码(Password Based Encryption,PBE)就是一种根据口令生成密钥并用该密钥进行加密的方法。其中加密和解密使用同一个密钥。

         PBE加密的步骤:

         (1)生成KEK

            首先,伪随机数生成器会生成一个被称为盐的随机数。将盐和Alice的口令一起输入单向散列函数,得到的散列值就是用来加密密钥的密钥KEK

         (2)生成会话密钥并加密

            使用伪随机数生成器生成会话密钥。会话密钥是用来加密消息的密钥CEK。

            会话密钥使用(1)生成的KEK进行加密,然后和盐一起保存在安全的地方

            将KEK丢弃,因为使用盐和口令可以重建KEK

         (3)加密消息

            使用(2)生成的会话密钥对消息进行加密

         PBE解密的步骤:

         (1)重建KEK

            将之前保存下来的盐和Alice的口令一起输入单向散列函数,得到的散列值就是KEK  

         (2)解密会话密钥

            获取之前保存下来的使用KEK加密的会话密钥,用(1)生成的KEK进行解密得到会话密钥

         (3)使用会话密钥解密消息

        盐的作用:

          盐salt是由伪随机数生成的,在生成密钥KEK时会和口令一起被输入单向散列函数。所以盐是用来防御字典攻击的。

          如果在生成KEK的时候加盐,则盐的长度越大,生成字典的候选KEK的数量也随之增大,生成候选KEK的难度就会变得巨大。

        

      二、随机数

                   随机数具有不可预测性,随机数在密码技术中扮演着十分重要的角色。

      如:生成密钥——用于对称密码和消息认证码、生成密钥对——用于公钥密码和数字签名、生成初始化向量(IV)——用于分组密码的CBC、CFB和OFB模式、生成nonce——用于防御重放攻击以及分组密码的CTR模式、生成盐——用于基于口令的密码(PBE)等。

      随机数的性质

        1、随机性——不存在统计偏差,是完全杂乱的数列

        2、不可预测性——不能从过去的数列推测出下一个出现的数

        3、不可重现性——除非将数列本身保存下来,否则不能重现相同的数列

      随机数的分类

      随机性 不可预测性 不可重现性  
    若伪随机数 yes no no 只具备随机性
    弱伪随机数 yes yes no 具备不可预测性
    真随机数 yes yes yes 具备不可重现性可用于密码技术

       伪随机数生成器

        随机数可以通过硬件来生成,也可以通过软件来生成。

        通过硬件生成的随机数列,是根据传感器收集的热量、声音的变化等事实上无法预测和重现的自然现象信息来生成的。像这样的硬件设备就称为随机数生成器(Random Number Generator,RNG)。而可以生成随机数的软件则称为伪随机数生成器(Pseudo Random Number Generator,PRNG)。因为仅靠软件无法生成真随机数,因此要加上一个“伪”字。

         

      伪随机数的种子是用来对内部状态进行初始化的。 种子是一串随机的比特序列,根据种子可以生成出专属于自己的伪随机数列。

      伪随机数生成器的内部状态,是指伪随机数生成器所管理的内存中的数值。当生成伪随机数时,会根据内存中的值(内部状态)进行计算,并将计算结果作为伪随机数输出。

       随后,伪随机数生成器会改变自己的内存状态,为下一次生成伪随机数做准备。

      伪随机数生成器:

        单向散列函数法

        (1)用伪随机数的种子初始化内部状态(即计数器)

        (2)用单向散列函数计算计数器的散列值

        (3)将散列值作为伪随机数输出

        (4)计数器的值加1

        (5)根据需要的伪随机数数量重复(2)~(4)步骤

        密码法

        (1)初始化内部状态(计数器)

        (2)用密钥加密计数器的值(AES或RSA)

        (3)将密文作为伪随机数输出

        (4)计数器的值加1

        (5)根据需要的伪随机数数量重复(2)~(4)步骤

      三、PGP——密码技术的完美结合

        PGP(Pretty Good Privacy)是一款密码软件,具备现代密码软件所需的几乎全部功能。 如:

        1、对称密码

          对称密码可以单独使用,也可以和公钥密码组合成混合密码系统,可以使用的对称密码算法包括AES、三重DES等

        2、公钥密码

          PGP支持生成公钥密码的密钥对,以及用公钥密码进行加密和解密。实际上并不是使用公钥密码直接对明文进行加密,而是使用混合密码系统来进行加密操作

        3、数字签名

          PGP支持数字签名的生成和验证,也可以将数字签名附加到文件中,或者从文件中分离出数字签名。可以使用的数字签名算法包括RSA、DSA、ECDSA等

        4、单向散列函数

          PGP可以用单向散列函数计算和显示消息的散列值

        5、证书

          PGP可以生成openPGP中规定格式的整数,以及与X.509规范兼容的证书,此外,还可以办法公钥的作废证明,并可以使用CRL和OCSP对证书进行校验。

        6、压缩

          PGP支持数据的压缩和解压缩,压缩采用ZIP等

        7、文本数据   

          PGP可以将二进制数据和文本数据相互转换

        8、大文件的拆分和拼合

          在文件过大无法通过邮件发送的情况下,PGP可以将一个大文件拆分成多个文件,反过来也可以将多个文件拼合成一个文件

        9、钥匙串管理

          PGP可以管理所生成的密钥以及从外部获取的公钥。用于管理密钥的文件称为钥匙串。

      四、SSL/TLS

        SSL/TLS是世界上应用最广泛的密码通信方法。是Web服务器中广泛使用的协议,如往上支付时Web浏览器就会使用SSL/TLS进行密码通信。

        SSL/TLS综合运用了对称密码、消息认证码、公钥密码、数字签名、伪随机数生成器等密码技术。严格来说SSL(Secure Socket Layer,安全套接层)与

      TLS(Transport Layer Security,安全层传输协议)是不同的,TLS相当于是SSL的后续版本。

        用SSL/TLS承载HTTP,对请求和响应进行加密:

        

      在敏感信息通信时,需要解决的问题:

      1、发送过程中不要被窃听,即机密性问题

      2、发送过程中不能被篡改,即完整性问题

      3、确认通信对方没有被伪装,即认证问题

      要确保机密性,可以使用对称密码,密钥用伪随机数来生成,发送密钥用公钥密码。

      要识别篡改,对数据进行认证,可以使用消息认证码,对通信对象进行认证,使用对公钥加上数字签名的整数。

      SSL/TLS就是这样的一个“框架”,将这些工具组合起来。

  • 相关阅读:
    052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
    051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
    050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句
    049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句
    048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和
    047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用
    046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项
    045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围
    剑指OFFER----面试题04.二维数组中的查找
    剑指OFFER----面试题03. 数组中重复的数字
  • 原文地址:https://www.cnblogs.com/yangyongjie/p/11739843.html
Copyright © 2011-2022 走看看