AES加密算法

AES(Advanced Encryption Standard)加密算法

参考 “【AES加密算法】| AES加密过程详解| 对称加密| Rijndael-128| 密码学| 信息安全” https://www.bilibili.com/video/BV1i341187fK?from=search&seid=14609524973320441322
参考 《密码编码与信息安全——C++实践》

基本原理

  • AES属于分组加密算法,属于对称加密,故在传递密钥途中有密钥泄露的风险
  • 明文plainText和密文cipherText固定长度为128bit(16B)
  • 密钥长度为128,192,256bit,密钥长度会改变算法循环次数,分别对应10/12/14轮循环
    AES加密算法_第1张图片

加密过程

AES加密算法_第2张图片

  • 先将16Byte(一个字节是一个0xFF)数据合成一个矩阵,再进行后续计算
    AES加密算法_第3张图片

  • 以密钥为128bit为例,进行10轮循环,包含9轮循环运算和1轮最终轮运算,在最终轮运算中只进行1,2,4步骤(不进行列混合步骤)
    AES加密算法_第4张图片

  • 初始变换。将明文矩阵和密钥矩阵按字节中每一位异或。
    AES加密算法_第5张图片
    AES加密算法_第6张图片

  • 9轮循环中1.字节代换。这是一个S盒代换,是一个非线性代换。
    如将(0, 0)处19查S盒后替换。
    AES加密算法_第7张图片
    AES加密算法_第8张图片

  • 9轮循环中2.行移位。将每一行字节按照字节循环左移。
    AES加密算法_第9张图片
    AES加密算法_第10张图片

  • 9轮循环中3.列混合。将上一步得到的矩阵左乘一个矩阵(不是矩阵点乘的相乘相加)。而是相特殊乘(01相乘就是本身,无需管)再相互异或。
    AES加密算法_第11张图片
    AES加密算法_第12张图片

  • 9轮循环中4.轮密钥加。即将上一步得到的矩阵的每一列和与子密钥矩阵异或操作。
    AES加密算法_第13张图片

密钥生成

使用密钥扩展得到10轮的密钥。将原初始密钥矩阵逐字节列向右边列扩展,根据该列是否是4的倍数扩展方式不同。如果是4的倍数则比较麻烦,如果不是4的倍数则需要进行异或操作。
AES加密算法_第14张图片

  • 若不是4的倍数
    AES加密算法_第15张图片
  • 若是4的倍数,则要进行字循环;字节代换;轮常量异或。上面三步称为T函数,再将T函数得到的结果和W[i-4]异或。细节来说,就是先对W[i-1]即前一列数据循环左移一个字节;再对字循环结果使用S盒进行字节代换;再同轮常量进行异或。将得到的结果再和W[i-4]异或。
    AES加密算法_第16张图片

AES加密算法_第17张图片
AES加密算法_第18张图片
AES加密算法_第19张图片

你可能感兴趣的:(网络,安全)