Node.js 暗号モジュールを使用して、一部のデータの署名を検証しようとしています。Node.js 0.8.0 を使用しています。
ファイル内のデータは MD5 アルゴリズムを使用してハッシュされ、RSA 秘密鍵を使用して署名され、署名は別のファイルに保存されます。これはすべて Java ライブラリを使用して行われています。
openssl を使用して署名を検証する場合、これは成功です。次を使用します。
openssl dgst -verify mykey.pem -signature example.sig hello.txt
で応答しVerified OK
ます。hello.txt の 1 文字を変更すると、検証されません。上記のコマンドに -MD5 パラメーターを追加しても機能しますが、これがデフォルトだと思いますが、-MD4 または -SHA と言った場合、検証されません。これはすべて良いです。
次に、openssl をラップする Node 暗号化モジュールを使用しようとすると、この検証が機能しません。
私のコード例は次のとおりです。
var crypto = require("crypto");
var fs = require("fs");
var data = fs.readFileSync("./hello.txt");
var pubkey = fs.readFileSync("./mykey.pem", "utf8");
var signature = fs.readFileSync("./example.sig");
var verifier = crypto.createVerify ('RSA-MD5');
verifier.update (data);
var success = verifier.verify (pubkey, signature);
console.log(success);
これは常に を出力しますfalse
。私が試してみました:
- テキストファイルであるため、データを「utf8」および「ascii」でエンコードして読み取ります。
- 「ascii」でエンコードされたキーを読み取る (ある時点で誤ってエンコードされたキーを読み込んでいたときにいくつかの例外が発生したため、キーは問題ないと考える理由があります)
- ダイジェスト アルゴリズムとして RSA-MD5 の代わりに MD5 を使用する
- バイナリではなくbase64でエンコードされた署名をロードし、検証関数に「base64」パラメーターを配置します。
私のコードがここに示す openssl コマンド ラインと同じ操作を実行していると誤解していますか? これを解決する方法について何か提案はありますか?
更新: キーだけでなく、自己署名の信頼できる証明書を使用してみました。openssl が証明書を検証することを確認しましたが、ノードの暗号化ライブラリはファイルを検証しません。