OpenSSL之二:密码学基本概念

15 篇文章 3 订阅
10 篇文章 3 订阅

一、密码学作用

信息加密

在这里插入图片描述
用M、P表示明文,用C表示密文,用E表示加密函数,用D表示解密函数。
加密过程公式:C = E(M)
解密过程公式:M = D©
加解密函数必须满足关系:M = D(E(M))
设计密码算法地技术称为密码编码技术;研究从密文中恢复出明文的技术称为密码分析技术。密码编码学和密码分析学统称为密码学

鉴别

鉴别能力就是指消息的接收者应该能够确认消息的发送者确实为发送者本身,入侵者不可能伪装称他人。我们称鉴别的对象为实体(可能是一个人、应用程序、一台计算机或数字终端)。解决方案是密码协议。

完整性

完整性用来确保信息没有被修改,也可以防止假冒的信息。解决方案是单向散列函数和加密算法。

抗抵赖

抗抵赖的基本特定是能够向第三方证明消息发送者确实发送了该消息。解决方案是数字签名技术。

二、密码数学

素数

如果a = mb成立,其中a,b和m都为整数,当b ≠ 0时,称b能整除a,用符号b|a表示。此时称b为a的一个因子。
如果整数p是大于1且因子仅为±1和±p,则p为素数。
如果a和b的美誉共同的素数因子,即最大公因子为1,那么a和b互素。

模运算

模运算mod:a = qn + r, 0 ≤ r <n
模运算性质:
在这里插入图片描述
等式(a×b)≡(a×c)mod n,则b≡ c mod n不恒成立,只有a与n互素时等式成立。
如果(a mod n)=(b mod n),则称a和b模n同余,记做a ≡ b mod n。
在这里插入图片描述

数学定理

费马定理

在这里插入图片描述

欧拉定理

欧拉定理时RSA算法的来源根据。
在这里插入图片描述

异或运算

疑惑运算操作符:“^”,使用xor作为标记。
在这里插入图片描述

随机数

好的随机数时生成安全的密钥的基础。
事实上,计算机上不可能产生正在的随机序列,因为计算机的状态总是有限的,所以必然存在周期性,周期性在一定程度上都是可预测的,所以就不是真正意义上的随机数。
要产生真正的随机数序列,需要找到真正随机的输入序列,这在计算机中不可能找到。解决这个问题的折中办法就时使用伪随机序列。所谓伪随机序列是指虽然该随机序列不是真正的随机序列,但是由于序列的周期足够长,使得在实际应用中使用到的相对很短的子序列看起来跟真正的随机序列没有太大的区别。也就是说,如果有一个周期为2亿的随机数产生器,而一般来说使用的位数只是几千位以下的量级,那么对于这几千位来说,可能跟一个真正的随机数产生器的输出看起来没有太大的区别,那么这个随机数序列就可以称为伪随机数序列。
伪随机数发生器,一般来说只要周期大于2256位,就基本可以使用。
但对密码学应用来说,仅仅时伪随机数是不够的,还必须具备更严格的要求,这种随机序列称为密码学意义上的安全随机序列,它们具备以下性质:

  • 是伪随机序列,即看起来是随机的,能够通过各种已知的随机性检测;
  • 随机序列是不可预测的,给出生产序列的算法或硬件和所有以前产生的随机数序列的全部知识,也不能通过计算预测下一位是什么。

大数

大数没有明确的概念,它会是一个很大的物理量。
在这里插入图片描述

三、密码算法

密码算法是用于加密和解密的函数。

算法基础

密码学的具体应用形式一般来说都表现位密码算法。密码算法一般由一个加密函数和一个解密函数组成。密码算法的主要目的是为了保密信息,如果算法的保密性是基于算法本身的,这种算法称为有限制算法,如果算法的保密性是基于密钥的,那么属于无限制算法
有限制算法安全性低,不能进行标准化和质量控制,所以一般采用加入了密钥的无限制算法。

用M、P表示明文,用C表示密文,用E表示加密函数,用D表示解密函数。

对称算法

