[现代密码学] Crypto 知识点总结(古典密码&&对称加密&&hash函数)

一 . 常见加解密

SM1-4

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。

SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。

SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。

SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。

SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

二. 古典密码

代换密码

分类:

  • 移位(凯撒)密码
    在这里插入图片描述

  • 仿射密码
    在这里插入图片描述

  • 单表代换

  • 多表代换

在这里插入图片描述

置换密码

在这里插入图片描述
在这里插入图片描述

Hill密码

在这里插入图片描述
在这里插入图片描述

转轮密码

恩格码机

代换密码的唯密文攻击

  • 1.统计攻击
  • 2.重合指数法

例题

  1. 密码分析可分为那几类,它们的含义是什么?
    根据密码分析者可能取得的分析资料的不同,密码分析(或称攻击)可分为下列四类:
    1)唯密文分析(攻击),密码分析者取得一个或多个用同一密钥加密的密文;
    2)已知明文分析(攻击),除要破译的密文外,密码分析者还取得一些用同一密钥加密的明密文对;
    3)选择明文分析(攻击),密码分析者可取得他所选择的任何明文所对应的密文(当然不包括他要恢复的明文),这些明密文对和要破译的密文是用同一密钥加密的;
    4)选择密文分析(攻击),密码分析者可取得他所选择的任何密文所对应的明文(要破译的密文除外),这些密文和明文和要破译的密文是用同一解密密钥解密的,它主要应用于公钥密码体制。
  2. 移位密码,仿射密码,单表代换密码都没有破坏明文的频率统计规律,可以直接用统计分析法
    在这里插入图片描述
  3. 字母频率分析法对(单表代换密码)算法最有效
    在这里插入图片描述

例题

在这里插入图片描述
在这里插入图片描述

三. 对称加密算法

引自合天网安实验室:https://www.hetianlab.com/expc.do?ce=7bbc91e0-a9b3-4af9-a108-ce94117ee430
以及现代密码学(谷利泽版)

分组密码

设计思想:

  • 混淆:明文/密钥和密文之间的关系复杂
  • 分组:明文/密钥的每一个比特都影响密文的每一个比特

DES算法(数据加密标准)

1. Feistel结构

明文和密文分组长度为64Bit,密钥长度56bit(密钥空间2^56)
算法包括:迭代加密和密钥编排
在这里插入图片描述

  • IP置换(初始置换)
    根据初始置换表,将明文数据移到该数据所在位置
    在这里插入图片描述
    从上表我们可以总结出,初始置换表的规律其实就是(其实不用太在意这个规律):
    a. 偶数与奇数分开(1~64),然后分为上下两部分,分布在置换表中,偶数在上,奇数在下。
    b. 在偶数与奇数内部,又遵从“从右到左,从上到下,从小到大”的排列。

实际中加密的是二进制数据,为直观展示这里用字母代替
在这里插入图片描述
置换完
在这里插入图片描述
至此我们便得到了初始置换之后的数据

  Data=“5XPHzrjb7ZRJBtld91TLDvnf=3VNFxph4WOGyqia6YQI(i)Askc80SKCume+2UMEwog”

  L0 = “5XPHzrjb7ZRJBtld91TLDvnf=3VNFxph”

  R0 = “4WOGyqia6YQI(i)Askc80SKCume+2UMEwog”
2. 轮函数

在这里插入图片描述
函数 f主要对数据右半部分R进行操作
a. 先对其进行扩展置换,使其变为48位的数据,
b. 然后生成的数据再与子密钥进行异或运算,
c. 再以异或运算后的48位数据进行S盒代替,将48位的数据,转换为32位的数据,
d. 再进行P盒置换,生成32位的数据
e. 最后将P盒置换生成的数据与本轮运算的L进行异或,生成新的R。
f. 而新的L是直接由本轮的R进行替换

3. 密钥编排算法
  • 子密钥K的生成
    在这里插入图片描述
    假设初始64位密钥:
    “abcdefgh ijklmnop qrstuvwx yzABCDEF GHIJKLMN OPQRSTUV WXYZ0123 456789+=”
    红色部分为奇偶校验位,不参与加密算法

在这里插入图片描述
初始压缩置换后:
在这里插入图片描述
可以看出压缩置换1的规律:
在这里插入图片描述
压缩置换1接下来的是拆分:

  K0=“4WOGyqia5XPHzrjb6YQI(i)Askc7ZRJ+2UMEwog91TLDvnf80SKCumeBtld”

  C0=“4WOGyqia5XPHzrjb6YQI(i)Askc7ZRJ”

  D0=“+2UMEwog91TLDvnf80SKCumeBtld”
  
  拆分之后我们得到C0、D0,再然后就是循环左移,求出C1、D1:

