0%

周谈(42)- XTS算法模式

前言

上一次了解了对称算法的基本模式ECB/CBC/CFB/OFB/CTR,今天学习一下xts模式。

xts模式

xts模式用于磁盘加密,对于磁盘数据都是按扇区存储的,不希望有额外的空间存储前面那些模式需要的IV向量,而且任意块都应该是可以随时加解密的,块(扇区)之间不应该有相关性。当然,我们也不能用ECB模式,这个是不安全的,容易被分析出来。后面就有人提出了可调整的分组密码算法,除了key和明文外,又引入了tweak值,这个tweak是可以调整的,不同的tweak会导致加密的结果不同(其实也是一个salt)。

加密一个块的流程:

xts_tweak

公式表示就是:C ← XTS-AES-blockEnc(Key, P, i, j)

xts模式有两个密钥K1|K2,一个用于调整tweak, 另外一个用于分组加密。
P是一个128bit的明文块
i是一个128bit的tweak值
j是这个块在数据单元中的索引
C是这个块加密后的密文

1、 tweak使用密钥K2进行AES加密(ECB模式, 不需要iv),结果进行一个有限域数aj的乘运算,得到T
2、T跟明文块P异或得到PP
3、PP再使用K1进行AES加密得到CC
4、CC再和1中的T异或得到最终的密文C

加密一个数据单元的流程

一个数据单元包含多个数据块。
公式表示:C ← XTS-AES-Enc (Key, P, i)
Key, P, i含义跟上面一样。

一个明文P分成m+1个明文块 P = P0 |… |Pm−1|Pm, 128*m < P的位数, 前0-m-1块长度都是128bit, 最后一块为0-127bit。

前面0 ~ m-2 块直接计算: Cq ← XTS-AES-blockEnc(Key, Pj, i, q)

最后两块的加密特殊一些
1、当最后一块长度为0时,
Cm-1 ← XTS-AES-blockEnc(Key, Pm-1, i, m-1)
Cm为空

2、最后一块长度不为0时,
a) CC ← XTS-AES-blockEnc(Key, Pm-1, i, m-1) 先根据第m-1计算加密密文 CC
b) Cm ← first b bits of CC 取出CC中的前b个字节作为第m块的加密密文
c) CP ← last (128-b) bits of CC 取CC的后128-b bit得到CP
d) PP ← Pm | CP CP和Pm组成PP
e) Cm-1 ← XTS-AES-blockEnc(Key, PP, i, m) 计算Cm-1

最后汇总所有的密文。

xts_aes_enc

解密一个块的流程

xts_aes_enc

解密跟加密基本一样,就是明文和密文对调一下。

解密一个数据单元的流程

解密数据单元跟加密数据单元也是相同的。同样的最后两块也是特殊处理一下。

xts_aes_decm1127

问题

tweak加密后会作一个什么有限域的运算aj, 这个aj的是怎么来的呢? 有限域运算又是啥呢,最终还是没有搞懂。

内核的linux kernel crypto 的源码需要认真的读一读。

参考资料:

https://new.qq.com/rain/a/20220305A08CQ500

http://libeccio.di.unisa.it/Crypto14/Lab/p1619.pdf

更多

年底了, 公司通知剩余的年假赶紧休掉,否则年底统一清零,要跨年的需要特殊申请。今年3月份入职的,折算一下有八天年假,领导让休假那就休假吧。年假只算工作日,那么我就连续休息11天啦。到今天算是第六天了, 过半了。脑袋也放空了5天了,接下来的时间得看点东西了。


行动,才不会被动!

欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。

博客地址: https://fishmwei.github.io

掘金主页: https://juejin.cn/user/2084329776486919