ここであなたが望むことを達成する方法はいくつかありますが、それらはいくつかの詳細に依存します。
行列を反転する(または、より一般的には線形システムを解く)方法はいくつかあります。いくつかの例は、ガウスの消去法、ガウスの消去法、およびL/U分解です。これらのいずれかを使用して、 ;の一般的な線形システムA x = b
を解くことができます。Aの逆行列を取得するには、行列x
を解く必要があります(ここで、は単位行列です)。A X = I
X
I
最も重要な詳細は次のとおりです。「バイトの乗算」とはどういう意味ですか?乗算は有限体(おそらくあなたの場合はGF(256))の一部である必要があります。そうでない場合、それを反転することはできません。特に、これは「乗算」が通常のプロセッサネイティブの乗算ではないことを意味します。代わりに、ビットをいじる、またはテーブルルックアップ(ビットをいじることによって事前に計算されるテーブル)を実行する必要があります。また、GF(256)の「加算」と「減算」は実際にはビット単位のxorです(これは、これらが互いに同一であることを意味します)。
もう1つ、有限体を使用しているので、ピボットについて心配する必要はないと思います。説明:浮動小数点を使用している場合、線形システムソルバーは、浮動小数点エラーが指数関数的に蓄積されないようにするために、基本的な手順を実行する順序を選択する必要があります(実際に逆行列を計算することも避けたいと思います。各ベクトルに線形システムソルバーを使用することをお勧めします)。この順序の選択は「ピボット」と呼ばれ、線形ソルバーに関するほとんどのリファレンスはそれに多くの注意を払っています。
ただし、有限体の計算は正確であるため、この種の不安定性について心配する必要はありません。ソルバーのステップを順番に実行して、正確な逆行列を作成できます。確認する必要があるのは、行列が特異であるかどうかだけです。特異行列を乗算すると情報が失われるため、逆にすることはできず、使用可能な暗号化行列にはなりません。