簡體   English   中英

在 JavaScript 中生成 RSA 密鑰對

[英]Generating an RSA keypair in JavaScript

我最近發現了這個 RSA JavaScript 庫: http : //www.ohdave.com/rsa/ 但是,它要求預先生成密鑰。 這是我的問題/問題:

  1. 我想在 JavaScript 中生成一個 RSA 密鑰對(這樣我就不必每次想要一個新的密鑰對時都更改代碼。)

  2. 雖然我了解如何使用它來發送安全數據,但如果我沒記錯的話,這個庫不能用於客戶端從服務器接收安全數據(因為公共和私有指數以及模數是明文傳輸的 -來自服務器的文本)。 我錯了嗎?

我很想就此進行一些討論。 我不是安全專家,但我對非對稱加密有非常深入的了解。

這個問題大約在 10 年前就有人提出過,從那時起,很多事情都得到了改善。 目前,大多數現代瀏覽器都具有Web Crypto API ,該API提供生成強隨機數的能力,因此允許腳本生成加密密鑰、簽署數據、驗證簽名、加密和解密數據以及其他加密操作。

以下是來自上述 MDN 的示例代碼:

let keyPair = window.crypto.subtle.generateKey(
  {
    name: "RSA-OAEP",
    modulusLength: 4096,
    publicExponent: new Uint8Array([1, 0, 1]),
    hash: "SHA-256"
  },
  true,
  ["encrypt", "decrypt"]
);

生成密鑰對需要一個強大的隨機數生成器(我認為你在 JavaScript 中沒有)和相當多的計算(用於素性測試)。 然后一旦你有了你的對,當你將你的公鑰傳輸到另一端時,就有機會進行中間人攻擊,因為沒有對公鑰傳輸進行完整性檢查。

您將安全傳輸給擁有私鑰的任何人。 從您的問題中不清楚這是客戶端還是服務器。 您可以通過讓只有公鑰的人生成共享機密,對其進行加密並將其發送給擁有公鑰的任何人來初始化共享機密。

您可以獲得類似的功能集(依賴於隨機數生成器、MITM 漏洞、創建共享秘密以用作會話密鑰的能力),但通過執行 Diffie-Hellman 密鑰交換來減少計算量。

您最好弄清楚如何在您的服務器上配置 SSL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM