古典密码

替代密码

单表替代

每个字母对应的密文字母固定。

  1. 一般单表替代
    密钥空间n = 26!
  2. 移位密码
    凯撒密码就是密钥为3的移位密码。
  3. 仿射密码
    加密:k1*m + k0 (mod 26)
    要求k1与26互素,避免出现多个明文对应同样的密文。
  4. 密钥短语密码
    密钥是一个短语(单词),写在替代表最前端,整张替代表去掉所有重复字母。

多表替代

  1. 维吉尼亚密码
    a-z用0-25编号,明文对应数字按位加上密钥(长度不够就循环使用)对应数字mod26,得到的数字译成字母就是密文。
  2. 希尔密码
    密钥是一个n*n矩阵,将明文分为长度为n的组,密钥矩阵乘上每个分组矩阵,结果mod26得到密文对应矩阵,按原顺序拼成完整密文。
  3. 一次一密密码
    难以做到。
  4. Playfair密码
    基于一个5*5方格。
    密钥去除重复字母按行从左上开始填入,具体类似于密钥短语密码填替换表的方法。i和j填在同一格。
    明文两个分为一组。遵循下述复杂规则:
  • 若两字母同行,分别加密为右侧紧邻字母。
  • 若两字母同列,分别加密为下方紧邻字母。
  • 若不同行不同列,分别加密为由两字母确定的矩形的同行字母。
  • 若两字母相同,则在两字母中间插入一个事先约定的字母,按上述规则处理。
  • 若明文长度为奇数,在末尾插入事先约定字母。
  • 上下边界、左右边界进行循环。

置换密码

周期置换密码

给出一个置换密钥Π,按密钥长度将明文分组,每一组按照密钥进行置换后按顺序拼成密文。

列置换密码

给出一个置换密钥Π,明文按密钥长度为一行写出,按列执行密钥的置换。

转轮机密码

慢、中、快三个转子,慢端输入明文,快端输出密文。每次按键,快端向下移动一个位置,26次后中端移动,中端移动26次后慢端移动。加解密双方需要使用同样的转轮机。

分组密码

DES

算法描述

明文分组为64位,初始密钥64位,有效密钥56位,输出密文64位,16轮迭代的分组对称密码算法。基本操作是置换、替换、异或、循环移位。加解密算法相同,只是使用密钥的顺序相反。

流程图

image

加密过程

密钥生成

  1. 64位初始密钥先进行一个PC-1置换,目的是根据置换表去掉8位奇偶校验位,并打乱剩下的56位有效密钥的顺序。将这56位分成C0和D0

  2. 两部分分别根据LSi的值进行循环左移,左移后通过PC-2置换,然后合并作为48位子密钥。

  3. 整个des中一共会左移十六轮,第1、2、9、16次是左移一位,其他都是左移两位。

处理明文

  1. 初始置换IP
    先对明文(64位)进行一个初始置换IP,将明文分为L0、R0两个32位块。
    该过程并不会增加DES的安全性,但这种做法在16位和32位的总线出现之前将使得数据更容易加载到DES芯片中。

  2. 迭代
    进行16轮Feistel加密。每一轮都用一个从初始密钥导出的48位且每次不同的密钥(密钥生成过程如上文所述)。
    每一轮操作:
    (1)E扩展置换
    用E置换处理每一轮的R0。目的是把32位的R0扩展为48位,和密钥长度相同,以进行异或操作。
    置换过程就是:针对4比特×8组,把每一组的第一位放在上一组的最后一位后面,把每一组的最后一位放在下一组的第一位前面。
    置换之后的R与该轮密钥进行异或。
    (2)S盒替换
    把异或之后得到的48位送入通过8个内有不同替代表的S-盒,进行替代运算。每个S盒有6位输入4位输出,48位输入分为8个6比特的分组,一个分组对应一个S盒。每一个S盒中是4行16列的表,盒中的每一项都是一个4位的数。用6位输入的第一位和第六位确定所在行,中间四位确定列,对应一个格子里的值,即该组的替代运算结果。
    (3)P盒置换
    S盒代替运算的32位输出输入P盒进行置换。
    (1)(2)(3)加起来构成f函数
    (4)左右交换
    P盒置换的结果与32位的L0异或,然后左、右半部分交换,开始下一轮。
    注意第16轮中,最后一步不进行左右交换,直接把左右合并。

  3. 初始IP逆置换
    第16轮结束后,左右合并的结果进行IP逆置换。最后得到密文。

