フォームからパスワードを取得し、RSAで暗号化してからJavaスクリプトでフォームを送信しようとしています。RSA復号化が逆戻りしています。Javascript - > perl
フォームがPerlコードで受信されると、パスワードを復号化します。私は、同じRSAキーを使用してJavaスクリプトとPerlを取得することができました。私はJavaスクリプトで暗号化されたメッセージを暗号化し、PerlでPerlで暗号化されたメッセージを復号化できます。
次のステップは、Javaスクリプトで暗号化し、Perlで復号化することです。私はほとんどそこだfrusteration多くの後、しかし、復号化された文字列は後方です:
Clear Text Here!
はポスト Perlはその後、解読しようとすると、次の
������������������������������������������������ereh txet raelC
を作成している経由で提出し、その後JavaScriptで暗号化されます
ご覧のとおり、それは逆です。奇妙な文字は、javascriptライブラリが0の文字列をパディングした結果です。
これはエンディアンと関連があると思われますが、これまでの私の実験ではgobbly-gookが作成されています。
私はperlパッケージCrypt :: OpenSSL :: RSAを使用しています。 そして、Dave Shapiroによって書かれたjavascript rsaと関連する数学ライブラリは、ここにあります:http://ohdave.com/rsa/
JavaScriptのRSAライブラリはバイナリの10進表現として値を返します。私はこれをCrypt :: OpenSSL :: Bignumオブジェクトに送り、perlコードをバイナリに変換して使用します。
暗号化コードは次のとおりです。
function doEncryption(key, ptextID, ctextID) {
$(ctextID).val("Encrypting...");
$(ctextID).val(encryptedString(key, $(ptextID).val()));
}
と復号化コードです:
sub java_decrypt {
my $message = shift;
my $rsa = shift;
$rsa->use_no_padding();
my @blocks = split ' ', $message;
my $decmessage = "";
foreach my $block (@blocks) {
my $bitz = Crypt::OpenSSL::Bignum->new_from_decimal($block);
$decmessage .= $rsa->decrypt($bitz->to_bin());
}
$rsa->use_pkcs1_oaep_padding();
#$decmessage = reverse $decmessage;
#$decmessage =~ s/\0//g;
return($decmessage);
}
最後にコメントアウトの2行は、復号化が後方とパッド入りのもので問題を修正しますが、私はそれを信じているか分からない。 perlで暗号化されていれば、正しい方法で出てくるので、これを解決する良い方法があれば(バイナリ文字列のエンディアンを変える?)私はそれをもっと好むでしょう。
私はpackでendiannessを交換しようとしましたが、これは私にはちょっとばかげた報酬しか与えませんでした。そして、尋ねられた場合には、メッセージが現在1つの64byteブロックにあるので、復号されたメッセージの文字列連結は機能しません。
これを行うことで何を達成しようとしていますか?パスワードを要求する攻撃者は、クライアントに送信するjavascriptを単純に変更して、パスワードをプレーンテキストで送信するか、またはキーを傍受して暗号化されたパスワードを読み取ることができます。 –
RSA、私はjavascriptにキーの公開部分のみを与えることができます。したがって、それらを傍受すれば、サーバ上で安全な秘密鍵が必要なので、それらは役に立たなくなります。私は、攻撃者が送信を傍受できると仮定しています。私はどのように変更されたjavascriptからユーザーを保護するのか分からないが、彼らはパスワードを入力するようにキーログにJavaScriptを設定することができますので、クライアントコンピュータへの攻撃は常に動作します。それ以外の場合は、平文のパスワードの送信を常に推奨しています。何らかの保護が役に立たないため、私は同意しません。 –