DAY 10-《区块密码2》AES(2)-密钥排程及安全性

"AE、AES、AED、AEIOU。"
---

密钥排程 key schedule

以128位元的key做范例:
假设我们进行AES-128,那麽中间将经过11个AddRoundKey的过程,
也就是说,我们需要11把子密钥。(其中第一把即是原始密钥)
所以实际上我们要再生出10把回合密钥。

还记得我们把128位元的明文排成什麽样子吗?
在这里我们一样要把128位元的密钥排成那个样子。

可以看到下图左上角的矩阵,那个就是原始密钥,
接着看到这个矩阵下面有四个箭头,他的意思是说,我们令第一排的四个数字,
总共8×4 = 32位元为1个w(word)。
而128位元的key就是4个word。

以下的每一个操作都是以word为单位。

可以看到w4的建立过程比较繁琐,而接下来所有 w(4n) 的建立都会经过此步骤。
最後一个word,也就是w3(w(4n-1))会先经过 g 函数。
g 函数的内容是:
要先向上旋转一格,接着每一格都经过S-Box转换後,最左边的byte要和回合系数(RC)做XOR,
最後跟w0(w(4n-4))做XOR後得到的结果成为w4。

w5跟其他非 w(4n) 的word的建立就简单许多,
只要将上一个 w(t-1) 和 w(t-3) 做XOR即得到 w(t)。

如此一直下去可以制造很多个子密钥,
不过我们只需要前43个word就够了(如果是128位元密钥的话)。
如此一来我们就可以制造足够多的子密钥来使用。

安全性

暴力攻击

AES的密钥相较於DES长了许多,其最短的密钥也有128位元,
因此使用暴力搜索需要搜寻https://chart.googleapis.com/chart?cht=tx&chl=2%5E%7B128%7D 种密钥可能,最多需要https://chart.googleapis.com/chart?cht=tx&chl=2%5E%7B256%7D 种。

如果对https://chart.googleapis.com/chart?cht=tx&chl=2%5E%7B256%7D 没有概念的话,大概是1後面77个0。
因此是无法暴力破解的。

分析攻击

没有有效的分析攻击。

旁通道攻击(side-channel attack)

旁通道攻击是对实务上物理性质的攻击,比如从声音、时间、电力消耗取得资讯。
打个比方,当你要用电脑将演算法实现,那这台电脑就成了旁通道攻击的对象。
我们知道电脑在处理0和1的时候消耗的电量是不一样的,

那假设你有一台示波器可以知道你电脑随时的耗电量,那就可以经由波型看出密钥
(大概是这样啦)

那也就是为什麽不要使用自己写的加密程序,因为我们不知道怎麽写能够抵御旁通道攻击的演算法。
所以如果是经过设计的演算法,能够抵御旁通道攻击,那麽 AES 目前还算安全。

(我找不到 AES 的 meme 啦)

图片来源:
https://www.brainkart.com/article/AES-Key-Expansion_8410/
http://memegenerator.net/instance/25289451/high-expectations-asian-father-encrypted-using-des-why-not-aes

参考资料:
https://www.diva-portal.org/smash/get/diva2:1322924/FULLTEXT01.pdf
https://crypto.stackexchange.com/questions/58560/attacks-on-aes-128-192-256
https://www.atpinc.com/blog/what-is-aes-256-encryption


<<:  Day 10 Swift语法-进阶篇(3/5)-Initialization

>>:  Day 16: 人工神经网路初探 损失函数(上)

开源网路钓鱼框架-Gophish(补充)

今天下班後去学校上课 回到家後就11点多了...... 就简单说明关於Gophish操作可能遇到的几...

[Day 8] 阿嬷都看得懂的替 HTML 标签穿上行内样式

阿嬷都看得懂的替 HTML 标签穿上 CSS 样式 今天我们要来介绍排版的核心标签--div。 di...

强人PM与敏捷相遇 -1

大概在2018年的时候,开始认识敏捷。会想要认识敏捷,其实也是服务的公司碰到了一定程度的发展瓶颈。 ...

[Day27]效能监控

每间公司的开发都需要仰赖大量的资料,这也成为公司最重要的资产,而究竟什麽是效能监控呢,就好比资料表是...

Day 11: Structural patterns - Adapter

目的 如何在不修改物件的情况上,使用中间层(Adapter)後,能转换跟其他物件联系,同时原有功能不...