算法分析

  1. S盒设计准则
    输入改变1比特,至少2比特的输出会随之改变。
  2. 完全性
    (1)完全性定义:任何一位输入的改变都能影响到每一位输出。
    (2)如果Feistel的f函数的完全的,(最差情况下)Feistel需要3圈来实现完全性。
    (3)如果Feistel的f函数需要T圈迭代来实现完全性,则Feistel需要T+2圈实现其完全性。
    (4)DES经测试,经过5圈即可实现完全性,实际算法中进行16圈迭代是为了提高其安全性。
    (5)DES有对称互补性,所以进行暴力攻击时只需要试验2^56个密钥的一半。

AES

算法描述

AES有128位的分组长度,密钥可以是128、192或256位。AES把一个字节看作有限域GF(2^8 )上的元素,生成有限域的不可约多项式是x^8 +x^4 +x^3 +x+1。AES使用的模数多项式是x^4 +1

加密过程

  • 明文初始化为State,并于轮密钥进行一次异或(AddRoundKey)。
  • 前9轮:S盒替换(SubBytes)—— 行移位(ShiftRows)—— 列混淆(MixColumns)—— 异或(AddRoundKey)。
  • 最后一轮:SubBytes——ShiftRows——AddRoundKey
  • 最后输出的就是密文。

SubBytes

使用16个相同的S盒,将128bit分成16组。
是AES中唯一的非线性变换。

ShiftRows

第一行不动,第二、三、四行分别循环左移2、3、4个字节。

MixColumns

AES选取的固定多项式{03}x^3 +{01}x^2 +{01}x+{02}。State的每一列与这个多项式进行模x^4 +1的乘法。
列混合过程就是xtime过程.

  • 如果b7 = 0,结果就是b6b5b4b3b2b1b00
  • 如果b7 = 1,结果就是b6b5b4b3b2b1b00与00011011进行异或,这个00011011就是构成AES有限域的固定多项式去掉最高次项的结果。

AddRoundKey

轮密钥每一列与State的对应列进行异或。

AES解密可直接逆向进行加密过程实现。

解密过程优化

  1. SubBytes与ShiftRows顺序可换
  2. MixColums和InvMixColumns都是线性变换
    所以:
    image

优化之后,可以实现加密过程与解密过程逻辑顺序相同,只是使用的密钥不同。如下图。
image

分组密码操作方式

  1. ECB电码本
    大单表替换。
  2. CBC密码块链接
    初始向量IV需要被当作密文传输。
    有限传播:密文每一位的错误会影响当前轮和下一轮的解密。
  3. CFB密码反馈
    分组密码 -> 流密码,可以实时加密。
    密文中一位的错误最多会影响ceil(b/s)的解密。
  4. OFB输出反馈
    内部反馈:同步流密码,通过反复加密IV得到密钥流。
    没有错误传播,可以预计算。
  5. CTR计数器
    每处理完一个分组后,计数器加上一个常数。
  6. CSM密文窃取

公钥密码

RSA

  1. 根据RSA计算原理,n必为奇数,φ(n)必为偶数,e和d都必为奇数。
  2. RSA是Zn -> Zn的一种单表代换密码,其安全的原理在于,当n极大时,只要不知道pq,根据陷门单向函数特性,很难通过密文推断出密钥或明文信息。且在同一个加密过程中,不同的明文一定对应不同的密文。
  3. 用中国剩余定理CRT可以加速RSA解密(因为需要知道p和q,所以只能辅助解密不能辅助加密)
  4. RSA安全问题
    1)用户之间不能共享n
    2)不同用户不能选择相同的密钥
    3)同一个密钥不能同时用于加密和解密,可能面临选择密文攻击

ElGamal

安全性

基于有限域上离散对数问题的困难性。

