日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

手动推导计算AES中的s盒的输出

發布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手动推导计算AES中的s盒的输出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

手動推導計算AES中的s盒的輸出

初衷

為了解決一道密碼學課后作業:

在AES中,對于字節 “00” 和 “01” 計算S盒的輸出。

百度查了很久,很多都是淺嘗則之,沒有具體說明S盒計算的具體過程和方法,要么就是說直接使用S盒求出,搞的我很崩潰,本身也是半吊子。后來在這篇文章的幫助下,順利找到了解決方法。


很明顯,如果通過查表的方式,很容易就可以得出63“63”7C“7C”這兩個輸出。但是這道題不能這么做,需要手動計算S盒的輸出。

算法過程簡介

AES加密算法涉及4種操作:

  • 字節替代(SubBytes)
  • 行移位(ShiftRows)
  • 列混淆(MixColumns)
  • 輪密鑰加(AddRoundKey).

其中第一步字節替換,即SubBytes,它是作用在狀態中每個字節上的一種非線性字節變換,這個變換(或稱S_box
)按以下兩步進行:
- 把字節的值用它的乘法逆來代替,其中 “00” 的逆就是它自己;
- 把經上一步處理后的字節值再進行如下定義的仿射變換:

因此第一步需要求多項式的乘法逆

又二進制多項式 b(x)b(x) 的乘法逆為滿足

a(x)b(x)=1modm(x)(1)(1)a(x)b(x)=1modm(x)
的二進制多項式 a(x)a(x) ,其中 a(x)=b?1(x)a(x)=b?1(x)

計算過程

1. 求乘法逆(Multiplicative Inverse)

在RJNDAEL中的不可約多項式為:

m(x)=x8+x4+x3+x+1(17)(17)m(x)=x8+x4+x3+x+1
假設我們要求 a(x)a(x)的逆,對 a(x)a(x) m(x)m(x)使用擴展歐幾里得算法可以得到形如
b(x)?a(x)+s(x)?m(x)=1(18)(18)b(x)?a(x)+s(x)?m(x)=1
的等式,即等價于
b(x)?a(x)=1(modm(x))(19)(19)b(x)?a(x)=1(modm(x))
其中 a(x)a(x)的逆為 b(x)b(x)


