Encryption

AES 256 加密使用什麼轉置方法

  • April 29, 2018

我有興趣學習如何在 C/C++ 中使用 AES-256 加密。我仍然是密碼學的初學者,但我對自己的程式能力充滿信心。

關於這個話題我還有很多東西要學習,所以請不要回復告訴我我不應該實施算法或者我應該上大學。我不是,也永遠不會。

我的問題只是在您向函式發送消息和密鑰後使用的轉置方法。我不完全了解如何使用密鑰,但我了解足以知道消息字元通過一個至少被呼叫 10 次的函式。我也明白這個函式經歷了一個替換 -> 換位 -> 替換 -> XOR 的過程

我的問題是關於換位的。我了解兩種方法(我不知道他們的名字) 一種是在上下交替的線上一點一點地繪製資訊,最終將上半部分與下半部分結合起來。我理解的另一種方法是您說出一個數字並使用該數字加密 ex:

3612
hell
othe
rexy

密文:lhxleyhorete

AES-256 中使用了哪些方法?它使用多個嗎?

AES 使用什麼轉置方法?

轉置是將數據簡單地移動到替代位置。當涉及到轉置時,AES 中有兩個相關步驟:addRoundKey 和 shiftRows。

addRoundKey

addRoundKey 步驟包含按位向左旋轉。這是單個字內的位轉置。

移位行

shiftRows 步驟是狀態中字節的轉置。狀態的四行中的每一行都偏移了一個量 $ 0 $ 至 $ 3 $ 地方。此步驟旨在與 mixColumns 操作協同工作,以確保狀態的變化均勻且完全地擴散到狀態的其餘部分。

結論

addRoundKey 函式包含按位轉置,而主函式的 shiftRows 步驟是按字節轉置。

筆記

我有興趣學習如何在 C/C++ 中使用 AES-256 加密

話雖如此,如果您想了解算法的工作原理,那麼實施它是一個很好的策略,您應該這樣做。但是,在安全的加密庫中要考慮的不僅僅是功能上的正確性——您的程式碼可以產生正確的輸入/輸出,同時仍然容易受到各種微妙而令人印象深刻的攻擊。完成實施後,您可能會查看是否可以找到/使用這些攻擊中的任何一種來破壞您的程序。

如果您打算使用 AES 保護現實世界中的使用者數據,您應該強烈考慮使用預先存在的庫,例如 libsodium *。

  • 注意:我並不是不鼓勵您編寫自己的程式碼,但使用它是另一回事。你不會自學 2 週空手道,然後啟動僱傭兵保護服務,原因在現實世界中很明顯,但在資訊世界中不一定如此明顯。賦予自己權力是偉大的,但保護人民是對抗強大的對手,他們意味著需要認真對待業務

引用自:https://crypto.stackexchange.com/questions/58766