具体描述

  1. 密钥生成
    系统选一个大素数p,a是p的一个原根。随机生成一个整数x满足2 <= x <= p - 2,计算y = \(a^x\) mod p
    (p,a,y)是公钥,x是用户的私钥。
  2. 加密
    待加密的明文为m(m < p)
    随机选一个整数k(2 <= k <= p - 2)
    c1 = \(a^k\) mod p
    c2 = m · \(y^k\) mod p
    密文就是(c1,c2)
  3. 解密
    用私钥x对(c1,c2)进行解密
    m = c2 · (\(c_1^x\))^-1
  4. p应至少有1024位,p-1应该具有一个较大的素因子

期末

密码的要求

机密性、数据完整性(对称(哈希、MAC)和非对称(数字签名))、鉴别、抗抵赖性(只有数字签名)

分组密码工作模式

  1. ECB电子密码本
    image
    相同明文加密后产生相同密文;可能被敌手通过分组夹带方式攻击
    无法纠正传输中的错误
  2. CBC密码分组链接
    image
    image
    IV要被双方都知道,不用保密,需要随着消息进行更换
    相同明文一般对应不同密文,能抵抗对分组的篡改(重放、插入、删除)
    密文中一个位的错误会影响当前分组以及下一个分组的解密,自同步
  3. CFB密码反馈
    分组密码转换为流密码
    某个密文分组出现错误,会影响当前分组以及后面【最多】ceil(b/s)个分组的解密错误
  4. OFB输出反馈
    image
    同步序列密码,通过反复加密一个IV得到密钥流,可以预计算
    密钥相同的情况下,每次加密要使用不同的IV(OTP)
    可加密任意长度的数据,没有错误传播
    不能检测对密文的篡改
  5. CTR计数器
    使用同一密钥时,相同明文产生不同的密文
    可以随机对任意密文分组进行解密(每个密文的解密与其他密文块无关)
    能并行对多个分组进行加解密处理
    最主要的处理部分不依赖明密文,可以预计算
    可以处理任意长度的数据,不需要实现解密算法(加解密都使用加密运算)

RSA安全问题

从公钥导出私钥理论上可行,计算上不可行
安全性依赖于大整数分解的困难性

  1. 小指数攻击
    如果e很小,可以直接爆破e或者进行有限域开方
  2. 共享模数n
    若两个用户用的是相同的n,则可以分解n
  3. 选择密文攻击
    加密和签名不能用同一对密钥

ElGamel安全问题

安全性依赖于有限域上计算离散对数的困难性

  1. k必须不可预测
  2. k重用
    image
    若两次加密使用相同的k,则只要知道一个明文,就可以算出另一个明文

ECC

优点:密钥比RSA短
安全性依赖于有限域上计算离散对数的困难性

消息鉴别

哈希本身没有密钥,所以不能直接用于消息鉴别;MAC是带有保密的密钥的哈希
基于对称分组密码的CBC工作模式的哈希(散列函数的设计方法之一):计算效率低,如果密钥保密,得到的是MAC(报文鉴别码)。密钥公开时,不能作为通常的不带密钥的哈希。因为只计算最后一个密文块的哈希,所以攻击者可以截取消息后通过构造,对消息进行篡改而不改变哈希值。
报文鉴别的实现方式:基于对称加密(差错控制,提供鉴别和机密性,不提供数字签名);基于公钥加密(可以提供鉴别、机密性和数字签名);基于散列函数(HMAC)
HMAC的安全性依赖于其中嵌入的散列函数的安全性

