package
0.1.24
Repository: https://github.com/sqjian/go-kit.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

一、电码本模式(ECB)

  • 将整个明文分成若干段相同的小段,然后对每一小段进行加密。
  • 优点:操作简单,易于实现;分组独立,易于并行;误差不会被传送。——简单,可并行,不传送误差。
  • 缺点:掩盖不了明文结构信息,难以抵抗统计分析攻击。——可对明文进行主动攻击。

二、密码分组链模式(CBC)

  • 先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。
  • 优点:能掩盖明文结构信息,保证相同密文可得不同明文,所以不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL和IPSec的标准。
  • 缺点:(1)不利于并行计算;(2)传递误差——前一个出错则后续全错;(3)第一个明文块需要与一个初始化向量IV进行抑或,初始化向量IV的选取比较复杂。
  • 初始化IV的选取方式:固定IV,计数器IV,随机IV(只能得到伪随机数,用的最多),瞬时IV(难以得到瞬时值)

三、输出反馈模式(OFB)

  • 密码算法的输出(指密码key而不是密文)会反馈到密码算法的输入中,OFB模式并不是通过密码算法对明文直接加密,而是通过将明文分组和密码算法的输出进行XOR来产生密文分组。
  • 优点:隐藏了明文模式;结合了分组加密和流密码(分组密码转化为流模式);可以及时加密传送小于分组的数据。
  • 缺点:不利于并行计算;需要生成秘钥流;对明文的主动攻击是可能的。

四 计数器模式(CTR)

  • 完全的流模式。将瞬时值与计数器连接起来,然后对此进行加密产生密钥流的一个密钥块,再进行XOR操作 。
  • 优点:不泄露明文;仅需实现加密函数;无需填充;可并行计算。
  • 缺点:需要瞬时值IV,难以保证IV的唯一性。

五.密码反馈模式(CFB)

  • 把分组密码当做流密码使用,即密码反馈模式可将DES分组密码置换成流密码。流密码具有密文和明文长度一致、运行实时的性质,这样数据可以在比分组小得多的单元里进行加密。如果需要发送的每个字符长为8比特,就应使用8比特密钥来加密每个字符。如果长度超过8比特,则造成浪费。但是要注意,由于CFB模式中分组密码是以流密码方式使用,所以加密和解密操作完全相同,因此无法适用于公钥密码系统,只能适用于对称密钥密码系统。
  • 密码反馈模式也需要一个初始量,无须保密,但对每条消息必须有一个不同的初始量。
  • 优点:可以处理任意长度的消息,能适应用户不同数据格式的需要。可实现自同步功能。就有有限步的错误传播,除能获得保密性外,还可用于认证。
  • 缺点:对信道错误较敏感,且会造成错误传播。数据加密的速率被降低。

六 对比CBC和CTR

  • (1)CBC需要填充;CTR不用填充。
  • (2)CBC不可并行;CTR可并行速度快。
  • (3)CBC需要实现加密和解密函数;CTR实现简单,仅需实现加密函数。
  • (4)鲁棒性:CBC强于CTR——使用重复瞬时值,CBC会泄露初始明文块,CTR会泄露所有信息。
  • 如果有好的瞬时值选择策略,采用CTR,否则采用CBC。
  • 如加密成绩单,可选用CTR,因为学号唯一。可作为瞬时值。

七 分组密码填充

  • 目的:将明文填充到满足分组大小,解密后再把填充去掉。
  • 如何填充:缺几个字节填充几个自己的几(如缺5个字节,填充5个字节的5);如果不需要填充,则添加一个分组,分组中填充分组大小(如分组大小为64,填充16个字节的16)

八 分组密码模式的安全性

  • 任何分组密码模式都存在信息的泄露,没有一个是完美的,任何分组模式都可能会泄露信息,这只是一个概率的问题。
  • 碰撞概率计算:
  • M个明文块,块长为N,以两个块组成一对,
  • 不同块的对数为:M(M-1)/2
  • 两个块相等的概率为:1/2的n次方
  • 密文块相等的数量期望为:M(M-1)/2的n+1次方。
  • 则当M(M-1)=2的n+1次方时候,即M约等于2的n/2次方时发生碰撞的概率约等于1。
  • 例如:分组长度为64,则当块数为2的32次方时,即加密数据2的32次方*64bit=256G时便会发生碰撞。
  • 结论:分组密码的安全不仅和秘钥长度有关还和分组长度有关。