線上 RSA 加密指的是直接在瀏覽器中產生一組公開金鑰與私密金鑰,讓一方能以公開金鑰加密資料,而只有持有對應私密金鑰的一方能解密。所產生的非對稱金鑰對由兩個大質數組成,組合成一個長度為 2048 或 3072 位元的模數,並搭配一個固定為 65537 的公開指數,最終產生的金鑰會匯出為標準的 PEM 封套——公開金鑰採用 SubjectPublicKeyInfo (SPKI) 格式,私密金鑰則採用 PKCS#8 格式——兩者皆依據 RFC 7468 進行編碼。使用基於瀏覽器的 RSA 金鑰產生器時,所有的數學運算與 PEM 編碼都透過平台內建的 Web 加密 API (Web Cryptography) 在分頁中本機完成,因此絕不會有任何金鑰位元被傳送到遠端服務。輸出結果可直接餵入任何期望使用 SHA-256 搭配 RSA-OAEP 加密的應用程式、服務或程式庫。

大多數搜尋「RSA encryption online」的讀者,都希望取得一組能直接貼到其他系統中使用的金鑰對——例如正在串接 API 的開發人員、向合作夥伴分發金鑰的安全工程師,或是想驗證非對稱加密流程的學習者。本文接下來的內容會逐步說明瀏覽器實際產生了什麼、如何在 2048 與 3072 位元之間抉擇、如何執行產生步驟,以及在實際依賴該金鑰之前,如何驗證其結果。

rsa encryption online
RSA Encryption Online: Generate an RSA Key Pair

瀏覽器中的 RSA 金鑰對是如何產生的

產生器會呼叫 Web Crypto API 的 generateKey 方法,使用 RSA-OAEP 演算法、雜湊函式 SHA-256、由你自選的模數長度(2048 或 3072),以及公開指數 65537。Web Crypto 接著會在內部產生兩個隨機的大質數,衍生出模數並運算相關的私密指數,然後回傳一個可匯出的金鑰對物件。除非你自行複製,否則這些質數與產生的私密位元組永遠不會離開瀏覽器分頁;同時,由於此操作是非同步的,因此緩慢的 3072 位元產生作業不會被後續以較小設定點擊的動作所覆蓋。

由於 RSA 的安全性取決於質數的不可預測性,平台每產生一個質數時都會取用其密碼學安全隨機來源。這就是為什麼即使設定完全相同,每次點擊「Generate」的輸出結果都不一樣——若私密金鑰的值是固定的,就代表該金鑰不再具備私密性。如果你重新產生時發現輸出與先前某次結果完全相同,請將其視為嚴重錯誤並立即停止使用此工具。

金鑰產生完成後,產生器會將公開金鑰匯出為 SubjectPublicKeyInfo 格式的 DER 位元組,將私密金鑰匯出為 PKCS#8 格式的 DER 位元組,接著依照 RFC 7468 中的規範,將兩者各自包裝成每行 64 個字元的 Base64 編碼,並加上標準的 BEGIN PUBLIC KEY 與 BEGIN PRIVATE KEY 標頭。你會得到兩段可直接貼入任何接受 PEM 格式之處的文字區塊。

在 2048 位元與 3072 位元模數之間抉擇

RSA 的安全性會隨著模數長度提升,但運算成本也同樣增加。產生器刻意僅提供兩個值——2048 與 3072——因為它們幾乎涵蓋所有實際的加密使用情境,而又能避免意外部署 1024 位元的版本。下表整理了在產生當下的實際權衡。

面向2048 位元模數3072 位元模數
模數長度2048 位元 (256 位元組)3072 位元 (384 位元組)
產生時間較快明顯較慢——瀏覽器必須找出兩個較大的質數
加密與解密成本每次操作的 CPU 負載較低每次操作的 CPU 負載較高
互通性所有現代 RSA-OAEP 架構皆廣泛支援現代架構支援;部分舊系統可能拒絕接受
相對安全餘裕標準較大
最佳選擇時機需要最大相容性,或需要大量產生金鑰時資料必須維持機密更長時間,且你能負擔較慢的產生流程時

