?姓名:熊子豪 ?? 學號:19011210143
?轉(zhuǎn)載自? https://blog.csdn.net/s_lisheng/article/details/103470462
【嵌牛導讀】 密碼學博大精深项栏,這里所說的AES加密算法原理可以理解為AES工作流程碎紊,至于為什么這么設計秸弛,什么是安全的,有待今后 ? ? ? ? ? ? ? ? ? ? ?? 的學習與思考桨螺。
【嵌牛鼻子】AES,密碼學容握。
【嵌牛提問】AES的構造方法和算法流程是什么哨颂,應用AES加密算法時,遇到了性能瓶頸跌宛,需要提高AES加密算法的吞吐量該怎么辦酗宋?
【嵌牛正文】
分組密碼設計的兩個原則
分組密碼設計的兩個原則:混淆(confusion)和擴散(diffusion),其目的是抗擊敵手對密碼系統(tǒng)的統(tǒng)計分析疆拘。
混淆是使密文的統(tǒng)計特性與密鑰的取值之間的關系 盡可能復雜化蜕猫,以使密鑰和明文以及密文之間的依賴性對密碼分析者來說是無法利用的。
擴散的作用就是將每一位明文的影響盡可能迅速地作用到較多的輸出密文位中哎迄,以便在大量的 密文中消除明文的統(tǒng)計結構回右,并且使每一位密鑰的影響盡可能迅速地擴展到較多的密文位中,以防對密鑰進行逐段破譯漱挚。
在后面的AES算法設計的過程中可以看到其核心步驟符合這兩個原則翔烁。
AES的構造方法
AES分組密碼為128bit的分塊長度,密鑰長度為128旨涝、192蹬屹、256bit,密鑰長度影響密鑰編排(即在每一輪中使用的子密鑰)和輪的次數(shù)白华,但是不影響每一輪中的高級結構慨默。
主要分如下幾個過程:
1、KeyExpansion: 密鑰擴展弧腥,每一輪輪密鑰都是不同的业筏,需要依據(jù)密鑰擴展為不同輪次的128bit輪密鑰。
2鸟赫、Initial round key addition: 初始輪密鑰加
? ? 1、AddRoundKey
3消别、9,11 or 13round: (密鑰長度不同抛蚤,輪數(shù)不同)
????1、SubBytes
? ? 2寻狂、ShiftRows
? ? 3岁经、MixColumns
? ? 4、AddRoundKey
4蛇券、Final round(making 10,12 or 14 rounds in total):
????1缀壤、SubBytes
? ? 2樊拓、ShiftRows
? ? 3、AddRoundKey
AES128算法流程如下圖所示:
KeyExpansion(密鑰擴展)
每一輪使用的密鑰都是根據(jù)上一輪的密鑰變換而來的塘慕,由密鑰生成不同輪次輪密鑰的算法過程可參考AES key schedule筋夏,這里不再細述。
SubBytes(字節(jié)替代)
字節(jié)替代图呢,就是依據(jù)S盒(Subtitution Box)把明文塊的每一個字節(jié)都替代成另外一個字節(jié)条篷,b[i,j] = S(a[i,j]), 實現(xiàn)時直接查表即可蛤织。
ShiftRows(行移位)
這一步就像圖中所描述的:第一行不變赴叹,第二行循環(huán)左移1個字節(jié),第三行循環(huán)左移2個字節(jié)指蚜,第四行循環(huán)左移3個字節(jié)乞巧。
MixColumns(列混淆)
輸入數(shù)組的每一列要和一個常量矩陣做矩陣相乘,得到對應的輸出列摊鸡。
AddRoundKey(輪密鑰加)
128bit的輪密鑰同樣被排列成4X4的矩陣绽媒,輸出值b[i,j] = a[i,j] XOR k[i,j]。
參考資料:
Advanced Encryption Standard
FIPS 197, Advanced Encryption Standard (AES)
最后應用AES加密算法時柱宦,遇到了性能瓶頸些椒,需要提高AES加密算法的吞吐量,目前有2個思路掸刊,一個是硬件加速免糕,AES-NI,但這個加速目前測的最多能提升10倍左右忧侧,吞吐量還是不夠石窑,還有一個思路是GPU加速,在CTR模式下進行并行計算加速蚓炬,這個目前還沒有實現(xiàn)并進行測試松逊,可參考這篇GPU accelerated AES in counter mode。
————————————————
版權聲明:本文為CSDN博主「讓我思考一下」的原創(chuàng)文章肯夏,遵循 CC 4.0 BY-SA 版權協(xié)議经宏,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/s_lisheng/article/details/103470462