第三部分:密码技术之密钥、随机数、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就是这样的一个“框架”,将这些工具组合起来。

密码技术之密钥、随机数、PGP、SSL/TLS的更多相关文章

  1. 【密码技术】Part 4 SSL/TLS

    01 SSL/TLS基本概念 02 TLS协议流程图

  2. HTTPS 和 SSL/TLS 协议:密钥交换(密钥协商)算法及其原理

    转自:https://blog.csdn.net/andylau00j/article/details/54583769 本系列的前一篇,咱们聊了“密钥交换的难点”以及“证书体系”的必要性.今天这篇来 ...

  3. SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法

    本文转载自SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法 导语 作为一名安全爱好者,我一向很喜欢SSL(目前是TLS)的运作原理.理解这个复杂协议的基本原理花了我好几天的时间,但只要 ...

  4. 协议森林17 我和你的悄悄话 (SSL/TLS协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...

  5. SSL/TLS 高强度加密: 常见问题解答

    关于这个模块 mod_ssl 简史 mod_ssl会受到Wassenaar Arrangement(瓦森纳协议)的影响吗? mod_ssl 简史 mod_ssl v1 最早在1998年4月由Ralf ...

  6. SSL/TLS 原理详解

    本文大部分整理自网络,相关文章请见文后参考. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1 ...

  7. Android网络编程系列 一 JavaSecurity之JSSE(SSL/TLS)

    摘要:     Java Security在Java存在已久了而且它是一个非常重要且独立的版块,包含了很多的知识点,常见的有MD5,DigitalSignature等,而Android在Java Se ...

  8. [译]使用AES 256以达到SSL/TLS安全最大化

    原文链接:https://luxsci.com/blog/256-bit-aes-encryption-for-ssl-and-tls-maximal-security.html 原文发表时间:201 ...

  9. SSL/TLS原理详解

    本文大部分整理自网络,相关文章请见文后参考. 关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 ,如果你想快速自建CA然后签发数字证书,请移步 基于OpenS ...

随机推荐

  1. 基于python+requests的简单接口测试

    在进行接口测试时,我们可以使用已有的工具(如:jmeter)进行,也可以使用python+requests进行.以下为简单的接口测试模板: 一.提取常用变量,统一配置 新建一个config.py文件, ...

  2. VS2012下std::function的BUG解决办法

    VS2012版本下std::function存在问题,链接:https://stackoverflow.com/questions/13096162/stdfunction-not-compiling ...

  3. python基础:multiprocessing的使用

    不同于C++或Java的多线程,python中是使用多进程来解决多项任务并发以提高效率的问题,依靠的是充分使用多核CPU的资源.这里是介绍mulitiprocessing的官方文档:https://d ...

  4. CSS3——背景 文本 字体 链接 列表样式 表格

    背景 background-color rgb(255,0,0,1)      最后一个值表示透明度,范围是 0--1 background-image 默认平铺重复显示 background-rep ...

  5. python3 基本数据类型_1

    不得已,要学习python3了,之前了解到py2与py3有很大不同,不过学起来才能感觉到,比如print. 不过,同样的代码,可以使用py3,py2执行,结果也相似,大家可以看看. 大概因为初学,还未 ...

  6. 【HANA系列】SAP HANA SQL获取当前日期

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL获取当前 ...

  7. 【Linux开发】【Qt开发】tslibs的配置(触摸屏没有,HDMI屏幕):Qt界面响应USB鼠标

    s3c2416   linux qt4.x 由于触摸屏坏了,板子只能用鼠标了,结果以前可以用的现在鼠标突然不能用了 为此交叉编译了qt的多个版本,也换过根文件系统,以为是tslib版本的问题,却发现q ...

  8. [转帖]探秘华为(二):华为和H3C(华三)的分道扬镳

    探秘华为(二):华为和H3C(华三)的分道扬镳 https://baijiahao.baidu.com/s?id=1620781715767053734&wfr=spider&for= ...

  9. honpeyhonepy

    2019.09.15 简历编辑功能: 2019.09.23 爬虫功能(智联招聘) 2.1 AI同步功能 2019.10.08 登录功能(包括普通用户登录.管理员.招聘人员) 2019.11.10 鉴权 ...

  10. Ajax加载数据后百度分享实例

    <script type="text/javascript"> //百度分享 function baidu_share() { var title_val = $(&q ...