2

WebCrypto は RSA をサポートしていますが、実行できるさまざまな操作のパディング スキームを選択する必要があります。RSA は、署名/検証と暗号化/復号化 (+ キー ラッピング) の両方を実行できますが、webcrypto API ではそれはほとんど不可能です。

RSA-OAEP を使用して RSA キーを生成すると、同じキーを RSA-PSS に使用できますが、webcrypto API を使用してそれらを移動する明確な方法はありません。

私の最初の考えは、キーを変換するために次の手順を実行することでした。

  1. exportKeyを使用してキーをエクスポートしますjwk
  2. alg(たとえば) からRSA-OAEP-512"修正"PS512
  3. "修理"key_ops

    を。encrypt->verify

    b. decrypt->sign

  4. 正しいアルゴリズムで「固定」キーをインポートする

このシステムは、秘密鍵 (悪意のあるスクリプト、self-xss など) のセキュリティを強化するために、鍵をエクスポートできない場合に機能しなくなります。

アルゴリズムの種類を「変換」するが、エクスポートする機能なしでキーを保持する良い方法は何でしょうか?

4

1 に答える 1

3

webcrypto API では、署名と暗号化にキーを使用することはできません。おそらく、この方法は推奨されていないためです。この回答を参照してください https://crypto.stackexchange.com/a/12138/42888

鍵ペアが署名に安全に使用され、暗号化に安全に使用される場合、暗号的に言えば、署名と暗号化に同じ RSA 鍵ペアを使用することは安全です。

ただし、これは別の理由で悪い考えです: key management。署名キーと暗号化キーには、バックアップ、アクセス制御、否認などの点で異なる要件があります。壊滅的なイベントが発生した場合の署名キーのフォールバックは、将来の偽造を避けるために署名キーを破棄することです。幅広くバックアップ。逆に、暗号化キーのフォールバックは、既存のドキュメントを復号化するために保持することであるため、確実にバックアップする必要があります。

あなたの質問に答えるには、次のことができます。

  1. 抽出可能な RSA キーを生成し、
  2. packs8 または jwk にエクスポートします。
  3. 抽出不可として 2 回インポートします: key1-> RSA-OAEP、 key2->RSA-PSS
  4. 元の抽出可能なキーを破棄する

次に、結果のキーは等しく、抽出不可能であり、元のキーはブラウザのメモリでのみ管理されます。

ブラウザで 2 つのキーを取得するため、公開キーの受信者が異なる場合は、署名用と暗号化用に個別のキーを生成することを検討してください。

于 2017-12-11T16:28:39.263 に答える