SPDX 與 CycloneDX:如何選擇 SBOM 格式
Sytance · 更新於
SPDX 與 CycloneDX 都能描述軟件組件及其關係。選擇哪一種,取決於接收方需要的信息,以及其工具支持的格式版本。因此,約定交付格式時,需要寫明格式名稱、版本、編碼方式和必需字段。
接收方需要的信息
固件供應商向製造商交付 SBOM,與產品團隊將清單導入漏洞管理服務,可能面對不同的接收要求。接收方支持的格式版本和編碼方式決定了哪些文件能夠被處理,可以用一份有代表性的文件確認。
列出產品標識、組件標識、依賴關係、許可證,以及本次需要的漏洞或來源信息。如果接收方只支持格式的一部分,應判斷丟失字段是否影響這次交換的用途。
規範版本與工具支持
SPDX 2.3 和 SPDX 3.0.1 是分別發佈的規範。SPDX 3.0.1 將模型按領域劃分,其中定義了軟件 SBOM 類。接收工具支持 SPDX 2.3 JSON,並不表示它能夠讀取 3.x 文檔。
CycloneDX 官方規範總覽列出的版本是 1.7,其對象模型包含組件、服務、依賴關係和漏洞信息。生成工具可能支持新版規範,而下游導入工具仍只支持較早版本。
| 交換事項 | SPDX 示例 | CycloneDX 示例 |
|---|---|---|
| 版本 | 2.3 或 3.0.1 | 1.7 |
| 文檔標識 | 按具體版本定義 | 序列號與清單修訂版本 |
| 依賴關係 | 帶類型的關係 | 依賴圖 |
| 驗證基線 | 所選版本的規則 | 所選版本的格式定義 |
依賴關係與許可證字段
SPDX 2.3 中,CONTAINS 表示包含關係,DEPENDS_ON 表示依賴關係。一個軟件包位於壓縮包中,與另一個軟件包構建或運行時需要它,是不同關係。導入時應保留關係類型和方向。
SPDX 2.3 還區分聲明的許可證與分析確認的許可證。供應商的聲明和分析人員的結論,轉換時不應將兩者合併。如果這個區別影響評審,接收工具就需要保留它。
使用 CycloneDX 時,檢查所選版本中的依賴圖與組件引用。轉換後平鋪清單仍然可讀,但可能已經丟失了判斷哪個產品使用某組件所需的依賴路徑。
轉換結果檢查
一份小型測試文件就能幫助發現轉換時丟失的信息。可以包含產品、直接依賴和間接依賴,再加入同一組件的兩個版本、一個許可證表達式和一個明確標為未知的字段。這樣能檢查工具是否正確保留了信息含義。
- 按照聲明的規範版本校驗原始文件。
- 導入接收工具,檢查識別出的目標產品。
- 比較組件標識、版本和關係方向。
- 檢查許可證字段與未知信息的表達方式。
- 若支持再導出,比較信息含義,而非文本排版。
交付格式的選擇
客户要求 SPDX 2.3 時,應按該版本和約定字段交付。如果轉換會丟失其他數據,同時保留信息更完整的源記錄。如果既有流程已經接收 CycloneDX,並能保留所需依賴圖,則使用雙方支持的 CycloneDX 版本。
客户需要兩種格式時,需要維護並驗證格式之間的字段映射,説明轉換時丟失或轉入擴展字段的信息。格式轉換需要按照目標規範重新組織數據。
導入後,還需要檢查接收方能否按預期使用這些信息。例如,進行漏洞分析時,是否能從一個組件找到使用它的產品和版本。