DAY 9- 《区块密码2》AES(1)- 加密过程

"AES, ACE, ASS, AIDS(喂)"
---
现今最广泛使用的对称式密码 AES (Advanced Encryption Standard),由美国的 NIST 在2001年制定为标准。
目前还没有人把他打下来。

AES 在选中之前不叫做 AES ,而是设计者自行决定名称,投稿参选。
现今使用的这个 AES 原始名称是Rijndael,由J. Daemen 和 V. Rijmen 所设计。
其他参选者有Twofish, Serpent 等等。不过最後是由 Rijndael 拿下了这场选拔。

加密过程

AES 是一个128位元的区块加密演算法,密钥长度可以是128, 192, 256位元。
所以会写作AES-128、AES-192、AES-256
加密的过程有4个步骤,重复执行10, 12, 14回合(根据密钥长度决定)。
加密过程如下图。

一开始要先将资料处理一下,排列成4×4的表示方法。
我们要将128位元的资料分成16个位元组(bytes),再将每个位元组用16进位表示。

1. SubBytes

利用下面的S-box中的每一格代换掉。
这个S-box是经过设计的,能提供非线性的变换。

2.ShiftRows

即是将第一列不动,第二列向左旋转一格,
第三列旋转两格,第四列旋转三格。

3.MixColumn

将每一行看做一个向量和另一个固定的4×4的矩阵相乘。
矩阵相乘中的加法使用XOR,
乘法使用https://chart.googleapis.com/chart?cht=tx&chl=GF(2%5E8)中的乘法,这个就...看看就好(超不负责任)。
总之你还是会得到四格就对了。

如果你真的对这个乘法很有兴趣的话,你可以看一下这个印度人。
然後当你发现他用十分钟解完16格里面的1格的时候...嗯。
有兴趣的话可以去找找有限体里的乘法。
重点是,不管如何计算,加减乘除,这些数字永远会落在https://chart.googleapis.com/chart?cht=tx&chl=2%5E%7B8%7D 之内。

4.AddRoundKey

最後一步就是将你有的所有东西跟回合密钥做XOR就完成了。

以上就是AES里面最主要的4个步骤。
我们再从头来过一次。

一开始我们有128位元的资料。
先将这些分成16个byte,再用16进位表示,放到4×4的格子里。
接着先把他们和原始密钥做XOR一次。
再来进入10个回合(假设密钥长度128)的SubBytes,ShiftRows,MixColumns,AddRoundKey
注意到第十回合时不必做 MixColumns 的动作。

跟DES一样,我们明天再来说如何制造回合密钥,
以及AES的安全性。

图片来源:
https://www.sciencedirect.com/topics/computer-science/advanced-encryption-standard
https://towardsdatascience.com/aes-encryption-256-bit-a9ae49cde0b6
https://slideplayer.com/slide/250044/
https://www.meme-arsenal.com/en/create/meme/1834508

参考资料:
https://www.youtube.com/watch?v=O4xNJsjtN6E


<<:  Day13-pod服务处 介绍service

>>:  Day07 NAT 类型

予焦啦!产出可执行档

本节是以 Golang 上游 1a708bcf1d17171056a42ec1597ca8848c...

[13th-铁人赛]Day 8:Modern CSS 超详细新手攻略 - 伪元素 Pseudo Element

伪类与伪元素差别 如果你只在伪元素前加一个冒号,你有时会发现也可以正常运行,但在CSS3之後伪元素改...

#15 Automation (3)

今天我们来加个 retry 函式,因为我觉得这个程序可能会出莫名其妙的问题。 然後说说如何处里图片验...

33岁转职者的前端笔记-DAY 23 JavaScript 变数与型别

Nan => Not a Number,要判断是不是NaN要用:isNaN(); 注意自动转...