目錄
關於 ECDSA 註冊簽章
目錄
發布到公開 npm 登錄的套件會簽章,以便偵測套件內容是否遭到竄改。
簽署和驗證發布的套件可防止攻擊者控制登錄鏡像或代理伺服器,並嘗試攔截和竄改套件 tarball 內容。
從 PGP 遷移到 ECDSA 簽章
注意: 基於 PGP 的登錄簽章已於2023 年 4 月 25 日棄用,並由 ECDSA 登錄簽章取代。
公開 npm 登錄正從現有的 PGP 簽章遷移到 ECDSA 簽章,後者更為精簡,且可以在 npm CLI 中驗證,無需額外的依賴項。
簽章驗證以前是一個多步驟的程序,涉及 Keybase CLI,以及手動從套件元資料中擷取和解析簽章。
閱讀更多關於使用 npm CLI 遷移和驗證簽章 的資訊。
支援第三方登錄的簽章
如果遵循下列慣例,npm CLI 會支援任何登錄提供的登錄簽章和簽署金鑰
1. 簽章會在 packument
中的每個已發佈版本內,以 dist
物件提供
"dist":{..omitted..,"signatures": [{"keyid": "SHA256:{{SHA256_PUBLIC_KEY}}","sig": "a312b9c3cb4a1b693e8ebac5ee1ca9cc01f2661c14391917dcb111517f72370809..."}],
查看這個 來自公共 npm 登錄的已簽署套件範例。
若要產生簽章,請簽署套件名稱、版本和 tarball sha 完整性:${package.name}@${package.version}:${package.dist.integrity}
。
目前的最佳做法是使用 金鑰管理系統,在 硬體安全模組 (HSM) 上執行簽署作業,以避免直接處理私密金鑰部分,這可減少攻擊面。
keyid
必須符合下列其中一個公開簽署金鑰。
2. 公開簽署金鑰會以下列格式提供在 registry-host.tld/-/npm/v1/keys
{"keys": [{"expires": null,"keyid": "SHA256:{{SHA256_PUBLIC_KEY}}","keytype": "ecdsa-sha2-nistp256","scheme": "ecdsa-sha2-nistp256","key": "{{B64_PUBLIC_KEY}}"}]}
金鑰回應
expires
:null 或簡化的延伸 ISO 8601 格式:YYYY-MM-DDTHH:mm:ss.sssZ
keyid
:公開金鑰的 sha256 指紋keytype
:目前 npm CLI 僅支援ecdsa-sha2-nistp256
scheme
:目前 npm CLI 僅支援ecdsa-sha2-nistp256
key
:base64 編碼的公開金鑰
查看這個 來自公共 npm 登錄的範例金鑰回應。