传统密码算法、但密钥算法或秘密钥匙算法,根据加密方式不同可分为流加密算法和块加密算法。
用K表示密钥。
加密过程公式:C = EK(M)
解密过程公式:M = DK©
加解密函数必须满足关系:M = DK(EK(M))
在这里插入图片描述

非对称算法

公开密钥算法。

用Kpu表示公开密钥,Kpr表示私人密钥。

普通数据加密
加密过程公式:C = EKpu(M)
解密过程公式:M = DKpr©
加解密函数必须满足关系:M = DKpr(EKpu(M))
在这里插入图片描述
数字签名
签名过程公式:C = EKpr(M)
验签过程公式:M = DKpu©
签名和验签函数必须满足关系:M = DKpu(EKpr(M))

算法安全性

密码分析(或攻击)的方法:唯密文攻击、已知明文攻击、选择明文攻击、选择密文攻击、选择密钥攻击、社会工程(包括通过欺骗、威胁、贿赂、监视等得到密钥)。

算法安全性评估标准:价值代价、时间代价和可能性。破译算法性质大于加密数据价值、破译算法时间比加密数据有效时间更长、密钥加密的数据量远远小于破译该算法需要的数据量,则算法可以算法是安全的。

根据破译算法程度不同,算法安全分为5个等级:全部破译(得到密钥,所有密文都能恢复成明文)、全盘推导(通过分析,找出替代算法,不知道密钥便可恢复明文)、局部推导(从密文中计算出相应的明文)、信息推导(通过分析得到部分有关密钥或明文)、不能破译(除了一次一密,几乎所有算法都可被破译)。

破译算法的难易程度可以用攻击算法的复杂性来衡量

  • 数据复杂性。即攻击时需要的数据量。
  • 计算复杂性。完成攻击计算所需要的时间或计算量。
  • 存储量需求。进行攻击需要的最大存储空间。

攻击的复杂性值取决于三个因素中的最小值。

四、密码通信协议

密码学在网络中的应用总是通过通信协议的形式实现。

基于密码学的安全通信协议

基于密码学的安全通信技术总的来说有两种:一种基于对称密码算法,一种基于公开密钥算法
对称密钥算法在安全网络协议总存在密钥分配手段有限、密钥丢失危害性大、密钥个数需求量大的问题。公开密钥算法可以很好的解决这个问题,但公开密钥算法也有其缺点,就是公开密钥算法速度慢、抵抗明文攻击的能力低。
在实际使用中,我们需要同时使用这两种算法来完成通信过程。在这种协议中,使用公钥算法保护和协商会话中的密钥。而这里的会话密钥事实上一般就是对称加密算法要使用的加密密钥,用来加密真正需要传输的数据。我们称这种即使用公开密钥算法,又使用对称加密算法的安全通信协议为混合密码通信系统或混合密码系统

单向散列函数

单向散列函数又称为信息摘要函数或压缩函数。
单向散列函数的单向是指计算很容易,但求逆非常困难或实际基本不可能。所谓的散列函数,是指可以将输入长度可变的字符串映射成一个固定长度的字符串函数,这个固定长度的字符串称为散列值
单向散列函数的应用:

  • 不加密散列值:称为文件指纹或数据指纹,用于校验文件和数据的完整性。
  • 加密散列值:加密的散列值一般称为消息鉴别码MAC),功能和单向散列函数基本一样,只是只有拥有解密密钥的人才能验证该消息。
  • 单向散列函数还应用在数字签名中以提高运算速度。

数字签名

签名的性质:签名值得信任、签名不能伪造和抵赖、签名不能重用、被签名的文件不能改变。

因为数字文件的内容和信息容易被复制和修改的原因,数字签名实现起来比现实世界面临更多的困难:难以实现信任关系、难以防止伪造、难以保证被签名的内推不被修改。但现代密码学解决了这些问题,使得数字签名称为可能。可以使用下面的方案:

  • 基于对称加密算法的数字签名:签名和验签双方需要第三方仲裁者参与,并且双方各自和仲裁者共享各自的密钥。
  • 基于公开密钥算法的数字签名:解密密钥公开,用于签名的加密密钥保密,并且为了安全和防止签名伪造,要求根据解密密钥不能推算出加密密钥。
    数字签名对于抗抵赖性问题目前还是不能完全解决的。通常采用时间标记来限制一些故意泄露签名,并表示私钥丢失的抵赖行为。事实上,时间标记在实际数字签名应用中经常用来防止签名重用和信息重放等攻击。

