Skip to content

Commit 2fec3cd

Browse files
authored
Merge pull request #33 from shiftleftcyber/2026-03-06-blogposts
Add Recent Blog Posts
2 parents d20b341 + f556c6e commit 2fec3cd

8 files changed

Lines changed: 280 additions & 0 deletions
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
+++
2+
author = "Jason Smith"
3+
title = "Implementing Data-Aware Signing"
4+
date = "2026-02-02"
5+
linkedin = "https://www.linkedin.com/posts/j28smith_sbom-openssf-supplychainsecurity-activity-7424218592931405825-MBC5"
6+
image = "img/thirdparty/2026-02-02-data-aware-sbom-signing.png"
7+
+++
8+
9+
I recently argued that with SBOMs we need to stop signing the "container" (the file) and start signing the "content"
10+
(the data). But how do we actually implement this without making verification a nightmare?
11+
12+
The answer lies in moving away from simple bit-for-bit hashing and toward Data-Aware Integrity. Here is the technical
13+
breakdown of how we build a resilient chain of trust.
14+
15+
## 1. The Foundation: JCS
16+
17+
To sign data-aware JSON, you must first transform it into an "invariant format".
18+
[RFC 8785: JSON Canonicalization Scheme (JCS)](https://www.rfc-editor.org/rfc/rfc8785) is the industry standard for
19+
this. It ensures that no matter how a tool handles the file, the cryptographic input remains identical. The first
20+
sentence of the RFC 8785 abstract says it all:
21+
22+
> Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the
23+
> operations are reliably repeatable.
24+
25+
The JCS process involves:
26+
27+
- **Deterministic Property Sorting:** Keys are sorted lexicographically (alphabetical or dictionary order).
28+
- **Whitespace Removal:** All unnecessary spaces, tabs, and newlines are stripped.
29+
- **Numeric Normalization:** Numbers are formatted consistently (1.0 vs 1).
30+
- **Encoding:** The result MUST be encoded in UTF-8.
31+
32+
By running JCS before you hash, a minified SBOM and a pretty-printed SBOM result in the exact same signature.
33+
34+
## 2. Digital Signatures and the Role of JSF
35+
36+
CycloneDX natively supports **JSON Signature Format (JSF)** for document integrity, whereas the SPDX specification does
37+
not explicitly define a standard for handling signatures. While SPDX typically relies on external, detached signature
38+
files, CycloneDX allows for an **embedded signature** directly within the JSON structure.
39+
40+
A critical, albeit specialized, feature of JSF is **Property Exclusion**. This allows producers to cryptographically
41+
lock the core components of an SBOM while leaving specific fields (such as vulnerabilities and VEX information)
42+
unsigned. This enables security teams to enrich the SBOM with updated vulnerability context later in the lifecycle
43+
without invalidating the original build-time signature.
44+
45+
How it works technically:
46+
47+
1. The producer defines a list of fields to be excluded from the signature.
48+
2. During signing/verification, the tool removes these fields from the SBOM data.
49+
3. The remaining data to be signed/verified is then passed through the JCS process to create the canonical hash.
50+
4. The canonical hash is used to generate or verify the SBOM signature.
51+
52+
This ensures that the "facts" provided by the build system are cryptographically locked, even if the "context" around
53+
them is enriched later in the lifecycle.
54+
55+
## 3. The "Embedded" Challenge
56+
57+
Because CycloneDX signatures can live inside the SBOM document itself, you have a recursive problem: you cannot sign or
58+
verify a file directly that contains the signature itself. At a basic level, property exclusion is a functional
59+
necessity and is implied for any embedded signature as the signature property itself must be excluded from the signing
60+
and verification process to avoid a circular dependency during hashing.
61+
62+
This is why Data-Aware tools are a requirement as simple binary verifiers are structurally blind to the data model.
63+
64+
---
65+
66+
## Building the Standard
67+
68+
I am currently leading an initiative within the [OpenSSF](https://openssf.org/) SBOM Everywhere SIG to codify these
69+
foundations into an SBOM Signing/Verification Best Practices Guide. We are moving past theory and into implementation.
70+
We are building the reference implementations with "known-good" test vectors so the industry doesn't have to guess and
71+
to ensure your tools are truly spec-compliant.
72+
73+
Want to see where we are? We currently have reference implementations completed in Go, Python, and Java, with
74+
JavaScript and Rust coming soon (and other languages upon request).
75+
76+
💬👇 Comment "SBOM Signing Best Practices" below if you want a link to the current Work-in-Progress and the reference
77+
code. Happy to get your feedback and input on this work while we are actively working on it.
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
+++
2+
author = "Jason Smith"
3+
title = "🚨 Call for Feedback: A Standardized Approach to SBOM Signing"
4+
date = "2026-02-09"
5+
linkedin = "https://www.linkedin.com/posts/j28smith_openssf-sbom-supplychainsecurity-activity-7426752007064985600-5cMX"
6+
image = "img/thirdparty/2026-02-09-sbom-signing-best-practices.png"
7+
+++
8+
9+
> The new benchmark by which all SBOM signing and verification tools will be judged.
10+
11+
This Friday February 13th @ 11:00 EST I'll be presenting the initial draft of the SBOM Signing & Verification Best
12+
Practices Guide at the [OpenSSF](https://openssf.org/) SBOM Everywhere SIG meeting. This initial draft focuses on the
13+
methods used to compute the hash of an SBOM for signing and verification.
14+
15+
The goal? To move the industry away from fragile "binary blob" signatures and toward data-aware integrity so we have a
16+
standardized system that truly scales across different platforms and vendor implementations. It is also a necessity to
17+
properly support the CycloneDX specification to have full interoperability.
18+
19+
I've been heads-down on the reference implementations, and I'm excited to share that the JSON foundation is now largely
20+
complete. We have working code in Go, Java, JavaScript, Python, and Rust that proves we can maintain SBOM trust
21+
regardless of formatting.
22+
23+
## ✅ The "Pretty-Print" vs "Minify" Tests Pass
24+
25+
In our test suite, we took original SBOMs (both CycloneDX and SPDX), ran them through various "pretty-print" and
26+
"minify" cycles, and proved that the computed hash remains identical every time. No more broken signatures because of
27+
a 2-space indent change or an added/removed newline.
28+
29+
### 🧐 What's in the WIP?
30+
31+
**JCS Integration:** Full support for RFC 8785 *"permits data to be exchanged in its original form on the 'wire' while
32+
cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints
33+
generate consistent results"*.
34+
35+
**Format Agnostic:** Support for CycloneDX and SPDX JSON structures, including embedded signatures and property exclusion
36+
in JSF for CycloneDX.
37+
38+
**Language Diversity:** Reference implementations across 5 major ecosystems (Go, Java, JavaScript, Python, Rust).
39+
40+
**The XML Frontier:** I'll be sharing my early findings on why W3C Exclusive C14N canonicalization isn't enough for
41+
XML-based SBOMs and some thoughts on how to approach XML normalization. However, the core focus for Friday will be on
42+
the JSON method.
43+
44+
## 🫵 Join the Discussion
45+
46+
I want your eyes on this. Whether you are a tool-builder, a security engineer, or a compliance officer, your feedback
47+
is critical to ensuring this standard is adopted and works in the real world.
48+
49+
I want to hear from the supporters and the critics alike. If you love the approach, help us refine it. If you hate it,
50+
come tell me why. The only way we build a truly resilient standard is by stress-testing it against every perspective
51+
before it's finalized.
52+
53+
### 📅 OpenSSF Calendar
54+
55+
[https://calendar.google.com/calendar/u/0/embed?src=s63voefhp5i9pfltb5q67ngpes@group.calendar.google.com](https://calendar.google.com/calendar/u/0/embed?src=s63voefhp5i9pfltb5q67ngpes@group.calendar.google.com)
56+
57+
### 🕚 Meeting Time
58+
59+
Friday February 13th @ 11:00 EST
60+
61+
### 🔗 Zoom Link
62+
63+
[https://calendar.google.com/calendar/u/0/embed?src=s63voefhp5i9pfltb5q67ngpes@group.calendar.google.com](https://calendar.google.com/calendar/u/0/embed?src=s63voefhp5i9pfltb5q67ngpes@group.calendar.google.com)
64+
65+
### 🔗 GitHub WIP
66+
67+
[https://github.com/shiftleftcyber/sbom-signing-best-practices/tree/initial-setup](https://github.com/shiftleftcyber/sbom-signing-best-practices/tree/initial-setup)
68+
69+
If you are unable to make it and want to discuss directly just let me know. Take a look through the GitHub repo,
70+
gather your thoughts and feedback, and then connect with me to book a time to discuss further.
71+
72+
Let's stop signing the formatting and start signing the facts. Hope to see you Friday!
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
+++
2+
author = "Jason Smith"
3+
title = "The SBOM Signature 'Storage Tax': Money Talks 💰📉"
4+
date = "2026-02-23"
5+
linkedin = "https://www.linkedin.com/posts/j28smith_finops-eu-cra-activity-7431724688411754496-7VnP"
6+
image = "img/thirdparty/2026-02-23-sbom-signature-storage-tax.png"
7+
+++
8+
9+
Over the last few weeks, I've been deep in the weeds of technical best practices for signing SBOMs. I've discussed
10+
JSF, JCS, property exclusion, and how we move toward data-aware integrity for better interoperability. 🔍
11+
12+
But beyond the technical elegance of a resilient signature, there is a much simpler driver for this work: The Bottom
13+
Line. 💳
14+
15+
Currently, most organizations sign SBOMs as binary blobs. This means you are signing the file (the container), not the
16+
data (the content). If you change a single space or minify the file for storage, the signature breaks. ❌
17+
18+
This comes with a massive economic cost. 💸
19+
20+
With regulations like the EU Cyber Resilience Act (CRA) mandating that manufacturers store SBOMs for 10+ years,
21+
storage is no longer a round-off error in your cloud budget. ☁️💵
22+
23+
The realities of the SBOM binary blob signature storage tax... 👀
24+
25+
## 💾 Storage Inefficiency
26+
27+
Binary blob signatures prevent you from minifying your data. You are forced to store every space and newline to keep
28+
the signature valid.
29+
30+
## 📈 The 40% Premium
31+
32+
My initial estimates show that signing "pretty-printed" SBOMs results in ~ 40% higher storage costs (or more) compared
33+
to data-aware signing.
34+
35+
## ⏳ 10-Year Compounding
36+
37+
Across thousands of builds and a decade of mandatory retention, that "formatting debt" turns into a significant
38+
long-term financial liability.
39+
40+
Technical specifications help with interoperability, but money talks. Data-aware signing isn't just about better
41+
security, it's about avoiding a decade-long storage tax. 🏦
42+
43+
I brought up this point during my last presentation at the [OpenSSF](https://openssf.org/) SBOM Everywhere SIG meeting
44+
and the shift in the room was noticeable. It's a powerful reminder that while technical specs drive interoperability,
45+
economic impact drives adoption. 🚀
46+
47+
\#FinOps \#EU \#CRA \#SBOM \#SupplyChainSecurity \#CloudCosts \#OpenSSF \#DevSecOps \#CyberResilienceAct
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
+++
2+
author = "Jason Smith"
3+
title = "The SBOM Storage Tax: Optimization at Scale"
4+
date = "2026-03-02"
5+
linkedin = "https://www.linkedin.com/posts/j28smith_sbom-supplychainsecurity-finops-activity-7434359722511601665-DPTT"
6+
image = "img/thirdparty/2026-03-02-sbom-storage-tax.png"
7+
+++
8+
9+
Following my last post on the "Storage Tax" of binary blob signing, I received some insightful feedback from the
10+
community. The common critique was:
11+
12+
> JSON minification doesn't really matter if you compress the JSON.
13+
14+
It's a valid point. Technically, compression will save far more than minification. But does the choice to sign the
15+
"data" (allowing minification) still matter if we are just going to run it through Zstandard (zstd) anyway?
16+
17+
To find out, I ran a series of tests on the sample set of CycloneDX and SPDX SBOMs from my
18+
[sbom-signing-best-practices](https://github.com/shiftleftcyber/sbom-signing-best-practices) GitHub repo. I compared
19+
the storage footprints of pretty-printed files, minified files, and their compressed counterparts.
20+
21+
The data confirms the initial intuition, but only if you look at the surface-level percentages. Under the hood, there
22+
is a "hidden" efficiency gain that still justifies a data-aware signing strategy.
23+
24+
## The Technical Reality Check
25+
26+
Based on my analysis of the test data, here is the breakdown of average storage savings:
27+
28+
- **Minification:** Reduced file size by ~32%.
29+
- **Zstd Compression:** Reduced file size by ~79%.
30+
- **The "Combo" (Minify + Zstd):** Reduced file size by ~81%.
31+
32+
At first glance, the "compression-only" camp seems to have won. Adding minification to the compression pipeline only
33+
appears to save an additional 2% relative to the original file size.
34+
35+
**The 2% Trap:** While 2% of the total original file seems negligible, we don't pay for storage based on the original
36+
file size. We pay based on the final compressed artifact. When we look at the results through a "FinOps" lens, that
37+
small delta becomes more significant.
38+
39+
## The 11% Efficiency Gain
40+
41+
When we look at the final artifact size (the compressed file we actually pay to store), the story changes.
42+
43+
In my tests, applying minification before Zstandard compression resulted in a final file that was 11% smaller on
44+
average than compressing the pretty-printed version. By stripping away the "entropy" of unnecessary whitespace and
45+
newlines first, the compression algorithm can focus purely on data patterns, leading to a tighter result.
46+
47+
Let's scale that 11% efficiency gain to the requirements of the **EU Cyber Resilience Act (CRA)**:
48+
49+
1. **10-Year Retention:** You aren't storing one SBOM. You are storing a decade of build history. 11% savings today
50+
compounded over time is a massive reduction in "whitespace debt" by year ten.
51+
2. **Enterprise Scale:** For thousands of software products and services, each with daily or even per-commit builds,
52+
this is the difference between manageable cold storage and a budget-breaking line item.
53+
3. **Global Traffic:** 11% less data means lower egress costs for every audit and transfer.
54+
55+
In this context, an 11% reduction in your long-term storage footprint isn't just "technical elegance". It's a
56+
significant reduction in operational overhead and "whitespace debt".
57+
58+
## The Recommended Storage Strategy
59+
60+
If you are locked into "Binary Blob Signing", you are effectively forbidden from fully optimizing your data. To keep
61+
that signature valid for a decade, you must store the compressed "Pretty-Printed" version. As a result, you are paying
62+
an 11% storage tax indefinitely.
63+
64+
To avoid the storage tax, our recommended strategy for long-term SBOM retention is:
65+
66+
1. **Implement Data-Aware Signing:** Stop signing the container (the file) and start signing the "Facts" (the
67+
canonicalized data).
68+
2. **Minify + Compress for Storage:** Use JSON minification to strip out the structural overhead and a modern algorithm
69+
like Zstandard on the minified version of the SBOM to reach peak efficiency.
70+
71+
This approach ensures that your signatures are resilient to formatting changes while your storage is optimized for the
72+
next 10 years of compliance.
73+
74+
## Final Remarks
75+
76+
I initially brought up the storage topic during my last presentation at the [OpenSSF](https://openssf.org/) SBOM
77+
Everywhere SIG meeting when presenting my findings on SBOM signing best practices and it sparked an immediate shift
78+
in the conversation. A special thank you to [Kate Stewart](https://www.linkedin.com/in/katestewartaustin/) for
79+
inviting me to the SPDX tech call to give the same presentation there. And thanks to the OpenSSF SBOM Everywhere SIG
80+
members and the SPDX Tech call members for all the feedback that prompted this deeper dive.
81+
82+
We are moving toward a world where signing the "Facts" isn't just more secure, it's cheaper.
83+
84+
**The benchmark is being set.** Are you signing the container, or are you signing the data?
2.26 MB
Loading
283 KB
Loading
4.1 MB
Loading
2.02 MB
Loading

0 commit comments

Comments
 (0)