Supply Chain Security
How to check an InnerWarden host-stack release before you run it: what is signed, where the public key is, its fingerprint, and an OpenSSL recipe that verifies it.
Supply Chain Security
The InnerWarden host stack runs as root, so the install path matters as much as what runs afterwards. This page is how to check a release yourself before you run it, and what that check does and does not prove. The free Community CLI and its installers have their own checks, in Installation.
What is signed
Every file below is on the public releases page, next to its sidecars.
| File | Sidecars | Shipped by |
|---|---|---|
Every host-stack binary: sensor, agent, ctl, supervisor, watchdog, config-sign and dns-guard, for Linux x86_64 and aarch64 | <file>.sha256 and <file>.sig | every stable release |
install.sh, the host installer | install.sh.sha256 and install.sh.sig | 0.16.75 and later |
Releases before 0.16.75 ship no sidecars for install.sh, so there is nothing to check for the script on them. The binaries it downloads are checked by the script itself, see below.
The two sidecars are different things:
.sha256is insha256sumformat (the hash, two spaces, the file name), sosha256sum -ctakes it as shipped. It catches a corrupt or truncated download..sigis the base64 of a 64-byte Ed25519 signature made over the raw 32-byte SHA-256 digest of the file, not over the file itself. That is why the recipe below hashes first.
The public key
The key is published here, on a different host from the GitHub release that carries the files, so tampering with one cannot also swap the other.
- File:
https://www.innerwarden.com/keys/innerwarden-release-signing.pub.pem - SHA-256 fingerprint of the raw 32-byte key:
0bd3a6aaf29dbfe8d3d23983a5bcc0560dd80ec64212b065ca9cd18ba732c494
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAvR3bZQMGNQ7tfoKirl4mbBCE6DekmmEFADL5g984PC4=
-----END PUBLIC KEY-----
It is the key install.sh pins inside itself, the key innerwarden-ctl upgrade verifies with, and the key the Community release publishes as innerwarden-release.pub. To get the fingerprint of the file you downloaded, take the last 32 bytes of its DER form:
openssl pkey -pubin -in innerwarden-release-signing.pub.pem -outform DER | tail -c 32 | sha256sum # macOS: shasum -a 256
# -> 0bd3a6aaf29dbfe8d3d23983a5bcc0560dd80ec64212b065ca9cd18ba732c494 -
If the two do not match, stop: do not use that key file.
Verify a file
The same four steps work for install.sh and for any binary. This example checks the installer; for a binary, set FILE to its name, for example innerwarden-ctl-linux-x86_64.
V=vX.Y.Z # "v" + the release you are about to install
FILE=install.sh # install.sh needs 0.16.75 or later
base=https://github.com/InnerWarden/innerwarden-releases/releases/download/$V
curl -fsSLO "$base/$FILE"
curl -fsSLO "$base/$FILE.sha256"
curl -fsSLO "$base/$FILE.sig"
curl -fsSLO https://www.innerwarden.com/keys/innerwarden-release-signing.pub.pem
# 1. The key is the published one (compare with the fingerprint above).
openssl pkey -pubin -in innerwarden-release-signing.pub.pem -outform DER | tail -c 32 | sha256sum # macOS: shasum -a 256
# 2. The download is intact.
sha256sum -c "$FILE.sha256" # macOS: shasum -a 256 -c
# -> install.sh: OK
# 3. The signature is the one the release pipeline made, over the digest of the file.
openssl dgst -sha256 -binary "$FILE" > digest.bin
base64 -d < "$FILE.sig" > sig.bin # macOS: base64 -D
openssl pkeyutl -verify -pubin -inkey innerwarden-release-signing.pub.pem -rawin -in digest.bin -sigfile sig.bin
# -> Signature Verified Successfully
Run the installer only after steps 2 and 3 both pass. Signature Verification Failure means the file, the signature or the key is not the one the release was made with: do not run it, and see Reporting a problem.
Two details that trip people up:
- Hash first. Giving
openssl pkeyutlthe file itself instead ofdigest.binfails on a genuine release, because the signature covers the digest. - You need OpenSSL 3.0 or later. Ubuntu 22.04 and later, Debian 12 and later, RHEL, Rocky and Alma 9 and later, and Fedora 36 and later ship it. On macOS the system
opensslis LibreSSL and cannot load an Ed25519 key; use OpenSSL 3 by its full path (brew install openssl@3).
What the installer and the updater check for you
install.shchecks each binary it downloads against its.sha256and against its.sig, using the key pinned inside it, and refuses to continue when a stable release's binary has no signature or a failing one. It needs OpenSSL 3 for this, and says so when the host has an older one.sudo innerwarden-ctl upgradedoes the same with the key built into the CLI, before it replaces anything.
The key pinned inside install.sh vouches for the binaries it downloads, never for the script itself, which is why the script ships its own .sha256 and .sig and why this page is the place to check them.
What this does not prove
- A valid signature shows the file is the one the release pipeline signed with this key. It does not show the pipeline could not have been compromised. The signing key is held by the release pipeline; it is not yet in a hardware module or split between custodians.
- There is no scheduled key rotation. If the key is rotated, this page, the key file above and the installer change together, and the previous key is listed here as retired.
- Builds are not reproducible yet, so you cannot rebuild a release from source and compare the bytes.
- There is no SBOM per release yet. The release pipeline records a build-provenance attestation for each Linux host binary, but it is not publicly fetchable yet; the signature is what you can check yourself.
Reporting a problem
Report it as a security issue, following Vulnerability Disclosure, if you see any of these on a release downloaded from the canonical URLs above:
- a stable release binary with no
.sigor.sha256; - a signature that fails with the key published here;
- a key file whose fingerprint differs from the one on this page;
- any sign that the signing key is compromised.
For a page that is out of date with a release, tell us in the same way; it is not a security issue.
See also Customer Security Pack, which maps these controls for a procurement review, and Installation.