根据"轮数和左移位数"的对应表,第一轮得到

  C1=“WOGyqia5XPHzrjb6YQI(i)Askc7ZRJ4”

  D1=“2UMEwog91TLDvnf80SKCumeBtld+”

如上,左移的同时还要保持位数不变,所以移动的数据又补充到后面。
C1D1= “WOGyqia5XPHzrjb6YQI(i)Askc7ZRJ42UMEwog91TLDvnf80SKCumeBtld+”
在这里插入图片描述
在这里插入图片描述
压缩置换2
在这里插入图片描述
得到子密钥K1
在这里插入图片描述
K1=“jYH7WqG4bisPcI(i)zyR56aJArOvBM1KdUDe0wC8uL+otSnm92E”

  • 扩展置换E
    将数据R(32位),按照每4位一组,拆分成8个组,如图,左右黑色的两列是扩展时添加的数据,中间的就是分组后的数据R,表中的数字代表数据R中的位置。分成8组织后,遵循这样的一个规则:每一组的头部添加本组数据上一组的尾部,每一组的尾部添加本组数据下一组的头部。即第一组数据,前面添加的是最后一组的最后一位数据,后面添加的是第二组的第一位数据…以此类推
    在这里插入图片描述
    因此,对R0进行扩展置换
    R0=“4WOGyqia6YQI(i)Askc80SKCume+2UMEwog”
    在这里插入图片描述
    之后我们便得到了扩展到48位的R0:

    R0=“g4WOGYGYqia6a6YQI(i)AI(i)Askc8c80SKCKCume+e+2UMEMEwog4”

扩展置换E结束之后,我们要进行的就是K1与R0的异或运算

  • S盒代替
    S盒代替的作用,就是将我们上一步,R0与K1异或后得到的48位数据压缩为32位数据。

我们前面扩展置换后得到的R0是48位的数据,我们的S盒有8个,那么我们就需要将得到的R0平均分为8组,每组对应一个S盒。
每一组的数据长度为6位,假设第一组的二进制数据为:“100110”
那么,我们取第一位与最后一位,组成行数:“10”=2
取中间四位,组成列数:“0011”=3
那么,在对应的S1盒中,取2行3列的数据(第3行第4列):8,转换为2进制:“1000”
那么就将这个得到的4位二进制数据,代替原来第一组的6位数据,这样一来,等8个S盒全部代替完毕,我们就得到32位的数据。
在这里插入图片描述

  • P盒置换
    在这里插入图片描述
    至此我们便得到了f(R0,K1),只要再与L0进行异或运算,就得到了第一轮运算最终的R1,然后再将R0的值赋给L1,就完成了第一轮的运算,得到了L1,R1。
4. 末置换

经过16次的运算,我们在函数f的最后,会得到“L16、R16”,这正是我们需要的,然后将L16与R16合并,但是与之前的步骤中的合并不同,此次合并需要先交换二者的位置,也就是应该是R16 L16。
在这里插入图片描述

5. 安全增强

(1)穷举搜索攻击
目标:给定输入输出对 (m i , c i = E(k, m i )) i=1,…,3 ,寻找密钥 k.
(2)3DES

令 E : K × M ->  M 是一个分组密码
定义 3E: K^3 × M ->M 为 
3E ( (k 1 ,k 2 ,k 3 ), m ) =E(k 3 ,E (k 2 , E(k 1 , m)))
密钥长度 = 3 × 56 = 168 bits ( 穷举攻击复杂度≈2 ^118)

在这里插入图片描述
参考文章: DES 安全性&3DES , 三重DES原理

AES算法(高级加密标准)

对称加密流程

分组加密算法:明文(128/256bit)和密文分组(128/192/256bit)可变长度
SPN结构:轮函数包括:代换层-置换层-密钥混合层
密钥长度:128bit(密钥空间2^128) 10轮
在这里插入图片描述

包含4个步骤

  • 字节代替
    字节代替(SubBytes)的目的是通过S盒完成一个字节到另外一个字节的映射转换,字节替换为这个密码系统提供了替换性。
    在这里插入图片描述

  • 行移位
    行移位(ShiftRows)步骤过程中,每一行都向左循环位移某个偏移量。在AES中(区块大小128位),第一行维持不变,第二行里的每个字节都向左循环移动一格,第三行里的每个字节都向左循环移动二格,第四行里的每个字节都向左循环移动三格。经过行移位之后,矩阵中每一竖列,都是由输入矩阵中的每个不同列中的元素组成。
    在这里插入图片描述

  • 列混淆
    在这里插入图片描述
    在这里插入图片描述
    这里有一个错误,初始矩阵为,另外列混淆中第二项02·6E=11011100
    在这里插入图片描述
    有限域上的字节运算:
    在这里插入图片描述

  • 轮密钥加

