私は、特定の暗号システムに対して Index Calculus 攻撃と呼ばれるものを実行するいくつかの Matlab コードに取り組んでおり (これには離散ログ値の計算が含まれます)、1 つの小さなことを除いてすべて完了しました。pが素数ではない場合、pを法とする線形合同システムを解く方法を(Matlabで)理解できません。また、このシステムには複数の変数があるため、何かが欠けていない限り、中国の剰余定理は機能しません。
ここで詳細/フォーマットされたmathjaxを使用して、数学stackexchangeについて質問しました。私はそのリンクで私の質問の問題を解決しました。今、非素数を法とする合同システムを解決できるユーティリティを見つけようとしています。剰余算術をサポートするソルバーを含むスイートを見つけましたが、モジュラスは素数でなければなりません ( here )。また、非素数で動作するように修正するためにステップスルーしようとしましたが、システムのすべての要素が p を法とする逆数を持つ必要があるため、どの方法を使用しても機能しません。
Matlab で MuPAD 関数を呼び出す機能を使用することを検討しましたが、私のテストでは、MuPAD 関数linsolve
(これが最良の候補であると思われます) は非素数モジュラス値もサポートしていません。さらに、Maple を使用して、このシステムが目的の整数 (8) を法として解けることを確認したので、実行できます。
より具体的に言うと、これは MuPAD で実行しようとしている正確なコマンドです。
linsolve([0*x + 5*y + 4*z + q = 2946321, x + 7*y + 2*q = 5851213, 8*x + y + 2*q = 2563617, 10*x + 5*y + z = 10670279],[x,y,z,q], Domain = Dom::IntegerMod(8))
Error: expecting 'Domain=R', where R is a domain of category 'Cat::Field' [linsolve]
ドメインを IntegerMod(23) および IntegerMod(59407) に変更すると、同じコマンドで正しい値が返されるため、素数ではないため 8 は不適切だと思います。23 と 59407 をそれぞれドメインとして上記のコマンドを実行したときの出力は次のとおりです。
[x = 1 mod 23, y = 1 mod 23, z = 12 mod 23, q = 14 mod 23]
[x = 14087 mod 59407, y = 1 mod 59407, z = 14365 mod 59407, q = 37320 mod 59407]
これらの答えは、上記の私の Math.StackExchange リンクにある合同システムの 、、 、 、、x
、y
およびにz
対応q
しています。L1
L2
L3
L4