對大多數「RSA encryption online」工作流程而言——例如加密小量資料、封裝對稱金鑰,或串接應用程式整合——2048 位元是正確的預設選擇。只有在確認接收端系統能接受 3072 位元,且你明確需要更大的安全餘裕時,才選擇 3072 位元。

為線上加密產生一組 RSA 金鑰對

在點擊任何按鈕之前,請先確認你打算入金鑰的應用程式或程式庫確實預期使用 SHA-256 搭配 RSA-OAEP,並接受 SPKI 公開金鑰或 PKCS#8 私密金鑰的 PEM 格式。此處的不一致是其他方面都正確的金鑰,在下游匯入失敗的最常見原因。一旦確認無誤,實際產生步驟本身並不複雜。

  1. 在已修補且你信任的裝置上的瀏覽器中開啟 RSA 金鑰產生器。
  2. 選擇 2048 位元以獲得最大相容性,或在確認接收端支援,並明確需要更強的模數時選擇 3072 位元。
  3. 點擊 Generate 並等待操作完成;3072 位元的產生時間會明顯較長,因為瀏覽器必須找出兩個較大的質數。
  4. 複製公開金鑰 PEM 區塊(以 BEGIN PUBLIC KEY 開頭),並且僅傳送給會為你加密資料的系統。
  5. 將私密金鑰 PEM 區塊(以 BEGIN PRIVATE KEY 開頭)直接複製到受保護的金鑰儲存區或密碼管理工具中——請勿將其貼到聊天室、版本控制系統、螢幕截圖或筆記中。
  6. 私密金鑰 PEM 安全儲存後,關閉分頁並清除剪貼簿紀錄。
  7. 使用一筆已知的明文與接收端系統進行端對端加密測試,確認解密後的結果逐位元組相符。

PEM 輸出:公開金鑰採 SPKI,私密金鑰採 PKCS#8

之所以涉及兩種 PEM 封套,是因為它們服務的對象不同。公開金鑰會被包裝為 SubjectPublicKeyInfo,其中將 RSA-OAEP 的演算法識別符、模數與指數嵌入單一 ASN.1 結構中。任何了解 RSA-OAEP 的使用者都能在沒有額外提示的情況下直接解析。私密金鑰則會被包裝為 PKCS#8,其中嵌入相同的演算法識別符,以及解密所需的私密指數與相關參數。

兩種封套都會將演算法參數宣告為 SHA-256 搭配 RSA-OAEP,因此謹慎的使用者可以直接從 PEM 中讀出演算法。此宣告並非裝飾性質:若另一端的系統預設使用 PKCS#1 v1.5 填補或 SHA-1,它仍可能接受這些金鑰進行匯入,但在實際加密呼叫時會失敗。匯入成功並不代表相容性已驗證通過——你需要執行下方所述的來回測試(round-trip test)來加以確認。

分發公開金鑰並妥善保護私密金鑰

公開金鑰的設計目的就是要被分享。任何持有公開金鑰的人,都能加密只有你的私密金鑰能解密的資料,但若沒有私密金鑰,他們就無法從過去或未來的密文中還原任何內容。將公開金鑰想像成一把鎖——任何人都能把訊息放進這個箱子,但只有你擁有開箱的鑰匙。

私密金鑰的情況則恰好相反。任何取得私密金鑰的人,在你更換金鑰之前,都能解密所有傳送給它的密文,無論是過去或未來的。產生器會將其匯出為未加密的 PKCS#8 格式——瀏覽器並不會額外套用密碼保護層。這是刻意的設計:Web Crypto 將原始位元組交由你自行處理,保護措施則落實於儲存層。請立即將其移入由硬體支援的金鑰儲存區、雲端密碼管理工具,或具有嚴格存取控制與備份機制的本機加密儲存區。請勿將其提交至版本控制、貼到工單或聊天室,或留在瀏覽器同步紀錄中。

