在瀏覽器中使用 Web Crypto 本地產生 RSA-OAEP 金鑰對,是直接呼叫託管式金鑰產生 API 之外的另一種選擇,因為瀏覽器會產生 SPKI 公鑰與 PKCS#8 私鑰,而無需將任何金鑰位元組傳送至遠端服務。RSA 金鑰產生器完全在用戶端執行:它會要求平台 Web Cryptography 實作建立兩個大質數,推導出 2048 或 3072 位元的模數,公鑰指數為 65537,並將金鑰對匯出為標準 PEM 信封。公鑰以 SubjectPublicKeyInfo (SPKI) 包裝,私鑰則以未加密的 PKCS#8 包裝,兩者皆以 64 欄為單位進行 Base64 換行。由於產生、匯出與封裝都在同一個分頁中完成,因此可以避免網路往返、速率限制、API 權杖,以及將私鑰資料暴露給第三方端點的操作風險。這種「本地優先」的設計,正是讓此工具在開發、測試與短期部署工作流程中,得以作為 RSA 金鑰產生 API 的實用替代方案。

rsa key generator api alternative
用於本地 PEM 輸出的 RSA 金鑰產生器 API 替代方案

為何本地產生器能取代託管式 RSA 金鑰 API

大多數託管式 RSA 金鑰 API 都遵循相同的模式:開發者以所需的模數大小發送 POST 請求,接收 JSON 或 PEM 回應,然後將私鑰儲存在自己的基礎架構上。這個模式確實可行,但它會引入一些依賴,而基於瀏覽器的工具可以將其移除。使用 RSA 金鑰產生器時,不需要建立帳號、不需要輪替 API 金鑰、不需要監控配額,也沒有圍繞新產生私鑰資料的伺服器端信任邊界。瀏覽器的 Web Crypto 實作本身就是金鑰產生基礎,該頁面會將輸出包裝成標準的 SPKI 與 PKCS#8 PEM,因此可以直接套用您既有的 PEM 檔案載入程式碼路徑。

當私鑰絕不能離開您的環境時,這種轉變最為關鍵。在瀏覽器中產生代表金鑰對從一開始就誕生於將使用它的裝置上。您可以將公鑰複製到一個會用它來加密的服務,然後將私鑰直接匯入本機金鑰存放區、硬體安全模組或平台祕密管理器,而完全無需透過網路傳輸。這能縮小 API 替代方案原本必須透過傳輸加密、請求簽章與伺服器端存取控制來防禦的攻擊面。

三步驟產生 RSA-OAEP 金鑰對

以下的操作流程反映了此工具已驗證的步驟,可避免參數飄移影響結果。

  1. 確認接收端系統實際的需求。此工具固定使用 RSA-OAEP、SHA-256、指數 65537,以及 SPKI / PKCS#8 PEM 信封。如果目標應用程式預期使用 RSA-PSS、PKCS#1 v1.5 填補、SHA-1 或自訂公鑰指數,則輸出將無法互通,您需要採用不同的工作流程。
  2. 選擇模數並產生。選擇 2048 位元以獲得廣泛的互通性,或選擇 3072 位元以獲得更大的安全邊際。產生是非同步的,3072 位元的產生時間明顯比 2048 位元更長,因為瀏覽器必須找出兩個更大的質數。在兩個 PEM 區塊出現之前,請勿中斷分頁。
  3. 散布公鑰、儲存私鑰,並進行測試。將 BEGIN PUBLIC KEY 區塊交給需要對您加密的系統,將 BEGIN PRIVATE KEY 區塊直接匯入受保護的儲存空間,然後在真正依賴之前,針對實際應用協定執行一次端對端加密測試。

匯入成功並不代表相容性。對方可能預設使用 SHA-1,或使用不同的 OAEP 標籤或遮罩產生函式,因此使用確切的應用協定進行雙向往返測試,是合約的一部分。

輸出信封的內容

此工具並未自創混合檔案格式。它只產生由 PKCS 與 PEM 標準所定義的兩個 PEM 信封,您可以使用任何標準程式庫來解析它們。

信封標頭內部結構預定散布對象
公鑰 BEGIN PUBLIC KEY ASN.1 SubjectPublicKeyInfo (SPKI) DER,以 64 欄為單位進行 Base64 換行 任何需要對持有者加密的系統
私鑰 BEGIN PRIVATE KEY ASN.1 PKCS#8(未加密) DER,以 64 欄為單位進行 Base64 換行 僅限本地受保護的金鑰存放區、HSM 或祕密管理器

