2011-12-16 168 views
1

我想整理一個加密alogritm,但我卡在以下問題,我甚至不知道它應該是這樣或不是!矩陣乘法逆加密

問題:

我有16字節矩陣由[16,16]矩陣相乘,並且結果是一個16字節的矩陣。

然後我應該乘以結果矩陣的逆,在這裏我想我應該得到原來的16字節矩陣(根據算法數據表)。

所以你能幫我告訴我如何找回原始矩陣?

感謝您的幫助提前。

關於,

Eng。 Aws

+0

投票結束,這與編程無關。看到這裏:http://www.intmath.com/matrices-determinants/6-matrices-linear-equations.php – leonbloy

+0

我不同意。這裏有數學,但它不是「數學」 - 有算法和技術,通常不會將其作爲純線性和抽象代數課程的一部分教授。 – comingstorm

回答

2

有很多方法可以完成我認爲你想要的東西,但它們取決於一些細節。

有很多方法可以反轉矩陣(或者更一般地說,解決線性系統)。一些示例是Gaussian elimination,Gauss-Jordan eliminationL/U decomposition。您可以使用其中的任何一種來解決x的一般線性系統A x = b;爲了得到A的逆,你需要爲A X = I解決矩陣X(其中I是單位矩陣)。

最重要的細節是:「乘以字節」是什麼意思?你的乘法需要是有限域的一部分 - 你的情況可能是GF(256) - 否則你將無法反轉。特別是,這意味着「相乘」不會是正常的處理器本地乘法;相反,你需要做一些小工具或查找表(這些表是通過所謂的位操作來預先計算的)。此外,GF(256)「加法」和「減法」實際上是按位異或(注意,這意味着它們彼此相同)。

另一件事:因爲你使用有限的領域,我不認爲你需要擔心pivoting。解釋:如果你使用的是浮點數,你的線性系統求解器將需要選擇執行其基本步驟的順序,以便保持浮點錯誤不會以指數方式累積(你也希望避免實際計算逆矩陣,青睞使用每個矢量的線性系統求解器)。這種排序的選擇被稱爲「旋轉」,並且線性求解器上的大多數參考文獻都很重視它。

但是,由於有限域數學是準確的,所以您不必擔心這種不穩定性 - 您可以按順序執行求解器的步驟,並構造精確的逆矩陣。你需要檢查的唯一事情就是如果你的矩陣是奇異的:乘以一個奇異矩陣會丟失信息,所以它不能被倒置,並且它不會是一個可用的加密矩陣。

+0

感謝您的回答,但是,讓我更詳細地解釋一下:當我說字節矩陣乘法確實存在一個模數256涉及,以及在添加和我應用操作的子指令的整數值在這兩種情況下,另一方面,另一方面,[16,16]矩陣及其逆矩陣已經預先定義好了,而我的問題是當我將[16]矩陣乘以預先設定的矩陣A,然後將結果乘以A反過來,結果不是它應該根據數據表的原始矩陣。 –

+0

如果你的矩陣及其逆矩陣是預定義的,但它們不像你期望的那樣工作,我懷疑問題是你正在使用錯誤的乘法。特別是,如果你的矩陣應該用於AES,你真的需要GF(256)算術,而不是你慣用的處理器原生乘法。 – comingstorm

+0

常規字節算術(即整數mod 256)的問題是它不是一個字段。你需要能夠取任何非零數字的倒數 - 也就是說,對於任何字節'x!= 0',你需要能夠找到'y',使得'x * y == 1(mod 256 )'。但對於整數模256,情況並非如此;例如,'2 * y'總是偶數,所以'2'沒有互補。 – comingstorm