2011-12-16 131 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