【自用】密码学散装知识

时间:2024-02-20 20:41:08

https://whythuss.com/2019/03/16/computer-networking-a-top-down-approach-6th-edition-viii/计算机网络 - 自顶向下方法(第六版)§8

四种密码学攻击类型?

唯密文攻击:攻击者知道“加密算法”和“密文”,尝试得出明文和密钥,这是最常见的攻击,也是最困难的。

已知明文攻击:攻击者知道一些“明文和密文对”,尝试推出加密算法和密钥

选择明文攻击:攻击者除了知道“明文和密文对”,还可以选择特定明文加密成密文(统一密钥环境下),尝试推出加密算法和密钥

选择密文攻击:攻击者知道加密算法可以选择一些密文,并得到相应的明文,通常尝试破解密钥

古典密码学的两种主要技术?

置换技术:加密过程明文字母没变,只是位置发生了变化,解密时把位置恢复

如栅栏密码、

代换技术:加密过程明文字母被替换成另一个字符,解密时反向替换

如凯撒密码(单表代换/移位密码)、

仿射密码(a=1时为凯撒密码,也是单表代换密码)、

维吉尼亚密码(多表代换)、

希尔密码(利用加密矩阵,属于多变代换密码)

针对双重DES的中途相遇攻击?

首先DES是一种对称加密算法,即加密密钥和解密密钥一致

双重DES总体过程,给定一个明文P,加密密钥K1、K2image-20201220112304517

中途相遇攻击针对攻击者已知明文和密文的情况下推测密钥

首先,采用所有可能的密钥(2^56)对明文P进行加密,结果保存下来

再用所有可能的密钥(2^56)解密C,把解密结果去上一步中寻找匹配

如果存在匹配的话,即image-20201220112653566

说明我们尝试得出的密钥K1 、K2 即有可能是加密用的两个密钥

image-20201220113801328

(理解图)

安全散列函数需要满足哪些性质?

快速性:已知x, 计算H(x)是容易的

雪崩性:没修改原文的一个比特对产生的密文都有明显影响

单向性/抗原像攻击:对任何给定的散列码h,想找到满足H(x)=h的x,在计算上是不可能的(知道输出想推测输入是困难的)

抗弱碰撞性:给定一个x,想找到一个H(y)=H(x)而x不等于y,是不可能的()

抗强碰撞性:想找到任何满足H(x)=H(y)的一对(x,y),是不可能的(即不可能伪造)

什么是对称密码*,简要说明相对于公钥密码*,对称密码*存在哪些问题?

对称密码*是一种传统的密码*,主要特点是通讯双发所用来加解密的密钥是相同的,因此通信双方要协商并保存共同密钥,信任对方不会泄露出去,以此来实现数据的机密性。

公钥密码*也称非对称密码*,主要特点是加密和解密的密钥是不同的密钥,加解密是相互独立的,用来加密的密钥(公钥)是大家都知道的,而用来解密的密钥(私钥)是只有解密人自己知道,公众没有办法通过公钥来推测私钥。

对称密码*存在的问题

  1. 密钥分配问题:双方通讯前需要协商所有的密钥,而这则需要安全的信道来实现,而安全信道往往很难实现的
  2. 密钥管理问题:如果在一个用户很多的网络中,没两个用户之间都要共同维护共享的密钥,当有n个用户时,每一个用户则需要管理n(n-1)/2 个密钥。
  3. 缺乏认证功能:即无法认证用户的身份,不具有抗否认性
  4. 对密钥泄露没有检测功能

什么是单向函数,什么是单向陷门函数?

单向函数:对于一个函数y=f(x),若已知x想要求出y是很容易的,而若已知y想要求出x是十分困难的。

目前还没有人能在理论上证明单向函数是存在的,而现实中有几个单向函数的“候选”,即它们表现出了单向函数的特点,但是缺乏理论证明。例如大整数相乘

单向陷门函数:单向陷门函数包含两个明显特征:一是单向性,二是存在陷门。所谓单向性,也称不可逆性,即对于一个函数y=f(x),若已知x要计算出y很容易,但是已知y要计算出x=f ^(-1) (y)则很困难。

Miller-Robin概率素性检测算法的原理?

费马小定理:a为整数,p为素数,gcd(a,p)=1 , 有:image-20201220164654793

费马小定理素性检测:设定一个a,输入p,当p不满足费马小定理时,它一定不是素数,通过不同的a,来筛选掉合数。

费马小定理仅仅是“检测一个数是否为素数”的必要条件,不是充分条件,即满足费马小定理的数不一定就是素数,

把那些满足费马小定理的合数称为“伪素数”。

评估:在某些情况下,即使使用了所有比p小且与p互素的数,有些合数依旧可以通过检测,例如561,存在缺陷,严谨性不足。

欧拉定理:image-20201220201844523

二次探测定理:若p是素数,且0<x<p ,则方程img的解为img

Millor Robin 素性测试法

例题

image-20201220202334727

在Elgamal加密算法中 随机数k能不能重复,为什么?

Elgamal加密过程:

密钥产生:选择一个大素数p、原根g、和小于p的随机数x,计算出image-20201221103007180

其中x为私钥,g、p、y 公开

加密过程:假设发送方要发送的信息为M,需要随机选择一个与p-1互素的数k

计算 C1 = g^k(modp) C2 = (y^k) M (modp)

将<C1,C1>发送出去

解密过程

证明过程img

为什么k不能重复?

如果攻击者已知k,那么他可以计算y^k ,然后用C2去除以y^k,就可以得到明文M-

如果k重复使用,则C2/C2\' = M/M\' ,知道一个明文就可以计算另一个明文

