🗒️密码学
type
status
date
slug
summary
tags
category
icon
password
✅一些密码学知识。简单记录,方便回顾。
概述
- 安全威胁: 特洛伊木马、黑客攻击、计算机病毒、拒绝服务攻击、内外部泄密、蠕虫、逻辑炸弹、信息丢失篡改销毁、后门隐蔽通道。
- 信息安全目标: 真实、保密、完整、可用、可控、可审查、可靠性。
- 信息窃取:加密技术,信息篡改:完整性技术,信息冒充:认证技术,信息抵赖:数字签名
- 密码学的定义: 研究“加密”和“解密”方法的科学。
- 现代密码学分支: 编码学、译码学、密钥管理
- 发送方:明文、加密算法、密钥、密文, 接收方:密文、解密方法、密钥、明文
- 密码体制构成: M明文:全明文集合, C密文:全密文集合, K密钥:全密钥集合, E加密算法:由加密密钥控制的加密变换的集合, D解密算法:由解密密钥控制的解密变换的集合。
- 主动攻击要对信息进行篡改。
- 对称:分组和序列密码体制。 非对称:公钥密码体制。
- 位置相关的是序列, 无关的是分组。
- 密码分析者分析密码算法三种方法:
①穷举法:密码分析者试图试遍所有的明文或密钥来进行破译。
②统计分析法:密码分析者通过分析密文、明文和密钥的统计规律来达到破译密码技术。
③密码体制分析法:根据所掌握的明文、密文的有关信息,通过数学求解的方法找到相应的加解密算法。
- 对密码体制进行攻击:
① 惟密文攻击:密码分析者仅知道两样东西:待破译的一些密文和加密算法,并试图恢复尽可能多的明文,并进一步推导出密钥。
② 已知明文攻击:密码分析者不仅知道一些待破译的密文和加密算法,而且还知道与之对应的明文,根据明文和密文对试图破解待破译的密文或推导出密钥。
③ 选择明文攻击:密码分析者知道一些待破译的密文和加密算法,还可以选择一些明文,并得到相应的密文,试图破解待破译的密文或推导出密钥。
④ 选择密文攻击
⑤ 选择文本攻击
古典密码体制
- 乘法加密技术:
①加密:j=i·k(mod n),带入k,依次带i求数字对应的密文
②解密:i=jk-1( mod n)。
- 加法加密技术:
①加密:j= (i + k) (mod n)
②解密:i=(j - k)(mod n)=(j +(n- k))(mod n); Dk=En-k。
- 仿射密码技术:
①加密:j=(ik1+ k0)(mod n),带入k1,k0,依次带i求数字对应的密文(gcd(k1,n)=1)
②解密:(其中k1-1×k1=1 (mod 26),遍历与26互素的数,能和k1相乘mod26等于1的数就是逆),i= k1-1(j-k0)(mod n),写出i对应密文。
③k0=0,退化为乘法;k1=1,退化为加法。
- 多表代换(维吉尼亚)密码:
循环使用密钥进行加密。明文比密钥长,加密的时候密钥就循环使用。明文比密钥短,密钥就只取前面几个。
加密:向后移k位C= (m1+k1,m2+k2,…,ml+kl) mod 26。
解密:M = (c1-k1,c2-k2,…,cm-km) mod 26。
- 弗纳姆密码技术:异或
- 换位密码:
①明文按密钥个数排列
②按密钥字母顺序写出列
分组密码体制
- 分组密码特点: 对明文进行固定长度的分组,如果每一个明文分组的长度不满足算法的要求需要对它进行填充。(最后一个填总数,其他填0)(DES明文分块长度是64,AES是128)
常见分组密码体制
一、SM4:
明文分组长度:128bit,密钥长度:128bit,迭代轮数:32轮
二、DES:
- 加密结构:明文,初始置换,16轮迭代(密钥编排K1…K16),逆初始置换,密文。 加密结构:密文,初始置换,16轮迭代(密钥编排K16…K1),逆初始置换,明文。
- 密钥生成(编排):64bit的初始密钥去掉8bit奇偶校验位得到56bit的有效密钥,经过选择置换PC-1(第x位依次换入)分成各28bit两部分,分别循环左移位(根据给的表的位数往左移),再合在一起经过选择置换PC-2从56变到48得到这一轮的子密钥;两个循环左移位的结果再分别做一次循环左移位,再合在一起PC-2得到下一轮的子密钥,一共16轮。
- 轮函数:明文64bit分成左右32,送入轮函数。 变换:~,F函数最终得到32bit
- F函数的输入:上一轮的右瓣,子密钥。
F函数变换:32bit右瓣输入后,做E盒扩展到48 (中间4列是原始的32bit,在左右边扩充一列(会给表),解密的时候要做E盒的逆变换直接取中间4列就可以了),结果和轮密钥产生的子密钥做异或,48bit送到8个S盒,每个S盒6bit(16确定行,2345确定列),对应的二进制转换成十进制去查行列值,得到的十进制结果再转换成二进制,得到4bit×8=32bit,32bit再做一次P盒置换(第x位依次带入),最终得到32bit输出,再和左瓣异或得到下一轮的右瓣。(最后一轮完成后,还要进行依次左右交换)(明文64,密钥64,有效密钥56,密文64) 。
F函数结构:L1=R0,R1=L0⊕F(R0,K1)
- 初始置换:第x位依次换入。 逆初始置换:把x放到第1,2…位
- DES变形算法2DES:连续两次加密,有效密钥112。三重DES-EEE3:密钥个数2或3,EEE3密钥数据123,EEE2密钥数据121,二重密钥有效长度112,三重168
三、AES:
- 基本运算单位是字节(Byte),每4个字节(32bit)构成的是状态矩阵里的一列,输出按列来取
- Rijndael密码算法明文分组长度可变,密钥长度也可变。明文分组固定128,密钥长度128,迭代轮数10,12,14轮。轮密钥加轮数要加1,列混合轮数减1,其他不变(初始明文块和初始子密钥做轮密钥加,接下来字节代替,行移位,列混合,轮密钥加,最后一轮少做一次列混合)。
- Nb明文列数:4, Nk密钥列数:4,6,8(128,192,256), Nr加密轮数
- AES结构:初始明文块和子密钥进行轮密钥加 (取对应位置的元素做异或(十六进制要转换为二进制,加完后再转回来)) (假设结果为A),再依次字节代替(十六进制两个字符,第一个字符查S盒行,第二个字符查列,对应元素直接输出),行移位(以字节为单位进行移位0,1,2,3),列混合(GF(28),固定×输入=输出矩阵),结果和子密钥轮密钥加,如果不是最后一轮,得到的结果就再和A进行字节代替,行移位,列混合,结果和子密钥轮密钥加,如果是最后一轮,得到的结果依次字节代替,行移位,结果和子密钥轮密钥加(没有列混合),最终得到密文。
- GF(28)相加:转换成二进制做异或,再转换成十六进制。 GF(28)相乘:转换成多项式相乘,结果=算出来的多项式mod p(x),再等于二进制,等于十六进制。 GF(28)乘x:①若b7=0,x·b(x)相乘结果就是b(x)对应的8bit二进制向左移1位,最后补0②若b7=1,b(x)向左移1位,最后补0,再与1B(00011011)做异或。
- 为什么?当密钥长度为128bits和轮数为10时,轮密钥长度为128×(10+1)=1408bits,则需要添加40个新列来进行扩充?因为它初始的状态是一个矩阵,4个字节做1列,密钥长度128意味着nk=4,一共执行10轮,轮密钥加始终等于轮数+1,多的这一轮是明文和初始密钥做的那一次,所以一共11轮,每轮4列一共44列,最开始已经有4列了,接下来就要扩充 40个列。
- 密钥扩展:扩充Nk=4的时候,需要去判断待扩充这一列的下标是否是4的倍数①当i是4的倍数的时候,Ki=Ki-4⊕Ki-1,首先以字节为单位循环左移一个字节,然后做字节代替,再和常量值i/Nk做异或。②如果不是4的倍数,Ki=Ki-4⊕T(Ki-)1,直接就是ki-1和ki-4做异或。
- 轮密钥选取:一共是44个嘛,每4列取一个轮密钥
- 密钥调度:密钥扩展和轮密钥选取。 密钥bit的总数=分组长度×(轮数Round+1)。
- 分组密码的运行模式:密码反馈CFB,输出反馈OFB,计数器模式CTR,密码分组链接CBC,电子码本ECB。
- EBC电码本: 加密Cj=Ek(Pj)。 解密Pj=Dk(Cj)。每一次采用相同的密钥。 缺点:没有办法隐藏统计信息,相同的明文总是能得到相同的密文。
- CBC密码分组链接:是每一个密文反馈到下一个分组。差错传播:如果一个明文分组出错,那包含它自己和后续的密文都会出错,但经过解密之后只有它自己出错,后面的不会出错。如果密文里有一组出现损坏,就会影响这组和下一组的
解密。如果出现bit缺失,就会从当前分组开始后续所有的都出错。
- CFB密码反馈:最后生成的密文会反馈到寄存器最右边,然后寄存器最左边的一个字节就出去了。差错传播:如果明文一组有错,所有密文都出错,但是经过解密后,只有当前这组有错,其他都能恢复。如果密文里的移位出错,会引起明文一个单独错误,但是如果这个错误进入了移位寄存器,会导致后面若干组都出错,直到这个错误从移位寄存器移出去为止。如果是64bit的话,j=8,会影响9个分组(本身1个加上移位寄存器里8个)。
- OFB输出反馈:和CFB一样,只是是把分组加密的输出反馈到移位寄存器。 特点:没有差错传播。
- CTR计数器:用密钥对计数器的值进行加密,然后再和对应的明文分组做异或,在每一个分组里面计数器的值都要改变,尽量实习一次一密。
序列密码体制
- 序列密码:通过密钥流发生器生成对应密钥,密钥的生成和明文密文逻辑相关。
- 分为:同步(密钥流独立于消息流),自同步(不独立)
- 同步缺点:一旦双方不同步,解密就会失败,需要借助外界手段重新建立同步。
- CFB是同步(加密后的密文分组会反馈到移位寄存器里面,所以是相关的,错误移除移位寄存器后能够自己恢复同步), OFB是自同步(OFB没有差错传播,密钥流的生成和明文密文无关,如果密文出错,解密的时候那个分组还是会出错,后面没有错)。
- 移位寄存器序列密码:特征多项式,移位寄存器图,反馈函数(从左到右,an到a1)(上面的开关是c1到cn)。
- 反馈函数通用表达式:f(a1,a2..)=a1⊕a2...。(c1an,c2an-1,c3an-2到cn-1a2,cna1),若干项做异或。
- 特征多项式通用表达式:1+c1x+c2x平方+...+cnx的n次方,对应地把n的值带进去,如果没有反馈就为0,如果有反馈n就是1,再把它们写出来。
- n级LFSR的输出序列最大周期是2的n次减1。LFSR的寄存器状态遍历2的n次减1个非零状态。
公钥密码体制
- RSA是基于大数分解难题的, ElGamal是基于离散对数的。
- 密钥的生成: ①给两个素数p和q,计算n=p×q,欧拉函数Φ(n)=(p-1)(q-1) ②给公钥参数e,求私钥d×e=1 mod Φ(n),(就是算d×e=Φ(n)×整数倍+1) ③公钥参数是{e,n},私钥参数是{d,n}
- 加密:写表达式,c≡m的e次 mod n。解密:m≡c的d次 mod n
hash函数
- H六个要求:①能够接受任意长度的消息作为输入; ②能够生成较短的固定长度的输出; ③对任何消息输入都能够容易和快速地计算出哈希值; ④应该具有单向性,也就是说,给定H(m),恢复消息m在计算上是不可行的; ⑤应该能够抵抗弱碰撞,即给定消息m和H(m),找到另外一个消息m ≠ m',使H(m)= H(m')是不可能; ⑥应该能够抵抗强冲突,即可以两个有意义的消息m和m',使得H(m)= H(m')几乎是不可能的。(弱碰撞指的是给了你消息和它对应的哈希值然后去找另外一个消息,完全不同的消息使他们的哈希值相等是不可能的。强冲突指的是两个不同的消息他们的哈希值相等是不可能的。)
- 抗碰撞一定单向,单向不一定抗碰撞。
- SHA-1填充的时候每一个分组长度都是512,所以最后填充出来是512的整数倍。原文消息长度L+1个1+k个0=448mod512,再在消息末尾添加64bit块(原始消息比特位长度转换为二进制,左边补0)。(消息ASCII码二进制,1,k个0,64位消息长度二进制)
- 数据扩展:四个做异或,再循环左移1个bit。
- 消息认证码:输入消息M,MAC函数C,共享的密钥K,消息认证码MAC。
- 基于分组密码的MAC:MACi=Ek(MACi-1⊕xi)。
- MD5生成的消息摘要值128,SHA-1哈希摘要值160。
- 实现保密要进行加密操作,涉及到和明文相关还是密文相关,还可以利用哈希函数来做消息认证,哈希函数带密钥和不带密钥要做什么。
数字签名
- 数字证书的内容:版本号,序列号,认证机构标识,主体标识,主体公钥信息,证书有效期,密钥/证书用法,扩展,认证机构签名。
- RSA数字签名: ①参数产生:n=p×q,Φ(n)=(p-1)(q-1),计算d:d×e=1 mod Φ(n),以e,n为公钥,d,n为私钥。 ②s≡m的d次mod n。③m≡s的e次mod n。
- RSA签名的时候是对消息摘要进行签名,而不是对消息直接签名。 一个好的RSA算法应该p减q的绝对值要大,p和q都要有大因子,都要使用共同的模数n。
认证协议
- 需要第三方单向认证:A→(IDa||IDb||N1)KDC→(Eka[Ks||IDb||N1||Ekb[Ks||IDa])A→B(Ekb[Ks||IDa]||Eks[M])
- 需要第三方双向认证:A→(IDa||IDb||N1)KDC→Eks[Ks||IDb||N1||Ekb[Ks||IDa||T]]A→Ekb[Ks||IDa]B→Eks[N2]A→Eks[f(N2)]B。 ①密钥Ka和Kb分别是A与KDC、B与KDC共享的密钥,这个协议的目的是将会话密钥KS安全的分发给A和B。 ②:A可安全地获取一个新的会话密钥; ③:报文只能被B解密,因此只有B知道报文的内容; ④:B已获取了会话密钥KS; ⑤:B确信A已获得了会话密钥KS,同时也使得B确信这是一个新报文,因为使用了随机数N2 。
十、密钥管理
- 层次化结构:主密钥,密钥加密密钥,数据加密密钥(会话密钥),工作密钥
- DH密钥协商:p是一个大素数,用户A选取一个大数a,Ka=g的a(modp),用户B选大数b,Kb=g的b(modp)。A计算K=(Kb)的amodp,B计算K=(Ka)的bmodp。因为K=(Kb)的a=(G的b)的a=g的ab=(g的a)的b=(Ka)的b。
- 中间人出现攻击原因:没有进行身份认证,解决:数字签名,身份认证,或者是简化站站协议STS协议(设p是一个大素数,g属于Zp是模p的一个本原元,p和g公开。 ①A随机选取x,0《x《p-2,计算ga=g的x(mod p)并将ga传送给用户B。 ②B随机选取y ,0《y《p-2,计算gb=g的y(mod p)。然后计算K=ga的y mod p和Eb=Ek(Sigb(g的x mod p,g的y mod p)),用户B将(C(B),g的ymod p,Eb)传送给用户A。 ③用户A先验证C(B)的有效性。然后计算K=gb的x mod p,解密EB,再验证B的签名的有效性。确认有效后,计算Eb=Ek(Sigb(g的xmod p,g的ymod p)),把自己的公钥证书C(A)以及EA发给用户B。 ④用户B解密后,验证C(A)的有效性,再解密验证A的签名的有效性。)。
- 密钥分配技术: ①集中式密钥分配方案是指由密钥分配中心(KDC)或者由一组节点组成层次结构负责密钥的产生并分配给通信双方。 ②分布式密钥分配方案是指网络通信中各个通信方具有相同的地位,它们之间的密钥分配取决于它们之间的协商,不受何其他方的限制。
上一篇
加密货币技术
下一篇
信息安全
Loading...