N は 1024 ビットです。以下のように、メッセージ M (512 ビット) をモンゴメリー簡約形式に変換する必要があります。
M' = M * R^{-1} mod N
ここで、R = 2 ^ 512 (mod N)
どうすれば結果を達成できますか?
N は 1024 ビットです。以下のように、メッセージ M (512 ビット) をモンゴメリー簡約形式に変換する必要があります。
M' = M * R^{-1} mod N
ここで、R = 2 ^ 512 (mod N)
どうすれば結果を達成できますか?
OpenSSL の bignum パッケージを直接使用すると、次のように動作するはずです。
関数BN_mod_expを使用して、R=2^512 (mod N) を計算します。
その後、 を呼び出して、R の乗法モジュロ逆数を計算しますBN_mod_inverse。これにより、R^-1 が得られます。
完了したらBN_mod_mul、計算したばかりの R^-1 と元のメッセージを使用して乗算を行うように呼び出して、M' を計算するだけです。
上記の関数は、OpenSSL BigNum パッケージにあります。これらはインクルード ファイルにあります: openssl/bn.h