行列の逆行列がHillCipherアルゴリズムで計算される方法を理解するのは非常に難しいと感じています。私はそれがすべてモジュロ算術で行われているという考えを持っていますが、どういうわけか物事は合算されていません。簡単な説明をいただければ幸いです。
次のHillCipherキーマトリックスについて考えてみます。
5 8
17 3
説明のために上記のマトリックスを使用してください。
行列の逆行列がHillCipherアルゴリズムで計算される方法を理解するのは非常に難しいと感じています。私はそれがすべてモジュロ算術で行われているという考えを持っていますが、どういうわけか物事は合算されていません。簡単な説明をいただければ幸いです。
次のHillCipherキーマトリックスについて考えてみます。
5 8
17 3
説明のために上記のマトリックスを使用してください。
合同算術の背後にある数学を理解するには、数論に属する線形合同定理と拡張GCDアルゴリズムを研究する必要があります。
たとえば、行列Kの逆行列は、(1 / det(K))* adjoint(K)です。ここで、det(K)<>0です。
モジュロ算術で1/det(K)を計算する方法を理解していないと思います。ここで、線形合同とGCDが機能します。
あなたのKはdet(K)=-121です。mを法とする26であるとしましょう。x *(-121)= 1(mod 26)が必要です。
[a = b(mod m)はab = N*mを意味します]
x= 3の場合、26は(3 *(-121)-1)を正確に除算するため、上記の合同が真である
ことが簡単にわかります。もちろん、正しい方法はGCDを逆に使用してxを計算することですが、その方法を説明する時間がありません。拡張GCDアルゴリズムを確認してください:)
ここで、inv(K)= 3 *([3 -8]、[-17 5])(mod 26)=([9 -24]、[-51 15])(mod 26)= ([9 2] 、[1 15])。
更新:拡張ユークリッドアルゴリズムを使用してモジュラ逆数を計算する方法については、計算数論の基礎を 確認してください。-121 mod 26 = 9
、したがって、gcd(9, 26) = 1
を取得することに注意してください(-1, 3)
。
私の非常に謙虚な意見では、ガウス-ジョーダン法を使用して逆行列(モジュラーまたはその他)を計算する方がはるかに簡単です。そうすれば、行列式を計算する必要がなく、メソッドは非常に単純に任意の大規模システムにスケーリングされます。
'Gauss Jordan Matrix Inverse'を検索するだけですが、要約すると、反転する行列の右側に単位行列のコピーを隣接させ、行演算を使用して、それ自体が単位になるまで解く行列を減らします。マトリックス。この時点で、隣接する単位行列は元の行列の逆になっています。出来上がり!