2016-09-26 112 views
0

我在Mozilla上學習了整整一天the documentation of SubtleCrypto,並且無法找到一種方式來使用一個版本的RSA密鑰同時進行加密和簽名。SubtleCrypto API在一種算法中是否支持加密和簽名?

我很困惑,因爲我能寫code in Java to do this job。 Java在這裏瘋狂的東西,我沒有找到正確的方式,或者它只是沒有實現在SubtleCrypto?

+0

您的問題缺乏具體細節。有'SubtleCrypto.encrypt()'和'SubtleCrypto.sign()'。現在,什麼不適合你? –

+0

是的,這太瘋狂了,因爲你不應該爲不同的任務使用相同的密鑰。這可能會泄漏足夠的信息,導致您同時失去機密性和身份驗證。使用單獨的密鑰對。無論如何,我不知道問題是什麼。您可以請求'generateKey'和'importKey'的多種用法。請記住,使用公鑰進行加密並使用私鑰進行簽名。 –

+0

我不能帶任何帶SubtleCrypto的代碼來同時使用一個生成的RSA密鑰爲'SubtleCrypto.encrypt()'和'SubtleCrypto.sign()'工作,就像我的Java代碼一樣。如果我使用'encrypt + decrypt'或'encrypt + decrypt + sign +',那麼RSASSA-PKCS1-v1_5''只能使用'sign + verify'並且失敗並顯示錯誤消息'DOMException:無法使用指定的密鑰用法創建密鑰。 verify'。如果我使用'RSA-OAEP'完成此操作,則只適用於'encrypt + decrypt',而不是'sign + verify'或'encrypt + decrypt + sign + verify'。 – GreNodge

回答

1

一些不對稱算法會泄漏關於它們的細節,具體取決於它們的使用方式。出於這個原因,Webcrypto作者決定通過防止這種情況「幫助防止用戶傷害自己」。

不是所有的算法都有這個屬性,例如,基於EC-Schnorr的算法沒有(Curve25519就是這樣的一個例子),說這不是Web Crypto現在支持的算法。

可以導出密鑰並將其重新導入爲另一種類型,這可以解決可導出密鑰的這種限制。也就是說,如果您使用的是secp256r1或其家族成員,則應使用唯一密鑰並將它們加密綁定到相同的主題,而不是使用一個密鑰。