Bitbucket 的 RSA 金鑰是一組非對稱金鑰對——一個用於分發的公開 SubjectPublicKeyInfo PEM 區塊,以及一個用於解密的私密 PKCS#8 PEM 區塊——在本機以 RSA-OAEP 演算法產生,模數長度為 2048 或 3072 位元,搭配 SHA-256 雜湊與 65537 公指數。RSA 金鑰產生器會在您的瀏覽器中透過平台的 Web Cryptography 實作建立這兩個區塊,因此任何私密位元組都不會傳送到遠端伺服器;即使所有設定完全相同,連續兩次產生作業永遠會回傳不同的金鑰。由於底層演算法會要求瀏覽器找出兩個大型隨機質數,再與固定的公指數 65537 結合,隨機性是正確運作的內建特性,而非可選功能。公開 PEM 以 -----BEGIN PUBLIC KEY----- 開頭,可以交給任何需要為持有者加密資料的系統。私密 PEM 以 -----BEGIN PRIVATE KEY----- 開頭,取得該區塊的任何人都能解密相符的密文,因此其處理方式決定了整個工作流程的安全性。

RSA 金鑰產生器會產生什麼
此頁面僅提供單一、固定的組態:模數為 2048 或 3072 位元、SHA-256 雜湊,以及標準公指數 65537。沒有選項可以選擇 1024 位元金鑰、自訂指數、原始 RSA 或 PKCS#1 v1.5 填補,因為此工具刻意將自身限制在能與現代軟體乾淨互通、並避開已知誤用模式的參數組合。產生作業為非同步,並透過任務識別防止較舊的進行中請求覆蓋較新的設定。
產生後,公開金鑰會匯出為 ASN.1 SubjectPublicKeyInfo (SPKI) DER 位元組,然後以 64 行為單位進行 Base64 編碼,並加上標準 PEM 標頭。私密金鑰會匯出為未加密的 PKCS#8 DER 位元組,並加上對應的標頭。產生位元組的底層瀏覽器介面遵循 W3C WebCrypto API。將這些區塊匯回另一個 Web Crypto 環境,或匯入支援相同封裝格式的函式庫時,必須回報您所選的相同模數長度——這個來回匯入的過程是此頁面正確性檢查的基礎,因為安全的金鑰產生作業不能依賴固定的黃金值來確認行為。
為何 RSA-OAEP PEM 適合 Bitbucket 工作流程
Bitbucket 最常與 Git 操作的 SSH 金鑰連結在一起,但有幾個相鄰的 Bitbucket 相關任務會以標準 PEM 格式,而非 ssh-keygen 產生的 OpenSSH 行格式來使用 RSA 金鑰。為建置代理加密承載的自訂整合、使用儲存的私密金鑰解密密文的 Webhook 接收端,以及啟動時需要解密認證資訊的自架 Runner,都是 2048 或 3072 位元 RSA-OAEP PEM 配對是正確產出的情境。此工具的輸出同時也是下游格式轉換的乾淨輸入:PKCS#8 PEM 私密金鑰可以透過標準轉換步驟轉換為 OpenSSH 格式的私密金鑰,以滿足特定 Bitbucket 工作流程確實需要 SSH 認證的需求,雖然該步驟不在此頁面範圍內。
對於主要需求就是直接取得 Bitbucket SSH 金鑰的讀者,PEM 與 OpenSSH 比較指南更詳細地介紹了轉換路徑。對於此工具實際針對的純加密用途,RSA-OAEP PEM 配對開箱即用即為正確格式,分發前無需進一步轉換。
逐步產生 RSA 金鑰對
請依照下列步驟為 Bitbucket 相關任務產生一組可用的 RSA-OAEP PEM 金鑰對。此程序假設您已確認接收端系統預期使用 RSA-OAEP 搭配 SHA-256,並接受 SPKI 公開與 PKCS#8 私密 PEM 封裝格式。
- 在您所控制的裝置上,使用已更新修補的可信任瀏覽器開啟 RSA 金鑰產生器頁面,並將擴充功能限制在您信任的範圍內,因為剪貼簿管理員、瀏覽器擴充功能和主機惡意軟體都不在頁面的「不上傳」保證範圍內。
- 選擇模數大小:2048 位元提供廣泛互通性並加快產生速度;3072 位元則在應用程式明確要求較大安全邊際且能容忍較慢的金鑰建立時選用。
- 點擊產生控制項,並等待頁面完成金鑰對的建立。3072 位元的產生時間明顯比 2048 位元長,因為瀏覽器必須尋找更大的隨機質數,請勿中斷此操作。
- 將公開 PEM 區塊複製到需要為您加密的系統、服務或 Webhook 端點。公開金鑰可以安全分發,並可透過任何通道傳送。
- 複製私密 PEM 區塊,並直接匯入您受保護的金鑰儲存庫、密碼管理員或加密保險庫。請勿將其貼到聊天視窗、工單、原始碼控制、分析工具或一般筆記中,因為匯出的 PKCS#8 未受密碼保護。
- 在私密金鑰移至受保護儲存位置後,清除剪貼簿歷史紀錄並關閉產生器分頁。頁面中已不再需要私密金鑰位元組,留在剪貼簿中會有意外外洩的風險。
- 使用接收應用程式所採用的確切通訊協定執行端對端加密測試:以公開金鑰透過應用程式加密一筆已知的 UTF-8 訊息,傳輸密文,並確認私密金鑰能完整還原原始位元組。僅成功匯入 PEM 並不足夠,因為另一端的 RSA-OAEP 參數若不相符將會以無訊息方式失敗。
將產生的金鑰連接到 Bitbucket
所產生的 PEM 配對如何使用,取決於涉及哪個 Bitbucket 相關介面。對於使用公開金鑰加密承載的 Webhook 接收端或建置代理,請將 BEGIN PUBLIC KEY 區塊原樣貼入組態欄位,並將 BEGIN PRIVATE KEY 區塊匯入解密服務的金鑰儲存庫。對於使用獨立簽署金鑰簽署權杖、但透過 RSA 加密驗證身分的 API 整合,公開 PEM 會送到驗證端,而私密 PEM 則保留在簽發主機上。
如果實際目標是透過 SSH 推送與拉取 Git 儲存庫,則仍需要 OpenSSH 格式的金鑰。最乾淨的做法是取得此工具產生的 PKCS#8 PEM 私密區塊,儲存為本機檔案,然後執行標準的 OpenSSH 轉換指令以產生 OpenSSH 私密金鑰及對應的 .pub 行。轉換後的金鑰即可依一般流程上傳至 Bitbucket 的 SSH 金鑰設定。此頁面本身並不執行此轉換——它僅止於 PEM 封裝格式,因為那些是底層 Web Crypto 實作能產生並驗證的格式。
對於需要為內部服務取得金鑰的自架 Bitbucket Data Center 實例,請依照相同的匯入程序,但以對待任何正式環境認證資訊的相同控管方式處理私密金鑰:靜態加密、限制僅服務帳號存取,並稽核存取行為。一旦金鑰就位,Atlassian 文件中關於查看與更新 Bitbucket Server SSH 私密金鑰的說明會介紹此工作流程的伺服器端部分。
在 2048 與 3072 位元之間選擇
兩種支援的大小使用相同的 SHA-256 雜湊與相同的公指數 65537,因此選擇純粹是在模數長度、產生時間與該長度所代表的 安全邊際之間取捨。下表摘要列出實際差異;您裝置上的確切數字取決於硬體與瀏覽器,因此當您需要知道精確時,請在您自己的機器上實際執行一次工具,而非進行估算。
| 屬性 | 2048 位元 RSA-OAEP | 3072 位元 RSA-OAEP |
|---|---|---|
| 模數長度 | 2048 位元 | 3072 位元 |
| 瀏覽器內產生時間 | 明顯比較大的模數快 | 耗時較長,因為瀏覽器必須搜尋更大的隨機質數 |
| 每次 RSA 呼叫的操作成本 | 較低的 CPU 與記憶體負擔 | 較高的 CPU 與記憶體成本 |
| 互通性 | 廣泛互通 | 目前函式庫支援,但部分舊式堆疊仍預設僅支援 2048 |
| 建議使用時機 | 接收系統的文件未指定較大的模數 | 應用程式明確要求 3072 位元,或您希望取得額外的安全邊際 |
如果您不確定 Bitbucket 相關接收端預期哪種大小,請先產生 2048 位元配對,因為這是最廣泛互通的選擇。3072 位元配對只有在接收系統已明確設定接受時才是正確答案;否則較大的模數可能會因不符預期而被拒絕。
私密 PEM 的安全處理
匯出的 PKCS#8 私密金鑰未經密碼加密。取得該 PEM 區塊的任何人都能解密由相符公開金鑰產生的每個密文,因此該檔案必須在同一裝置的工作階段中移至受保護的儲存位置,絕不能複製到較不受信任的介面。受保護的金鑰儲存庫、加密的密碼管理員或由 HSM 支援的保險庫都是合適的去處。一般筆記應用程式、聊天記錄、工單系統、分析儀表板、瀏覽器同步與原始碼控制則不適合,因為這些介面經常會被收集與索引。
將私密 PEM 的任何外洩視同金鑰遭破解:重複產生程序以輪換金鑰,將新的公開 PEM 分發給每個為您加密的系統,並撤銷或銷毀舊的私密區塊。此工具不提供內建撤銷清單,因此輪換步驟是與舊公開金鑰使用者協調進行的手動程序。
完成匯入後,請關閉產生器分頁並清除剪貼簿歷史紀錄。正確 RSA 金鑰產生的隨機設計特性代表兩次產生作業絕不會產生相同的私密金鑰,這正是每次輪換都需要從頭重新執行頁面的原因,也正是輪換後僅在舊公開金鑰一併退役時才能安全地保留舊區塊。最後,請勿將這些金鑰用於本工具不支援的用途:此頁面明確不會產生 X.509 憑證、憑證簽署請求、RSA-PSS 數位簽章、SSH 行格式金鑰或 JSON Web Key,任何後續轉換都必須保留 PEM 中所宣告的 RSA-OAEP 與 SHA-256 參數,同時將私密金鑰位元組保留在相同的受保護邊界內。
如果您正在權衡選項,在不使用 OpenSSL 的情況下為 GitHub 產生 RSA 金鑰對此有詳細說明。