在这里插入图片描述
在这里插入图片描述

AES的密钥编排算法
  • 密钥扩展:
AES的解密变换

在这里插入图片描述
在这里插入图片描述

分组密码的运行模式

1. ECB模式

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2. CBC模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3. CFB模式

反馈是指前一个密文分组的值会被送到密码算法的输入端。
在ECB模式和CBC模式中,明文分组都是通过密码算法进行加密的,然而,在CFB模式中,明文分组并没有通过密码算法来直接进行加密。

明文分组和密文分组之间并没有经过“加密”这一步骤。(加解密过程只调用加密算法这一个过程)在CFB模式中,明文分组和密文分组之间只有一个XOR。
在这里插入图片描述
在这里插入图片描述
j通常为8
在这里插入图片描述

在这里插入图片描述

参考文章:CFB原理

4. CTR模式(计数器)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例题

  1. 1977年1月 DES正式成为美国联邦政府信息处理标准,即FIPS-46标准,1997年撤销,采用AES算法,新算法的分组长度为128比特,支持可变密钥长度128,192,256比特。
    1999年最终选定Rijndanel算法为新的数据加密标准。
  2. WAPI标准是中国颁布的无线局域网安全国家标准
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

流密码

流密码核心:伪随机数生成器(PRG)

LFSR :线性反馈移位寄存器(为线性函数)
密钥流{k}的周期一定要大
在这里插入图片描述

例题:
在这里插入图片描述
在这里插入图片描述

RC4算法(序列密码)

  • KSA
//S 表随机化
s[i] 数据
t[i] 密钥
j = 0
i = 0
for i in range(n):
	j = (j+s[i]+t[i])%n;
	s[i],s[j]=s[j],s[i];
	
  • PRGA(伪随机数生成算法)
i = (i+1)%n
j =  (j+s[i])%n
swap(s[i],s[j])
t = (s[i]+s[j])%n
k = s[t]
  • RC4应用
    在这里插入图片描述
例题

在这里插入图片描述
在这里插入图片描述
13. 一般的,一个反馈移位寄存器由两部分组成:移位寄存器和反馈函数
在这里插入图片描述

四. Hash函数

SHA-256算法

在这里插入图片描述

例题

在这里插入图片描述
hash函数的抗二次原像性:对于给定的消息M1,发现另一个消息M2,使得H(M1)=H(M2)在计算上是不可行的。
抗碰撞性:找到任意一对不同的M1和M2,使得H(M1)=H(M2)在计算上是不可行的。
在这里插入图片描述

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Node.js 中的 crypto 是一个内置模块,用于提供加密和解密功能。它支持各种加密算法和操作,包括哈希函数对称加密和非对称加密。你可以使用 crypto 模块来实现数据的加密、解密、签名和验证等操作。 要使用 crypto 模块,你需要在你的代码中引入它,例如: ```javascript const crypto = require('crypto'); ``` 一些常见的 crypto 操作包括: 1. 哈希函数crypto 模块提供了多个哈希函数,如 MD5、SHA-1、SHA-256 等。你可以使用这些函数对数据进行哈希处理,生成唯一的摘要。例如: ```javascript const hash = crypto.createHash('sha256'); hash.update('Hello, world!'); const digest = hash.digest('hex'); console.log(digest); // 输出生成的摘要 ``` 2. 对称加密crypto 模块支持对称加密算法,如 AES、DES、3DES 等。你可以使用这些算法对数据进行加密和解密。例如: ```javascript const cipher = crypto.createCipher('aes192', 'password'); let encrypted = cipher.update('Hello, world!', 'utf8', 'hex'); encrypted += cipher.final('hex'); console.log(encrypted); // 输出加密后的数据 const decipher = crypto.createDecipher('aes192', 'password'); let decrypted = decipher.update(encrypted, 'hex', 'utf8'); decrypted += decipher.final('utf8'); console.log(decrypted); // 输出解密后的数据 ``` 3. 非对称加密crypto 模块还支持非对称加密算法,如 RSA。你可以使用这些算法生成公钥和私钥,进行加密和解密。例如: ```javascript const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 4096, publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem' } }); console.log(publicKey); // 输出生成的公钥 console.log(privateKey); // 输出生成的私钥 const encrypted = crypto.publicEncrypt(publicKey, Buffer.from('Hello, world!')); console.log(encrypted.toString('base64')); // 输出加密后的数据 const decrypted = crypto.privateDecrypt(privateKey, encrypted); console.log(decrypted.toString('utf8')); // 输出解密后的数据 ``` 这只是 crypto 模块的一小部分功能,你可以查阅 Node.js 文档以获取更详细的信息和使用方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Y1seco

我们都在慢慢进步

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

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

打赏作者

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

抵扣说明:

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

余额充值