兩個信封中宣告的固定演算法參數為 RSA-OAEP、SHA-256 與指數 65537。私鑰信封刻意採用未加密的 PKCS#8,因為 Web Crypto 匯出的是原始金鑰位元組,不含以密碼為基礎的信封,因此保護私鑰的責任會隨檔案一起移交。

基於瀏覽器的替代方案適用場景

API 替代方案在能減少摩擦卻不改變語義之處最為實用。此工具能乾淨地融入以下幾個常見情境。

  • 本機開發與 CI 測試固定資料。在測試執行器或開發者筆電上產生臨時金鑰對,然後將其載入原本會呼叫託管 API 的相同程式碼中。
  • 短暫存活的服務身分。為預備部署、沙箱租戶或內部工具輪替金鑰,其生命週期以天計而非以年計。
  • 跨語言互通性檢查。由於輸出遵循 RFC 7468 PEM 與 PKCS#8,同一把公鑰可傳遞給 Python 服務、Node.js 工作程序或 Java 後端,而這些系統都已能理解這些信封。
  • 受合規約束的環境。當政策禁止第三方金鑰產生端點,或私鑰絕不能接觸遠端系統時,基於瀏覽器的產生器在結構上即可滿足此限制。

對於長期存活的正式環境身分、TLS 伺服器金鑰、X.509 憑證或簽章工作流程,正確的路徑是由所屬平台、硬體安全模組或託管金鑰服務所提供的金鑰產生工作流程,並遵循 RFC 8017。此工具不會產生憑證、CSR、簽章、SSH 金鑰或 JSON Web 金鑰。

參數比對與端對端測試

RSA-OAEP 並非單一演算法,而是一族以雜湊、遮罩產生函式、標籤與編碼為參數的演算法。此處產生的金鑰宣告使用 SHA-256,但其他系統可能預設使用 SHA-1 或不同的 OAEP 標籤。匯入成功僅能證明 ASN.1 格式正確;並不能證明加密一定會成功。

在信任此金鑰之前,您應該執行一項簡短而明確的測試:在 A 端使用公鑰對已知的 UTF-8 訊息進行加密,將密文傳輸至 B 端,以私鑰解密,然後斷言還原出的明文與原始明文逐位元組相符。此工具本身的正確性檢查正是執行此流程——它鎖定八項外部參數不變式,匯出兩個信封,再將其匯回 Web Crypto,並對一則已知訊息斷言精確還原。針對實際應用協定重複此測試,可及早發現雜湊選擇不一致、標籤慣例不一致,以及互通層所引入的任何填補差異。

本地作法的限制

以下三項限制直接源自產品合約,值得在此先行點明。

  1. 模數大小為固定值。僅提供 2048 與 3072 位元。1024 位元金鑰、自訂公鑰指數、原始 RSA 與 PKCS#1 v1.5 加密皆刻意不予支援,因為採用更安全的固定選擇可減少誤用。
  2. RSA 僅能加密短小酬載。此工具並未自創混合檔案格式。正式環境通常會以 RSA-OAEP 加密一把隨機對稱金鑰,再以經認證的對稱加密保護實際資料。請勿將大型檔案分割成原始的 RSA 區塊。
  3. 產生為非同步且隨機。即使設定完全相同,每次執行仍會產生不同的金鑰對,因為安全的產生作業必須具有隨機性。工作身分可防止較舊的請求覆寫較新的設定,但您仍應避免連續點擊兩次「產生」並混用其輸出。

私鑰與公鑰輸出僅保留在元件記憶體中,直到瀏覽器導覽或被取代為止。此界線不包括瀏覽器擴充功能、惡意程式、剪貼簿管理員與螢幕擷圖,這些仍不在保證範圍之內。請使用已修補且可信的裝置,在確認接收端預期使用 RSA-OAEP 搭配 SHA-256 以及上述其中一種 PEM 信封後再進行產生,若私鑰遭到外洩,請立即輪替。

如果您正在權衡各種方案,Binary to Text Cryptii:本地 UTF-8 位元組轉換器對此有詳細說明。

如果您正在權衡各種方案,Convert to UTF-8 API 替代方案:在瀏覽器中執行對此有詳細說明。