Skip to content

CipherHorizon v0.3.0

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 18 Oct 09:34
· 28 commits to main since this release
7da548a

Changed

  • The remote TLS CBOM says how it knows each fact, and keeps every identifier it read
    (AUDIT-TLS-CBOM-001). All of it is additive: new components,
    cipherhorizon:* properties, and CycloneDX 1.7 fields the schema defines. See docs/cbom-model.md.
    • Evidence states. Every component has cipherhorizon:evidence:

      • observed: a ServerHello, or a certificate and what it states;
      • accepted: a group or signature scheme a single-item probe was answered for;
      • derived: what an accepted suite's IANA entry names;
      • negotiated: used by the one handshake a current client completed.

      A negotiated component also says which version (negotiated-in).

    • Coverage. The document's metadata states, per scan stage, whether it was done, not tested, not applicable,
      not reached, cut by the budget or inconclusive, and whether the scan was complete. An absent component can now
      be told apart from an untested one.

    • No identifier is dropped.

      • A certificate signature or key algorithm the catalogue does not know is kept by the OID read from the
        certificate (identifier-status = unrecognised), with no family guessed.
      • Every accepted group is listed with its IANA code point, including brainpool, binary and GOST curves.
      • The TLS 1.3 signature schemes are also listed with their code points.
    • RSASSA-PSS parameters are decoded per certificate: hash, mask generation, salt length and trailer field, with
      RFC 8017 defaults marked.

    • Suites reference their MAC or hash: HMAC-SHA-1, HMAC-SHA-256, the new HMAC-SHA-384 (1.2.840.113549.2.10),
      HMAC-MD5, or the SHA-256/SHA-384 of an AEAD suite's PRF or HKDF.

    • Certificates carry every extension.

      • The 1.7 common names: subjectAlternativeName, authorityInformationAccess, crlDistributionPoints,
        authorityKeyIdentifier, subjectKeyIdentifier, signedCertificateTimestamp.
      • Every other extension as a 1.7 custom extension named by its OID: name constraints and the TLS Feature
        decoded, unknown ones marked not decoded, critical flagged.
    • The served chain is linked: issued-by, only to a certificate the server sent. Each certificate says which
      handshakes returned it (seen-in, no-sni).

    • Public keys carry their SPKI SHA-256 (the 1.7 fingerprint) and RSA exponent.

  • tls-report/2 gains optional certificate fields: signatureParams, authorityKeyId, subjectKeyId and
    extensions. Older reports read as before.

Verify what you downloaded

sha256sum --check --ignore-missing checksums.txt
cosign verify-blob checksums.txt --bundle checksums.txt.sigstore.json \
  --certificate-identity-regexp '^https://github.com/offsetsecurity/cipherhorizon/\.github/workflows/release\.yml@refs/tags/v' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com

The inventory scripts a server of this version hands out are attached too, with
inventory-scripts.sha256; cipherhorizon scripts list prints the same hashes offline.

Full instructions, including the container image and build provenance: docs/engineering/DISTRIBUTION.md.