原创 AES加密算法 01

2009-10-3 22:45 2325 6 6 分类: 工程师职场
我挺讨厌中文教材的 他在完全直接翻译原文的同时 删掉了一些翻译的人认为不重要其实很有用的东西 而且翻译过来的部分也读不通 导致读不懂

从比较古老的aes开始

参考文档

官方说明文档

wiki

大致上介绍的话 是美国政府花钱征集的算法 全程是advanced encryption standard 一副很高级的样子 现在通常指代的是叫做rijindael的比利时人发明的那种 输入原文为128bit 密钥可以是128 192 256三种

中间要调的变量名 nk nb nr 分别指key lenth, block size, number of rounds 其中前两个是number of column,对应128 192 256的话 因为密钥长度不同 所以 nk是4 6 8, 原文长度相同 都是4 , 最后是加密轮数 可能也和密钥长度有关吧 我猜..........

数学基础 ------------ 都是多项式 其实好像是线性代数? 早忘光了

1 加法 其实就是异或
举例
十六进制 57+83=d4
二进制的话就是 0101 0111 + 1000 0011 = 1101 0100
多项式形式 [x^6+x^4+x^2+x+1] + [x^7+x+1] = [x^7+x^6+x^4+x^2]

2 乘法 先是普通的多项式乘法 然后相同的部分按照加法规则异或掉 再对高一个degree的最小公约二项式(m(x)=1 0001 1011) 进行mod运算
举例
57 . 83 = c1 -- 乘法符号用.表示咯
--多项式形式好难写 光写二进制
--首先是普通的多项式乘法
[01010111] . [10000011] = [01010111] + [10101110] + [101011 10000000]
--接下来进行异或运算
=10101101111001
--结果超出8bit 于是对100011011进行mod运算
[10 1011 0111 1001] mod [1 0001 1011]
--先将后面的数左移然后异或
[10 1011 0111 1001] + [10 0011 0110 0000] = [1000 0001 1001]
-- 仍然超出8bit 于是继续左移异或
[1000 0001 1001] + [1000 1101 1000] = [1100 0001]
得出结果c1

2 乘法 by x (不知道怎么翻译)
应该算作是一种简单的算法吧 把‘.’后面的数分解成几个数异或的形式 然后分别和前面的数进行'.'运算 再把结果异或起来 而与2的整数倍的'.'运算 就是左移位多余时候就进行mod运算就可以了
举例
十六进制 57 . 13 = fe
57 . 02
57是 0101 0111 左移一位 1010 1110 不用mod m(x) 57.02 = [1010 1110] = AE
57. 04
AE 左移一位 [1 0101 1100] mod m(x) = [1 0101 1100] + [1 0001 1011] = [0100 0111] = 47
57 . 08
47 左移一位 [1000 1110] = 8E
57 . 10
8E 左移一位 [1 0001 1100] + [1 0001 1011] = [0000 0111] = 07
13 = 10 + 02 + 01
57 . 13 = 57 . (10 + 02 + 01) = 57.10 + 57.02 + 57.01 = 07 + AE + 57 = [0000 0111] + [0100 0111] + [0101 0111]
= [1111 1110] = FE
呼 好爽快

3 接下来讲了一下8bit多项式系数的推导 懒得写了

明天写算法描述
大体上有四个步骤 subbytes shiftrows mixcolumns addroundkeys
另外关于key还有一个keyexpension
就是这样
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条