RootPack_RU Crypto Validation Runbook
Audience: release engineers and crypto operators who validate and publish the Russian sovereign crypto profile in Stella Ops.
Purpose
This runbook documents the repeatable steps for validating the Russian sovereign crypto profile (CryptoPro on Windows, OpenSSL/Bouncy-managed on Linux, plus PKCS#11) prior to publishing a RootPack bundle. It supplements the crypto-routing audit by covering deterministic tests, hardware validation, and the audit-metadata artifacts that must be attached to each release.
1. Deterministic Test Harness
- Run
ops/crypto/run-rootpack-ru-tests.sh(optionalROOTPACK_LOG_DIR=/tmp/rootpack_ru_logsto override the output path). The script executes:src/__Libraries/__Tests/StellaOps.Cryptography.Tests/StellaOps.Cryptography.Tests.csprojsrc/Scanner/__Tests/StellaOps.Scanner.Worker.Tests/StellaOps.Scanner.Worker.Tests.csprojsrc/Scanner/__Tests/StellaOps.Scanner.Sbomer.BuildXPlugin.Tests/StellaOps.Scanner.Sbomer.BuildXPlugin.Tests.csprojand emits.log+.trxpairs plusREADME.testsunderlogs/rootpack_ru_<timestamp>/.
Note: CryptoPro/PKCS#11 integration suites have not landed yet; the harness currently covers only default SHA/Ed25519 paths. Hardware validation (sections 2–3) is still manual until those tests exist.
- For ad-hoc runs (CI or IDE) ensure the same three projects succeed; the cryptography tests validate SHA-256/SHA-512 against BCL implementations and both Streebog variants against BouncyCastle digests.
- Archive the generated log directory (
logs/rootpack_ru_<timestamp>/) along with any additional test outputs inside the RootPack evidence bundle.
2. Hardware Validation (CryptoPro CSP)
- Install CryptoPro CSP (v5.0 or later) on the validation host and import the qualified certificate configured for the deployment.
- Configure
StellaOps:Crypto:CryptoPro:Keyswith the container handle and certificate thumbprint and setStellaOps:Crypto:Registry:ActiveProfile=ru-offline. - Run the provider diagnostics to confirm the key material is visible:
dotnet run --project src/Tools/StellaOps.CryptoRu.Cli -- providers --config etc/rootpack/ru/crypto.profile.yaml --profile ru-offline --json > logs/ru_cryptopro_providers.json
- Issue a JWKS fetch (
curl https://authority.local/.well-known/jwks) and verify thekidandcrvvalues match the CryptoPro-backed key. - Capture the Authority logs showing
AuthoritySecretHasherInitializerstartup and theCryptoProviderMetricscounters forru.cryptopro.cspusage.
2.1 Hardware Validation (OpenSSL/Bouncy Linux path)
- Install OpenSSL with the
gostengine (or vendor equivalent) on the validation host and import the PEM key/cert that will backStellaOps:Crypto:OpenSsl:Keys. - Configure the
OpenSslsection (PEM path plusPrivateKeyPassphraseEnvVar), keepStellaOps:Crypto:Registry:ActiveProfile=ru-offline, and restart the services. - Execute a signing workflow and confirm
CryptoProviderMetricsrecordsru.openssl.gostactivity. Linux nodes should no longer attempt to loadru.cryptopro.csp. - 2025-12-07 validation evidence (Linux, containerised OpenSSL GOST engine):
- Ran
ops/crypto/validate-openssl-gost.sh(usesrnix/openssl-gost:latest) to generate deterministic digests and two md_gost12_256 signatures over a fixed message. Output folder:logs/openssl_gost_validation_<timestamp>/. - Summary from the run at
20251207T220926Z:- Message SHA256:
e858745af13089d06e74022a75abfee7390aefe7635b15c80fe7d038f58ae6c6 - md_gost12_256 digest:
01ddd6399e694bb23227925cb6b12e8c25f2f1303644ffbd267da8a68554a2cb - Signature SHA256 (run 1):
02321c5564ae902de77a12c8cc2876f0374d4225e52077ecd28876fbd0110b01 - Signature SHA256 (run 2):
6564c7e0953dda7d40054ef46633c833eec5ee13d4ab8dd0557f2aed1b8d76c4 - Determinism note: digests are stable; signatures vary per run (nonce-driven) but verify cleanly against the emitted public key.
- Message SHA256:
- Ran
- Host defaults and toggles: Authority/Signer/Attestor now bind
StellaOps:CryptoviaAddStellaOpsCryptoRuand fail-closed on Linux ifru.openssl.gost/ru.pkcs11are missing. Environment overrides:STELLAOPS_CRYPTO_ENABLE_RU_OPENSSL(default: on for Linux)STELLAOPS_CRYPTO_ENABLE_RU_PKCS11(default: on)STELLAOPS_CRYPTO_ENABLE_RU_WINECSP(default: off)STELLAOPS_CRYPTO_ENABLE_RU_CSP(Windows only; default on) Disable both OpenSSL and PKCS#11 only when an alternate provider is configured; otherwise startup will fail.
3. Hardware Validation (PKCS#11 Tokens)
- Install the vendor PKCS#11 library (e.g., Rutoken
rtPKCS11ECP.dllor JaCarta) and configure the slot/PIN insideStellaOps:Crypto:Pkcs11:Keys. - Switch the registry profile to prioritize
ru.pkcs11and rerundotnet run --project src/Tools/StellaOps.CryptoRu.Cli -- providers --config etc/rootpack/ru/crypto.profile.yaml --profile ru-offline --json > logs/ru_pkcs11_providers.json. - Execute a signing workflow (Authority JWKS refresh or Scanner manifest publish) and confirm the
CryptoProviderMetricscounters recordru.pkcs11activity. - Export the token audit logs (if available) and store them with the RootPack evidence bundle.
4. RootPack Audit Metadata
Create a metadata bundle per validation run and store it under logs/rootpack_ru_<timestamp>/ containing:
providers_ru_offline.json– output fromstellaops crypto providers --profile ru-offline --json.crypto_tests.txt– snippets from the unit-test executions listed above.hardware_notes.md– human-readable notes describing token serials, firmware, and operator initials.jwks_snapshot.json– raw JWKS response captured after sovereign providers are active.metrics_snapshot.json– scrape ofCryptoProviderMetricsPrometheus samples for both providers.
Attach this directory to the RootPack artifact and reference it from the release checklist.
Refer back to the crypto-routing audit for the full inventory of components that must consume the shared cryptography stack, and the RootPack_RU packaging guide for packaging/attachment steps.
Known gaps (2025-11-09)
- The
stellaops crypto providers ...CLI referenced above is still pending implementation—operators must capture PKCS#11 slot info manually. - No automated CryptoPro/PKCS#11 integration tests exist; sovereign hardware validation relies on manual signing runs.
- Symmetric GOST (Magma/Kuznyechik) validation is not covered yet.
These items are tracked in Sprint 514 and will be reflected in this runbook once the corresponding tooling lands.