五、密钥交换协议

在实际的密码应用协议中,通常要生成一个临时的密钥用于对信息进行加密,这个密钥称为会话密钥。会话密钥一般只在通信期间使用,又是一个通信会话还会使用多个会话密钥以增加安全性,而这些会话密钥在通信完成之后都会被销毁。
密钥交换协议就是为了解决通信双方对会话密钥的协商的安全问题。
基于对称加密算法的密钥交换协议需要第三方仲裁者的加入,但这种体系的安全性受制于仲裁者的安全性,若仲裁者被攻击,所有的私钥会被泄露。
基于公开密钥算法的密钥交换协议不需要第三方加入,一方使用公钥加密会话密钥,另一方使用自己的私钥解密得到会话密钥。公开密钥算法很适合解决密钥交换和分发的问题。
中间人攻击:公开密钥交换算法虽然解决了密钥分发和交换的问题,但由于数据在网络中传输,攻击者可以主动发起攻击,通过发布公钥时截取并替换为攻击者的公钥、攻击公钥数据库等方式将通信双方的公钥替换为攻击者的公钥,双方通信时,攻击者截取信息并使用攻击者的私钥解密获取信息,甚至修改信息。
连锁密钥交换协议可增加中间人攻击的协议。它基于这样一种技术,即拥有加密消息的一半是没有意义的,不能进行解密。分组加密算法就是一个很好的例子,分组加密算法的解密依赖初始向量,后面部分消息的解密要依靠签名的消息,所以可以先发生后面的消息,然后发送前面的部分。
使用证书的密钥交换协议可以更好的解决中间人攻击问题,公开密钥交换协议之所以容易被中间人攻击,是因为公开密钥没有跟个人的身份证明联系在一起,所以攻击者可以随意地用任何公开密钥替换通信双方地公开密钥。数字证书或数字签名及技术可以将公开密钥跟某个人地双方证明关联在一起。这个系统需要一个可信任地第三方,能够验证任何想通过验证地用户,他绝对可信。他用自己地私钥对一个用户地公钥和用户个人信息进行签名,形成一个数字证书,并且第三方地公钥完全公开,这样用户可以通过第三方地数字签名来确定通信对方发送过来地请求是不是真的。
不需要密钥交换地安全通信并非不需要进行密钥协商,只是指信息咋传输之前,可以不进行专门地密钥交换步骤,二十直接将缪要和传输信息发送给对方。发送方产生随机会话密钥,并用会话密钥加密要发送地信息,然后在使用接收者地公钥加密会话密钥(接收者公钥必须提前存储在密钥数据库或者已经存在),发送者将会话密钥加密地信息和接收者公钥加密额会话密钥一起通过网络发送给接收者。接收者使用私钥先解密得到会话密钥,在解密得到加密信息。

六、鉴别协议

鉴别是指确定一个人地身份,即确定一个人是否是他所宣称地身份。

  1. ** 基于口令地鉴别协议**,验证用户名和密码。这种方式容易受到字典攻击、容易被网络窃听、口令容易泄露、口令持有人容易被冒充。
  2. 基于公开密钥算法地鉴别协议,主机保存用户公钥,用户保存私钥。用户要认证是主机产生随机数给用户,用户使用私钥加密随机数和自己地名字,然后发给主机验签。为了保存私钥,可以为私钥增加必要地安全加固,如使用智能卡、USB Key,设置访问密码、生物认证等。
  3. 基于对称加密算法地鉴别协议,认证双方通过预先共享地密钥,加密、解密秘密值和比较秘密值。
  4. 信息鉴别:除了对用户身份进行鉴别,实际中还需要对信息鉴别,以确定信息地可信,确实是由信息地发送者发送的。基本地鉴别过程是发送者对发送信息进行单向散列函数计算,并对摘要值使用私人密钥加密,然后经信息和签名地秘密值发送给接收方。接收方收到信息后,同样对洗洗进行单向散列计算,然后用发送者的公钥解密签名的秘密值,将计算值与解密值比较,结果一致,则信息可信,完成信息鉴别。