简要说明数字签名要预先使用hash处理的原因?

  1. 为了效率,利用hash函数的压缩性,可以减少要用私钥加密过程的计算量,加快数字签名的速度

  2. 确保原文消息没有被篡改,保证数据完整性

解释针对Diffie-Hellman密钥交换协议实施的中间人攻击?

https://juejin.im/post/6844903881093169159 Diffie-Hellman密钥交换

image-20201221110342513

Diffie-Hellman没有身份认证机制,假设这时候出现了一个中间人C ,他可以自己生成随机数 c , 和C=g^c mod p

然后在AB 中间截获报文,用自己生成的密钥分别和A B 进行密钥交换

虽说没办法破解A B 所产生的随机数 ,但是C可以一直扮演中介,劫持通信双方的对话

柯尔霍夫原则

即使密码系统的任何细节已为人悉知,只要密匙(key,又称密钥或密钥)未泄漏,它也应是安全的。

让入侵者知道加密算法没有关系,所有的密码都隐藏在密钥中。

对加密算法保密是不明智的,因为算法设计是很困难的,一旦泄露就要重新设计,但是密钥泄露可以随时更换。

哈希碰撞和生日攻击

哈希碰撞指不同输入值产生统一的hash值

生日攻击:针对生日问题的攻击方法,如果至少两个同学生日相同的概率不超过5%,那么这个班只能有7个人。事实上,一个23人的班级有50%的概率,至少两个同学生日相同;50人班级有97%的概率,70人的班级则是99.9%的概率

160比特的hash能提供80位的安全性

报文鉴别码

执行报文完整性的步骤:

  1. 发送方生成报文 m 并计算散列 H(m),使用 MD5 或 SHA-1;
  2. 发送方将 H(m) 附加到报文 m 上,生成一个扩展报文 (m,H(m))(m,H(m)) 发送给接收方;
  3. 接收方收到一个扩展报文 (m,h)(m,h),计算 H(m),如果 H(m)=hH(m)=h,则一切正常;

但是入侵者可以生成虚假报文和虚假散列发送给接受方,接收方也能验证一切正常。因此除了使用密码散列函数,发送方和接收方需要共享秘密 s,称为鉴别密钥(authentication key),改进执行报文完整性的步骤:

  1. 发送方生成报文 m,用 s 级联生成 m + s,并计算 H(m + s),称为报文鉴别码(Message Authentication Code, MAC)
  2. 发送方将 MAC 附加到报文 m 上,生成扩展报文 (m,H(m+s))(m,H(m+s))发送给接收方;
  3. 接收方接收到扩展包文,计算出报文鉴别码可以验证是否正常;

image-20201107113858773

目前最为流行的标准是 HMAC,能与 MD5 与 SHA-1 一道使用。

最后的问题是如何向通信实体分发这个鉴别密钥。如在链路状态路由选择算法中,需要向自治系统中每台路由器分发该秘密鉴别密钥,网络管理员可以物理访问每台路由器在完成工作,或者每台路由器有自己的公钥,网络管理员能够用路由器的公钥加密该鉴别密钥并分发给任何一台路由器,从而通过网络向路由器发送加密的密钥。

公开密钥加密


RSA (Rivest–Shamir–Adleman)+

RSA 步骤如下:

image-20201107150214641


数字签名

如果使用 MAC 用作签名,发送方和接收方都必须有密钥,因此该密钥对于发送方不是唯一的,所以不能用 MAC。

之前所说的公钥密钥机制中的私钥对于一方是私有的,因此可以用作提供数字签名。

假设发送方对文档 m 签名后的文档是 K−B(m)KB−(m),接收方用公钥 K+BKB+ 可以计算出 m 就可以证明只有发送方能够签署这个文档:

  • 无论是谁签署这个报文,必然要用到私钥;
  • 知道私钥的唯一人是发送方;

因此如果源文档被修改成 m\',则用公钥计算出的 K+B(K−B(m))KB+(KB−(m)) 不等于 m\',也验证了报文完整性。

但是加密 / 解密的计算代价昂贵,更有效的是将散列函数引入数字签名。一种散列算法计算生成报文的一个固定长度的数据 H(m),发送方对报文的散列签名而不是报文本身签名 K−B(H(m))KB−(H(m))。

image-20201107114016450

image-20201107114025740

当接收方接收到报文后,先将发送方的公钥应用于报文获得一个散列结果,然后把该散列函数应用于明文报文得到第二个散列结果,比较两个散列,如果匹配即可以确定报文完整性和发送方身份。

最后比较数字签名和 MAC,它们都以一个报文开始,为了从该报文中生成一个 MAC,需要附加一个鉴别密钥然后取得该结果的散列,既不涉及公开密钥加密,也不涉及对称密钥加密。为了生成一个数字签名,需要取得报文散列,然后用私钥加密该报文。后面会说 PGP 是一种流行的安全电子邮件系统,使用数字签名;而 OSPF 使用 MAC 保证报文完整性。

数字信封

一种运用了对称加密和非对称加密的信息传输技术

它采用加密技术保证信息只能由特定接收人才能打开

image-20201107165243364

发送方A

  1. 将明文内容进行hash散列得到一个固定长度的信息摘要,将摘要用自己的私钥加密(数字签名)
  2. 发送者利用随机产生对称密钥,用这个密钥将数字签名和明文一起加密
  3. 同时发送方将这个对称密钥用接收方B的公钥加密(数字信封)
  4. 将数字信封和密文一起发送出去

接收方B

  1. 将收到的数字信封用自己的私钥打开,得到对称密钥
  2. 用对称密钥对密文解密,得到数字签名和明文
  3. 数字签名可以用A的公钥解密得到明文的hash值,然后接收方对明文也进行同样的hash函数得到一个信息摘要,对比两个信息摘要来确保数据完整性。