Verify your download
Check a Tenzro release before you install it: the signed SHA-256 manifest, the archive digest, the release key, and how to rebuild a release to compare.
Every Tenzro release is a set of archives plus a manifest of their SHA-256 digests, and the manifest is signed. Check both before you unpack or install anything.
What a release contains
| File | What it is |
|---|---|
tenzro-node-<platform>-<variant>.tar.gz or .zip | The archive you install |
SHA256SUMS | One line per archive: its SHA-256 digest and name |
SHA256SUMS.sig | A cosign signature over SHA256SUMS |
tenzro-release.pub | The public key that verifies the signatures |
matrix.json | How each archive was built: commit, toolchain, features, lockfile digest |
sbom-<commit>.spdx.json, provenance-<commit>.intoto.json | The software bill of materials and the build provenance statement (unsigned; the signed object is SHA256SUMS) |
The installer does this for you
curl -fsSL https://downloads.tenzro.com/install.sh | sh (and install.ps1 on Windows) runs the same two checks before it installs anything: the signature on SHA256SUMS against the release key embedded in the script, whose fingerprint (c88aaee70b3c0bf17a994bad44963a6a72359b2e1497df9a15a40ed099aeb72d) it checks first, and the archive's SHA-256 against that signed list. It uses openssl, not cosign, and stops at the first failure. The script itself is covered by TLS only; its hash is published beside it (install.sh.sha256). If you would rather trust nothing but the release key, do the steps below. See Install and first run.
You can do the same check by hand with openssl:
openssl pkey -pubin -in tenzro-release.pub -outform DER | sha256sum # c88aaee7...aeb72d
base64 -d SHA256SUMS.sig > sig.der
openssl dgst -sha256 -verify tenzro-release.pub -signature sig.der SHA256SUMS # Verified OKLinux and macOS
Install cosign 3.x, then in the folder where you downloaded the release:
# 1. The manifest is signed by the release key.
cosign verify-blob --key tenzro-release.pub --insecure-ignore-tlog=true --signature SHA256SUMS.sig SHA256SUMS
# 2. Your archive matches the manifest (on macOS: shasum -a 256 -c ...).
sha256sum -c SHA256SUMS --ignore-missingThe release signature is made with a hardware-held key and is not uploaded to a transparency log, so --insecure-ignore-tlog=true is required: without it cosign 3 looks for a log entry and fails with "signature not found in transparency log". The check against the public key is complete without the log. Step 1 prints Verified OK. Step 2 prints <archive>: OK for each archive you downloaded. If either step prints anything else, delete the download and do not install it.
The signature is a classical ECDSA P-256 signature from a hardware-held key. A post-quantum signature is planned as a follow-up; no quantum resistance is claimed. Archives have no signature of their own: SHA256SUMS is the signed object, and each archive is checked against it.
Windows
In PowerShell, with cosign installed:
cosign verify-blob --key tenzro-release.pub --insecure-ignore-tlog=true --signature SHA256SUMS.sig SHA256SUMS
(Get-FileHash -Algorithm SHA256 .\tenzro-node-windows-x86_64-cuda.zip).HashCompare the printed hash, ignoring case, with the line for that archive in SHA256SUMS.
Where the public key lives
The release signing key is a P-256 key created inside the TPM 2.0 of a Tenzro-operated machine. It is non-exportable: the private key cannot leave the chip, is never on a build machine, and every use needs a passphrase typed by the release signer, who reads the manifest before signing it. The public half is published as tenzro-release.pub in each release, next to the manifest.
Release key fingerprint (SHA-256 of the DER encoding of the public key):
c88aaee70b3c0bf17a994bad44963a6a72359b2e1497df9a15a40ed099aeb72dCompute it from the file you downloaded and compare:
openssl pkey -pubin -in tenzro-release.pub -outform DER | sha256sumWindows code signing
The Windows archives and the Windows control app are not Authenticode-signed unless the build machine was configured with a code-signing certificate. A release that was not so configured makes Windows SmartScreen warn about an unknown publisher. That warning is expected for an unsigned build and is not a verdict on the archive: the cosign signature and the SHA-256 check above are the verification. The macOS app is checked with codesign --verify --deep --strict at build time.
Rebuilding to compare
matrix.json records the commit, toolchain, features and lockfile digest of each archive. A release can be rebuilt from that commit and its digest compared with the published one.
Related
- Deployment for installing and running a node.
- Downloads for the release archives.