若私密金鑰曾經遭到洩漏——即使是短暫的——請立即更換:產生新的金鑰對,分發新的公開金鑰,並停止接受以舊公開金鑰加密的密文。

在實際信任金鑰之前進行端對端加密測試

「我的 RSA 金鑰無法使用」這類抱怨的最大單一來源,是 PEM 雖然匯入成功,但其中一端的演算法參數錯誤。產生器本身透過以下方式驗證正確性:使用公開金鑰加密一筆已知的 UTF-8 訊息,並以私密金鑰確認能完整還原,接著將兩個 PEM 重新匯入 Web Crypto,確認匯入後回報的演算法模數長度符合預期。你應對接收端系統執行同樣的測試。

在接收端使用公開金鑰加密一筆小型的固定明文(例如字串 RSA encryption online round trip),將密文送回後以私密金鑰解密。若還原的位元組完全相符,並能解碼回原本的 UTF-8 字串,則代表雙方對 RSA-OAEP、SHA-256、標籤 (label) 與遮罩產生方式達成共識。若有任何差異,請在將該金鑰用於實際生產流量之前先修正參數。

RSA 線上加密無法做到的事

RSA 只能加密相對於模數而言較小的訊息。RSA-OAEP 的最大明文大小為模數長度(以位元組為單位)減去兩倍雜湊輸出長度再減二,此定義載於 RFC 8017。對 2048 位元搭配 SHA-256 來說,代入計算為 256 − (2 × 32) − 2 = 190 位元組;對 3072 位元搭配 SHA-256 則為 384 − (2 × 32) − 2 = 318 位元組。因此真正的系統會先用 RSA-OAEP 加密一把小的隨機對稱金鑰,再用經過認證的對稱加密來保護實際資料,這種模式你可以搭配此產生器,使用 AES 線上加密 頁面來實作。請勿將大型檔案分割成原始的 RSA 區塊;本工具刻意不自行發明混合檔案格式,而手寫的分割器正是填充預言攻擊(padding-oracle attack)開始發生的地方。

此產生器也不是憑證授權單位(CA)。它只產生 RSA-OAEP 加密金鑰 — 不包含 X.509 憑證、CSR、簽章(RSA-PSS)、SSH 金鑰,也沒有 JSON Web Keys。如果你需要身分識別或 TLS,請改用所屬平台提供的金鑰產生流程,或使用硬體安全模組(HSM)。

下表整理了本工具所提供與未提供的能力,讓你在實際依賴某把金鑰處理真實流量之前,能先確認其限制。

能力本工具是否提供
RSA-OAEP 加密金鑰對產生是
2048 位元與 3072 位元模數是
僅使用公開指數 65537設計上固定
SHA-256 雜湊,RSA-OAEP 填充設計上固定
SPKI PEM 公開金鑰、PKCS#8 PEM 私密金鑰是
產生時的往返加解密驗證是
1024 位元模數或自訂公開指數否
RSA-PKCS#1 v1.5 填充或原始 RSA否
以密碼加密的私密金鑰封套否 — 請將位元組移至你自己的金鑰儲存庫
RSA-PSS 簽章、X.509、CSR、SSH 金鑰、JWK否
大型檔案分割器或混合檔案容器否 — 加密的是金鑰,而非檔案本身

實作上採用固定的安全預設值,其理由相同:不提供 1024 位元金鑰、不提供自訂公開指數、不提供原始 RSA、不提供 PKCS#1 v1.5 加密,也不使用 SHA-1。限制這些選項可以降低產生出「現在能用、明天卻外洩」的金鑰的機率,同時也讓驗證測試保持簡明。

如果你正在權衡各種選項,Android 瀏覽器上的 AES 線上加密:逐步操作指南 有詳細說明。