若要在瀏覽器中建立 RSA 金鑰而無需安裝 ssh-keygen,RSA Key Generator 會使用平台的 Web Cryptography API 產生一組 2048 位元或 3072 位元的 RSA-OAEP 金鑰對(搭配 SHA-256),然後將公鑰匯出為 SubjectPublicKeyInfo (SPKI) PEM 格式,將私匯出為未加密的 PKCS#8 PEM 格式。金鑰產生作業完全在目前分頁中透過 RSA Key Generator 執行,因此不會將任何金資料傳送到遠端伺服器;即使使用相同的設定,每次新產生的金鑰對也都不相同,因為底層的隨機數產生器每次執行時都會產生兩個新的質數。固定的參數——RSA-OAEP、SHA-256、指數 65537,以及標準的 PEM 封裝——使輸出結果能直接相容於期望這些精確選擇的系統,但也因此使輸出不適合一項常見的特定用途:SSH 驗證。匯入成功並不能證明通訊協定相容性,因為 OAEP 的雜湊、標籤與遮罩產生函式在解密端都必須相符;若不同的消費者預設使用 SHA-1 或非空白的 OAEP 標籤,就會在生產流量仰賴該金時才以某種方式失敗。

RSA Key Generator 實際上會產生什麼
RSA Key Generator 是圍繞著一組周圍程式碼並未公開的固定選擇所建構:演算法為 RSA-OAEP 而非原始 RSA 或 PKCS#1 v1.5 填補,雜湊為 SHA-256 而非 SHA-1,公鑰指數則為標準的 65537。您選擇 2048 或 3072 位元的模數大小,頁面會呼叫 Web Crypto 的 generateKey,該函式會建立兩個大質數並產生對應的模數,且不採用任何決定性的種子。金鑰會以可匯出的 CryptoKey 物件形式回傳,匯出為 DER 位元組(公為 SPKI,私鑰為 PKCS#8),並依照 RFC 7468 中所定義的標準 PEM 標頭進行封裝。公封裝以 -----BEGIN PUBLIC KEY----- 開頭,私鑰封裝則以 -----BEGIN PRIVATE KEY----- 開頭,Base64 主體以 64 欄寬進行換行,以方便複製貼上時閱讀。
此頁面刻意省略了若干相關選項:它不會產生 1024 位元的金鑰、不允許自訂公指數、不會產生原始 RSA 密文、不會使用密碼對私鑰 PEM 進行加密、不會輸出 PKCS#1 v1.5 封裝,也不預設使用 SHA-1。此外,它也不會產生 OpenSSH 金鑰檔、X.509 憑證、憑證簽署請求、RSA-PSS 簽章金鑰,或是 JSON Web Keys。這些省略都是刻意的:本工具的目的是在有人需要快速的 RSA-OAEP 加密金鑰對時,排除常見的陷阱,而非成為通用的密碼學工作坊。
SSH 金鑰與 RSA-OAEP PEM 金:誠實的區別
大多數搜尋如何在 為 SSH 建立 RSA 金鑰 的人,實際上想要的是一把能在他們以 OpenSSH 登入遠端伺服器時驗證其身分的金鑰。SSH 驗證使用不同的檔案格式,傳統上是 OpenSSH 專屬的封裝,以 -----BEGIN OPENSSH PRIVATE KEY----- 開頭,由 ssh-keygen 工具或類似的用戶端產生。該封裝內嵌演算法名稱、註解欄位,以及 OpenSSH 自行剖析的二進位區塊。即使底層的 RSA 數學相似,外層的線路格式並不相同。
RSA Key Generator 輸出的是標準的 PEM 封裝(公端為 SPKI,私鑰端為 PKCS#8),搭配 RSA-OAEP 與 SHA-256。這些是通用 RSA 加密 API、直接取用 PEM 的程式碼、包裹對稱金鑰的混合加密機制,以及任何匯入 SubjectPublicKeyInfo 並解開 PrivateKeyInfo 的應用程式的正確選擇。它們並非 OpenSSH 的 authorized_keys 與 id_rsa 流程所使用的正確格式。若您的目標是將金鑰放入 ~/.ssh/authorized_keys 或在 PuTTY 中載入,本工具將無法產生正確的檔案。請改用 ssh-keygen -t rsa -b 3072,或平台專屬的輔助工具。
兩者的重疊範圍比看起來更窄。兩個工具都處理 2048 或 3072 位元的 RSA 模數大小,都預設使用指數 65537,且都仰賴強健的隨機數產生器。差異在於演算法角色(SSH 用於驗證簽章,而本工具用於 OAEP 加密)、檔案內繫結的雜湊、標籤與遮罩產生函式的預設值,以及儲存格式。請將其視為兩種不同的產出物,而非同一項成果的兩種風味。
| 屬性 | OpenSSH RSA 金鑰 (ssh-keygen) | RSA Key Generator 輸出 |
|---|---|---|
| 檔案封裝 | OpenSSH 專屬,以 BEGIN OPENSSH PRIVATE KEY 開頭 | 公鑰為 SPKI,私為 PKCS#8,標準 PEM |
| 演算法角色 | 驗證簽章 | RSA-OAEP 加密 |
| 雜湊繫結 | 較舊版本為 SHA-1,較新版本為 SHA-256 或 SHA-512 | 固定為 SHA-256 |
| 公鑰指數 | 65537 | 65537 |
| 常見大小 | 2048、3072、4096 位元 | 2048 或 3072 位元 |
| 私鑰檔案的密碼 | 可選 | 不支援,以未加密的 PKCS#8 匯出 |
| 適用於 ssh authorized_keys | 是 | 否 |
| 適用於 RSA-OAEP 加密 API | 需額外轉換 | 是 |
如何逐步建立 RSA 金鑰對
- 確認您的消費者所期望的內容。在產生任何金鑰之前,請先確認目標應用程式確實需要搭配 SHA-256、指數 65537、公鑰端為 SPKI、私鑰端為 PKCS#8 的 RSA-OAEP。若消費者是 OpenSSH,請停止並改用 ssh-keygen。若消費者是匯入 PEM 的 API 或程式庫,則可繼續。
- 選擇模數大小。若追求廣泛的互通性與較快的產生速度,請選擇 2048 位元;若需要較大的安全邊際但可接受較慢的產生與加密運算,請選擇 3072 位元。本工具沒有 1024 位元的選項、不支援自訂指數,也無法變更雜演算法。
- 在已修補且可信的裝置上開啟 RSA Key Generator 頁面。金鑰產生作業會在瀏覽器分頁中執行,因此應避免使用共用電腦、公共資訊站,以及已啟用螢幕分享或遠端管理軟體的裝置。
- 產生金鑰對。觸發產生動作並等待結果。較大的金鑰會明顯花費更多時間,因為 Web Crypto 必須搜尋兩個大質數;在產生過程中請勿關閉分頁、重新整理頁面或離開此頁。
- 將公鑰複製到消費者端。公區塊以 -----BEGIN PUBLIC KEY----- 開頭,可安全地分享給任何需要為您加密的一方。將其提交至版本控制或貼入工單中也是安全的。
- 將私鑰直接移至受保護的儲存空間。私鑰區塊以 -----BEGIN PRIVATE KEY----- 開頭,且未受密碼保護。請將其直接貼入由硬體支援的金鑰儲存庫、受控的密鑰管理服務,或具有嚴格存取控管的加密檔案中。請勿將其儲存於一般筆記、聊天記錄、瀏覽器同步或原始碼控制中。
- 關閉分頁並清除剪貼簿紀錄。一旦私已安全儲存,此頁面就不再需要這些值;若剪貼簿管理工具保留這些位元組,可能會在您關閉視窗後長時間留存。
在 2048 位元與 3072 位元模數之間抉擇
所提供的兩個大小涵蓋了瀏器端產生的實際範圍。2048 位元是事實上的互通大小:幾乎每個平台上的程式庫都能匯入,加密與解密的往返速度可接受,且其安全邊際在非長期的秘密用途上仍被視為足夠。3072 位元提供了更大的安全邊際,適用於受保護資料需維持多年敏感性的情境,但在 Web Crypto 中,金鑰產生與 RSA 運算會較慢。若您只需要為混合加密機制準備一次性的包裹金鑰,2048 是務實的預設選擇。若同一把金鑰將用於保護長效期的主密鑰,則建議選擇 3072。
之所以沒有 1024 位元的選項,是因為該大小低於目前的安全使用門檻,將削弱本工具致力於提供的保障。這兩個大小涵蓋了瀏覽器端產生的實際範圍;若選擇超出此範圍,則成本效益的考量會偏向採用伺服器端或基於硬體的產生方式。
發佈公鑰並保護私鑰
一旦金鑰對存在,實際工作便分成兩半。公鑰的 SPKI 封裝可透過任何需要為持有者加密的管道傳送:可透過電子郵件、張貼於工單、提交至儲存庫,或透過簽署的 URL 分享。它無法解密任何資料,也無法在 RSA-OAEP 下進行簽章,因此揭露所帶來的影響有限,僅止於明顯的事實——也就是他人能夠加密資料,而這些資料只有持有者的私鑰日後能解密。
PKCS#8 私鑰封裝則是危險的一半。任何取得它的人皆能解密所有以對應公鑰加密的密文,因此複製它便等同於將其保護責任完整轉移。本輸出未受密碼保護;Web Crypto 在匯出 PKCS#8 位元組時並未加上加密封裝,而此頁面刻意避免加入薄弱的密碼式包裹步驟。請將這些位元組直接移至硬體安全模組、受控的密管理服務、具有受限存取的加密檔案,或離線備份中。請勿將其儲存於原始碼控制、瀏覽器同步、一般筆記、幕擷圖或聊天記錄中。若疑似外洩,請立即輪換金鑰。
執行通訊協定層級的加密測試
本工具本身的正確性檢查是一項嚴格的往返測試:它會匯出兩個封裝,將 SPKI 公鑰與 PKCS#8 私鑰重新匯入 Web Crypto,以公鑰加密一段已知的 UTF-8 訊息,並斷言以私鑰解密後能精確還原原始位元組。這能確認產生的金鑰對在內部是一致的,且其參數與 Web Crypto 所回報的相符。但這本身並不足以確認與目標應用程式的相容性。
請在接收端執行第二項測試。使用您的應用程式所使用的相同程式庫或指令,以公鑰加密一段簡短的測試訊息,然後以匯入的私鑰解密結果。RSA-OAEP 參數在兩端必須相符,包括雜湊、標與遮罩產生函式;僅憑成功匯入 PEM 是不夠的。若消費者預設使用 SHA-1、不同的 OAEP 標,或 PKCS#1 v1.5 填補,本工具的輸出將無法互通。請儘早發現此情況,在任何生產流量仰賴該金之前。RFC 8017 中的 PKCS#1 v2.2 規格詳細記載了兩端必須相符的參數。
何時適用此工具,以及何時需要 ssh-keygen
當您需要一組具有標準 PEM 信封格式的 RSA-OAEP 加密金鑰對,並希望在不安裝 OpenSSL、ssh-keygen 或任何命令列工具的情況下在本機產生金鑰時,請使用 RSA 金鑰產生器。其適用範圍包括:包裹隨機對稱金鑰的混合式加密機制、會匯入 SPKI 與 PKCS#8 的應用層訊息加密 API、呼叫 Web Crypto 或任何標准 PEM 消費端的程式庫程式碼,以及在筆記型電腦上進行的快速通訊協定實驗。
當您需要對遠端主機進行身分驗證、將一筆項目新增至 ~/.ssh/authorized_keys,或是將金鑰載入 PuTTY 或 MobaXterm 時,請使用 ssh-keygen 或您平台的 SSH 輔助工具。如需更廣泛的指引,說明如何在 Linux 終端機中執行等效的金鑰產生流程而不使用 OpenSSL,無 OpenSSL 的 Linux 操作指南涵蓋了在 Linux 工作流程中採用相同的瀏覽器式作法。針對正式環境的身分識別、憑證授權機構,或 TLS 伺服器金鑰,請使用擁有這些憑證之平台的金鑰產生流程,最理想的情況是由硬體安全模組作為後盾。
若私密金鑰曾經遭到外洩,請立即更換。本頁面不會在元件記憶體之外保留金鑰位元組,但擴充功能、惡意軟體、剪貼簿管理程式以及螢幕擷取畫面皆位於該範圍之外,因此請將任何可能的洩漏視為全面性的損害,而非僅是驚險過關。
若您正在權衡各種選項,線上 XOR 加密:對 UTF-8 套用重複金鑰對此有詳細說明。