数字签名

  1. RSA签名
    安全性取决于RSA加密算法的安全性(选择密文攻击,加密和签名不能用同样的密钥)
    如果知道m1,m2及他们分别对应的签名s1和s2,则知道m1m2的签名就是s1s2
    任何人都可以使用某人的公钥e来伪造对于随机消息的签名,但无法为选定的消息伪造签名
  2. ElGamal
    安全性依赖于有限域上求解离散对数问题的困难性
    非确定的签名(随机性)
    如果随机数k泄露,敌手可以算出签名者私钥;
    如果重用k,敌手可以根据两个不同消息的签名算出签名者私钥
  3. DSA
    散列函数用的是SHA-1
    只能签名,不能用于加解密(因为私钥不能解密使用公钥加密的数据)
    安全性依赖于有限域上求解离散对数问题的困难性
    是ElGamal的改进签名算法,非确定的
    如果重用k,则可以用两个不同的签名计算出k和签名者私钥
    线性k攻击:如果用不同的k1,k2对m1和m2分别签名,但k2 = a·k1 + b,也可以通过两个不同的签名求出签名者私钥
  4. ECDSA
    是DSA在椭圆曲线上的模拟,安全性依赖于椭圆曲线上秋决离散对数的困难性
    如果重用k,则可以用两个不同的签名计算出k和签名者私钥
  5. 特殊场景签名
    1)不可否认签名
    只有签名者参加的情况下才能验证签名,且签名者不能否认签名(签名;验证;否认)
    2)盲签名
    需要某人对某数据签名,且不让其知道数据的具体内容。(加密和签名)
    在需要实现某些参加者匿名性的密码协议中应用。消息内容对签名者不可见,且签名被公开后,签名者不能追踪签名。
    3)群签名
    只有群中成员可以产生有效签名;验证者能验证签名有效且来自该群组,无法定位到个人;发生争议时借助可信机构或者群成员联合可以识别出签名者。
    匿名性、不关联性、防伪造性、可跟踪性、可开脱性(不能以他人的名义产生有效群签名)、抗合谋攻击,不支持撤销

密钥管理

密钥协商 Diffie-Hellman

攻击目的:在攻击者与正常通信的一方之间建立起一个“安全”密钥
安全性基于有限域上计算离散对数的困难性
没有身份鉴别,易受中间人攻击,中间人与通信双方之间分别形成密钥,以截获两人发的消息且不被发现

Shamir秘密分割

基于多项式的拉格朗日插值公式
是完善的门限方案,是无条件安全的;易于扩充新用户;门限值固定;秘密分发者知道参与者的个数;不能防止秘密分发者和参与者的欺诈(合谋)

身份鉴别

抵御重放攻击的基本方法:时间戳(但是需要双方同步);质询/响应(每次通信要附加一些内容);挑战/应答(与前者类似,每次通信时验证者向声称者发送一个挑战字串,声称者需要按双方商量好的方式进行应答)
注意双向鉴别不是必须达到的要求

鉴别方法

所知;所有;不可改变的特性;零知识证明

S/Key一次性口令身份鉴别

可以防止重放(口令不可重复使用),不能防止小数攻击
用户与鉴别服务器之间传输的信息只是口令信息的散列值
缺乏完整性保护机制,不能保护鉴别过程中受到的主动攻击(注入虚假信息、修改口令、修改鉴别数据等)

序列密码

对称密码,与分组密码的最大区别是序列密码是有记忆的
分为同步(密钥流与明密文无关,无错误传播,要求双方同步)和自同步(假设密钥序列产生器有n位,则一位的错误会影响到后面n位的解密,即有限错误传播;自同步,只要连续收到n个正确的明文,双方的密钥序列产生器就会自动恢复同步)

线性反馈移位寄存器LFSR

不能直接用于产生密钥序列(因为周期太小),适合硬件实现
m序列在一个周期内,0和1出现的次数分别是\(2^{n-1}-1\)\(2^{n-1}\)

RC4

安全性不高,以随机置换为基础、可变密钥长度、面向字节操作,基于非线性数据表变换
分为状态表初始化(密钥调度算法KSA)和密钥流生成(伪随机序列生成算法PRGA)

大多数攻击在理论上都是可行的,但是计算上是不可行的

单表替代:一般单表替代;移位;仿射;密钥短语
多表替代:维吉尼亚;希尔;一次一密;playfair
置换:周期置换;列置换

image

这个“大素数分解” 大素数如何分解??
image

应该是等于O
image

image

image

image

image

image

image

群签名,成员的密钥确实需要保密
image

字典攻击和暴力攻击不同,加扰只是让得到字典的过程变难了,暴力攻击就是一个个尝试,加不加扰对他没影响
image

posted on 2024-05-11 17:43  ww0809  阅读(58)  评论(0编辑  收藏  举报