[解決済み] SHA256で署名する場合とRSA-SHA256で署名する場合の違いについて
2022-03-09 05:46:54
質問
で遊んでいます。 デジタル署名 node.jsを使用しています。テスト用に、XMLデータのデジタル署名を作成しました。最初はSHA256のみ、次にRSA-SHA256を使用しました。
私が困惑しているのは どちらの署名方法でも、まったく同じ署名が作成されます。 . どちらの署名も同じものです。もし同じなら、なぜ2つの異なる方法(SHA256対RSA-SHA256)なのでしょうか?
以下にコードを記載します。
var crypto = require('crypto'),
path = require('path'),
fs = require('fs'),
pkey_path = path.normalize('private_key.pem'),
pkey = '';
function testSignature(pkey) {
var sign1 = crypto.createSign('RSA-SHA256'),
sign2 = crypto.createSign('SHA256');
fs.ReadStream('some_document.xml')
.on('data', function (d) {
sign1.update(d);
sign2.update(d);
})
.on('end', function () {
var s1 = sign1.sign(pkey, "base64"),
s2 = sign2.sign(pkey, "base64");
console.log(s1);
console.log(s2);
});
}
// You need to read private key into a string and pass it to crypto module.
// If the key is password protected, program execution will stop and
// a prompt will appear in console, awaiting input of password.
testSignature(fs.readFileSync(pkey_path));
上のコードでは、ある文字列が出力され、それが署名となり、また全く同じ文字列が出力されます。これも同じデータの署名ですが、異なるアルゴリズムで作成されており、前のものと同一です。
解決方法は?
SHA256だけでは署名は作成できません。
SHA256はハッシュアルゴリズムです。つまり、任意の大量のデータを表す短いフィンガープリント番号を作成するアルゴリズムです。署名を生成するためには、この指紋を何らかの方法で処理し、ある秘密署名鍵の保有者を特定できるようにする必要がある。そのような処理の一つは、RSA 鍵ペアの秘密鍵を使用して指紋を暗号化し、他の人が関連する公開鍵を使用して結果を復号化し、秘密鍵の保持者が本当に署名者である必要があることを検証できるようにすることです。
crypto APIのコンテキストでは、RSA暗号化スキームが明示的に指定されていない場合の デフォルトの処理であるか、またはその処理の種類が
sign
RSA秘密鍵の場合はRSAを、DSA鍵の場合はDSAを、...と呼びます。
関連
-
[解決済み】AWS STS AssumeRoleへのアクセスを可能にする方法
-
[解決済み] NodeJsのSequelizeでautoIncrementはどのように動作するのですか?
-
[解決済み] NPMが同じエラーで固まる EISDIR: ディレクトリに対する不正な操作、エラーで読み込み (ネイティブ)
-
[解決済み] "致命的なエラーです。grunt "コマンドを実行すると、"Unable to find local grunt. "と表示されます。
-
[解決済み] -saveと-save-devの違いは何ですか?
-
[解決済み] package.jsonのチルダ(~)とキャレット(^)の違いは何ですか?
-
[解決済み] npm package.jsonファイルのdependencies, devDependencies, peerDependenciesの違いは何ですか?
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] node.jsの__dirnameと./の違いは何ですか?
-
[解決済み】RSA鍵のフィンガープリントを計算する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MongoClient v3.0使用時、db.collectionは関数ではない
-
[解決済み】Google spreadsheet api Requestに不十分な認証スコープがあった。
-
[解決済み】エラー TRK0005: 位置特定に失敗しました。"CL.exe"
-
[解決済み】npx コマンドが見つかりません。
-
[解決済み】MongooseでEnumを作成し使用する方法
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] EventEmitter のメモリリークの可能性が検出された
-
[解決済み] ReferenceError: describe は定義されていません NodeJs
-
[解決済み] express は `body-parser deprecated undefined extended` としてエラーを投げます。
-
[解決済み] "app.use(express.cookieSession())" に "secret" オプションが必要です。