假設現在我們的輸入是02“02”,根據已有S盒中得到的結果為77“77”,所以接下來我們要驗證使用下面講述的方法,最后計算的結果是否也是77“77”

  • 可以得出02“02”對應的二進制多項式為 xx;
  • 接下來介紹的方法來自這里,根據這個方法可以得到以下的表格:
  • RemainderQuotientAuxiliary
    x8+x4+x3+x+1x8+x4+x3+x+100
    xx11
    11x7+x3+x2+1x7+x3+x2+1x7+x3+x2+1x7+x3+x2+1

    表格的生成規則是:AuxiliaryAuxiliary 列的前兩行以 0 和 1 開始,RemainderRemainder列的前兩行通常以 m(x)m(x)a(x)a(x)開始,如上表所示。接下來的行的計算方法是:取以當前行的前兩行中的RemainderRemainder相除,得到的商放在QuotientQuotient列中,得到的余數放在RemainderRemainder列中。接著將當前號的quotientquotient值乘上一行的AuxiliaryAuxiliary(GF(28)GF(28)上的乘法)并且再加上(GF(28)GF(28)上的加法)上上【即前兩行】一行的AuxiliaryAuxiliary列中的值,最后把計算的結果放到當前行的AuxiliaryAuxiliary 列上。當RemainderRemainder列減小到一時,AuxiliaryAuxiliary 列中的值就是a(x)a(x)對應的乘法逆。下面就上面的例子做一下說明:

  • AuxiliaryAuxiliary 列的前兩行以 0 和 1 開始,所以表格AuxiliaryAuxiliary 列前兩行填上 0 和 1;
  • RemainderRemainder列的前兩行通常以 m(x)m(x)a(x)a(x)開始,所以表格RemainderRemainder列前兩行填上x8+x4+x3+x+1x8+x4+x3+x+1xx,其中a(x)a(x)為我們要求乘法逆的多項式,這里我們假設a(x)=xa(x)=x
  • 接下來用x8+x4+x3+x+1x8+x4+x3+x+1除以xx,得到商為x7+x3+x2+1x7+x3+x2+1,余數為11,分別填入QuotientQuotient列和RemainderRemainder列中。
    4.計算 AuxiliaryAuxiliary 列,將當前行的QuotientQuotient列的值,即x7+x3+x2+1x7+x3+x2+1,去乘上一行 AuxiliaryAuxiliary 列的值,即11,再去加上上一行的 AuxiliaryAuxiliary 列的值,即00,最后得到結果為(x7+x3+x2+1)?1+0(x7+x3+x2+1)?1+0,注意此處的運算都是GF(28)GF(28)上的乘法和加法。
  • 此時RemainderRemainder列已經等于11,所以x7+x3+x2+1x7+x3+x2+1就是xx的乘法逆。
    求乘法逆的過程到此結束,將x7+x3+x2+1x7+x3+x2+1轉換為二進制即為1000110110001101,接下來進行第二步操作:仿射變換(Affine Transformation).
  • 2. 仿射變換(Affine Transformation)

    關于仿射變換可以參考這個論壇里的討論,里面講的已經很詳細了,大致的過程就是矩陣運算,其中矩陣每一行和上一步求出乘法逆相與之后,再對得到的8位二進制進行異或,最后得到00或者11.比如:

    Input = 1 0 1 1 0 0 0 1 (LSB First)Row 0 = 1 0 0 0 1 1 1 1Bit 0 = 1 0 0 0 0 0 0 1 = 0Row 1 = 1 1 0 0 0 1 1 1Bit 1 = 1 0 0 0 0 0 0 1 = 0Row 2 = 1 1 1 0 0 0 1 1Bit 2 = 1 0 1 0 0 0 0 1 = 1Row 3 = 1 1 1 1 0 0 0 1Bit 3 = 1 0 1 1 0 0 0 1 = 0Row 4 = 1 1 1 1 1 0 0 0Bit 4 = 1 0 1 1 0 0 0 0 = 1Row 5 = 0 1 1 1 1 1 0 0Bit 5 = 0 0 1 1 0 0 0 0 = 0Row 6 = 0 0 1 1 1 1 1 0Bit 6 = 0 0 1 1 0 0 0 0 = 0Row 7 = 0 0 0 1 1 1 1 1Bit 7 = 0 0 0 1 0 0 0 1 = 0

    注:LSB first表示低位在前

    上一步求出1000110110001101,其低位在前即1011000110110001。接下來將inputinputrowrow相與再將得到的所有bitbit進行異或運算,得到矩陣運算的結果0010100000101000,之后再和最后的矩陣向量1100011011000110進行GF(28)GF(28)上的加法運算,得到了1110111011101110。由于我們一直都是以低位在前進行運算,最后的結果需要換為 MSBfirstMSBfirst 高位在前,所以將1110111011101110倒著寫得到最終結果011101111011101111。查看S_box的表格可知,輸入0202最終得到7777,計算結果正確。至此AESAES的S盒計算過程已經摸索清除,至于其中更深層次的數學原理,如果有哪位大神知道的可以留言一下。

    總結

    起初是為了解決一道題,后來發現百度很久(不知道是不是我的打開方式有問題),居然沒有很整齊劃一的方法可以解答這個問題,國內的論壇都是抄來抄去,沒有人解決實質性的問題,幸虧后來在一些國外的論壇找到了答案。雖然這篇文章的講到的一些原理還沒有弄懂,我也不是很清楚為什么這么算就可以了。。。不過我相信后來的人再看到就有機會更深層次地挖掘,更好地弄懂這類問題。

    碼字不易,轉載請注明出處

    參考資料

    1.http://mathforum.org/library/drmath/view/51675.html
    2.https://crypto.stackexchange.com/questions/10996/how-are-the-aes-s-boxes-calculated
    3.https://wenku.baidu.com/view/a1832d43b307e87101f696ac.html
    4.https://www.cnblogs.com/luop/p/4334160.html
    5.https://max.book118.com/html/2016/0222/35595572.shtm

    總結

    以上是生活随笔為你收集整理的手动推导计算AES中的s盒的输出的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。