七、混合协议

实际使用的协议往往是各种协议的部分或全部的综合。

Yahalom协议

需要第三方仲裁者的对称加密算法简单协议。
在这里插入图片描述

Kerberos协议

目前操作系统同广泛使用的协议,基于对称加密算法和可信任仲裁者,协议使用的时间标志,要求所有用户时钟与可信任仲裁者时钟相同,可以防止重放攻击(但系统时间同步很难做到,也很容易出问题)。
在这里插入图片描述

Neuman-Stubblebine

基于对称加密算法,需要第三方仲裁者,可以看作是Kerberos协议的改进版。但Neuman-Stubblebine只需要一个系统时间,不需要时间同步。
在这里插入图片描述

分布式鉴别安全协议

分布式鉴别安全协议(DASS)同时使用了公开密钥算法和对称密钥算法的协议,提供双向的鉴别和密钥交换。这种协议也需要可信的第三方仲裁者参与,它保存了所有的用户的公开密钥。
在这里插入图片描述
DASS协议的时间标记也是不同系统之间的时间,也需要时间同步,这也给该协议带来一定的漏洞。
DASS也可使用数字证书取代第三方仲裁者,但需要一个可信任的证书签发机构。

说明:《OpenSSL与网络信息安全》阅读笔记

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
面向工程应用:市面上的一些密码学课程和密码学的书籍,很多都是从考证出发,讲解算法原理并不面向工程应用,而我们现在缺少的是工程应用相关的知识,本课程从工程应用出发,每种技术都主要讲解其在工程中的使用,并演示工程应用的代码。 从零实现部分算法: 课程中实现了base16编解码 ,XOR对称加解密算法,PKCS7 pading数据填充算法,通过对一些简单算法的实现,从而加深对密码学的理解。理论与实践结合: 课程如果只是讲代码,同学并不能理解接口背后的原理,在项目设计中就会留下隐患,出现错误也不容易排查出问题。如果只讲理论,比如对密码学的一些研究,对于大部分从事工程应用的同学并没有必要,而是理论与实践结合,一切为了工程实践。代码现场打出: 代码不放在ppt而是现场打出,更好的让学员理解代码编写的逻辑,老师现场敲出代码正是展示出了工程项目的思考,每个步骤为什么要这么做,考虑了哪些异常,易学不枯燥: 课程为了确保大部分人开发者都学得会,理解算法原理(才能真正理解算法特性),学会工程应用(接口调用,但不局限接口调用,理解接口背后的机制,并能解决工程中会出现的问题),阅读算法源码但不实现密码算法,,并能将密码学投入到实际工程中,如果是想学习具体的加密算法实现,请关注我后面的课程。
下载openssl后,你可以按照以下步骤进行安装: 1. 首先,解压下载的安装包到你想要安装的目录,比如D盘。你可以将安装包解压到D:\openssl-1.1.1d目录中。\[1\] 2. 接下来,打开命令窗口,并进入openssl的目录。在命令窗口中输入以下命令: ``` cd D:\openssl-1.1.1d ``` 这将进入到openssl的安装目录中。\[2\] 3. 在openssl的目录中,执行以下命令来完成配置: ``` perl Configure VC-WIN32 ``` 这将配置openssl的环境。\[2\] 4. 完成配置后,你可以使用openssl生成相应的证书。你可以参考相关文章或教程来了解如何使用openssl生成证书的详细操作。\[3\] 请注意,以上步骤仅适用于Windows操作系统。如果你使用的是其他操作系统,请参考相应的安装指南。 #### 引用[.reference_title] - *1* [windows安装OpenSSL](https://blog.csdn.net/wuliang20/article/details/121014060)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Windows下openssl的下载安装和使用](https://blog.csdn.net/hjx_1000/article/details/25806151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二流人物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值