A reference for Certified Third-Party Assessment Organization personnel evaluating a customer environment that used ForteFide to prepare for a CMMC Level 2 assessment — what ForteFide asserts, what a signed evidence package contains, and how to verify every artifact in it cryptographically and offline.
This guide is written for C3PAO assessors — Certified Third-Party Assessment Organization personnel performing CMMC Level 2 certification assessments under 32 CFR Part 170. Specifically: Certified CMMC Professionals (CCP), Certified CMMC Assessors (CCA), and Lead Assessors who will encounter ForteFide-generated evidence during a customer's assessment.
ForteFide is a customer-operated tool. It runs inside the OSC's (Organization Seeking Certification) environment, assesses systems against all 110 NIST SP 800-171 Rev 2 security requirements — 79 via technical scan, the remaining 31 via organizational evidence and attestation — and, optionally, remediates findings and produces a signed evidence package. As an assessor reviewing that package, you need to know:
This guide is not assessor training. It does not interpret 32 CFR Part 170, NIST SP 800-171A assessment objectives, or the Cyber AB Assessment Process. It does not tell you whether to accept ForteFide evidence — that judgment belongs to you and your C3PAO. It documents what ForteFide produces and how to verify it.
ForteFide is a CMMC Level 2 / NIST SP 800-171 Rev 2 compliance preparation platform with three coupled functions:
machine.hostname / machine.fingerprint.-EncodedCommand. Linux
uses standard OpenSSH. WinRM is supported as a fallback path on legacy Windows targets,
but SSH is preferred.| Standard | Coverage in ForteFide |
|---|---|
| NIST SP 800-171 Rev 2 | All 110 security requirements across 14 families (79 have a technical scan, 82 controls are auto-remediable across the union of Linux + Windows). Each requirement maps to one or more automated probes and/or manual-only flags. |
| NIST SP 800-171A | Assessment objectives drive ForteFide's evidence selection. Per-control evidence captures the command, raw output, and determination. |
| 32 CFR Part 170 | ForteFide produces an SPRS scorecard, SSP scaffold, and POA&M documents in formats compatible with Final Rule submission expectations. The C3PAO confirms suitability. |
| DoD Assessment Methodology v2.13 | SPRS scoring weights (Critical -5, High -3, Medium -3, Low -1) applied; starting score 110. |
ForteFide structures the customer's work into six steps. Each step produces specific, named artifacts. The signed evidence package (Section 4) bundles the artifacts produced from Step 3 onward. Steps 1 and 2 are setup; their artifacts are operationally useful but not part of compliance evidence.
| # | Step | Purpose | Evidence produced |
|---|---|---|---|
| 1 | Recon | Discover and select targets in CUI scope. | Target list (operational, not in the evidence package). |
| 2 | Prepare | Provision a per-host service account; deploy SSH key/cert auth. | Per-target service-account manifest (operational; removed by Teardown). |
| 3 | Scan | Run the 79 scanned controls against each target. | Raw scan output, control determinations, host roll-up — captured in
scan_data.json. |
| 4 | Remediate (optional) | Apply fixes; capture rollback bundles before each change. | Remediation log, per-control rollback bundles, journal
entries (remediation.jsonl). |
| 5 | Evidence | Generate the signed evidence ZIP for the assessor. | Signed evidence package — this is what the C3PAO receives. See Section 4. |
| 6 | Out (Teardown) | Remove service accounts; close out journal; restore original machine state where possible. | Teardown log entry, journal closure record. |
ForteFide produces two distinct evidence tiers. Only one is what the assessor expects to receive.
| Tier | When produced | Manifest | Use |
|---|---|---|---|
| Signed (C3PAO-grade) | Step 5 (Evidence) of the customer journey, from a scan run after Prepare + optional Remediate. | signed=True, Ed25519
signature over the canonical JSON manifest with SHA-256 per artifact. | Ship to the assessor. The package the customer paid for. |
| Unsigned (verification only) | Automatically, when rollback-all succeeds on any target — ForteFide rescans those targets so the operator can verify the rollback restored the baseline. | signed=False,
context="post_rollback_rescan". No Ed25519 signature. | Operator confidence only. Reject if it appears in your evidence intake. |
manifest.json at the package root and confirm signed=True. If
you see signed=False or context="post_rollback_rescan", this is
verification data the customer should not have shipped. Reject and request the signed
package.The evidence package you receive corresponds to a specific moment in the customer's
journey — specifically Step 5, after Step 3 (or Step 3 + Step 4) has run and before Step
6 has run. The generated_utc timestamp on the manifest pins this moment.
A signed ForteFide evidence package is a single ZIP archive named
ForteFide_Signed_Evidence_<scan_id>.zip.
| Filename | Format | What it is |
|---|---|---|
| evidence_manifest.json | JSON | Authoritative chain-of-custody record. Lists every artifact with its SHA-256 hash. Carries the Ed25519 signature, the embedded public key, machine fingerprint, license identity, and product version. |
| verify_evidence.py | Python | Standalone verifier. Recomputes per-artifact SHA-256 and verifies the manifest signature. No network calls; no DenseDefense dependency. Source ships in plaintext. |
| ForteFide_Scan_Report_<id>.pdf | Per-scan report: targets, per-control results, scoring, raw command output excerpts. | |
| 01_System_Security_Plan.pdf | SSP scaffold. System identification, environment, family-by-family compliance summary, per-control implementations. Includes placeholders the customer must complete. | |
| 02_POA_M.pdf | Plan of Action & Milestones for NOT MET controls. Severity, target remediation date by severity, finding text. | |
| 03_Asset_Inventory.pdf | Hosts in scope; OS; per-host MET/NOT MET counts. | |
| 04_SPRS_Scorecard.pdf | SPRS score (starts at 110, weighted deductions per failed control). Family-level breakdown. | |
| 05_Control_Evidence.pdf | Per-control raw evidence: the command run, the output captured, the determination. This is the artifact-level audit trail. | |
| 08_Incident_Response_Plan.pdf | IRP scaffold. Customer completes the team roster and contact fields. | |
| 09_Training_Records.pdf | AT family attestation scaffold. | |
| 10_Attestation_Index.pdf | Per-family status of the manual (organizational) controls: which families have a customer-signed attestation and which are still ATTESTATION REQUIRED. Sealed under the same Ed25519 manifest as every other artifact. | |
| <FAMILY>_Attestation_Signed.pdf | Customer-signed per-family attestation PDFs for the manual-only controls. Present only for families the customer has signed. The customer attests; ForteFide does not verify the underlying control. | |
| scan_data.json | JSON | Full raw scan record. The PDFs are renderings; this is the underlying data the customer cannot alter without invalidating the manifest hash. |
| remediation_log.json | JSON | Activity-log slice covering remediation events for this scan. Present only when remediation ran. |
| control_overrides.json | JSON | Customer-asserted overrides (compensating control, risk accepted, not applicable), each with a rationale string. Present only when overrides exist. |
| dd-trust-manifest.json | JSON | DD-Trust event log. Each remediation gets PRE-state, POST-state, and verdict entries; an evidence-seal event is appended at sign time. |
| state_change_pairs.json | JSON | Per-control verified-remediation proof. One entry per remediated control: {control_id, before, after, verified}, where verified comes from re-running the same 800-171A check that originally failed — not from the fix's exit code. Present only when remediation ran. |
Immediately before the manifest is signed, ForteFide writes a
dd-trust-manifest.json snapshot then appends an evidence-seal event
recording scan_id and artifact_count. This event is the last
record in the DD-Trust log inside the ZIP. Its presence demonstrates the ZIP was produced
through the documented seal path; its absence indicates a hand-assembled ZIP, which the
Ed25519 signature would also catch.
Signature verification is the C3PAO's primary defense against a tampered or forged evidence package. The package is self-verifying: every check runs locally and uses only the public material bundled in the ZIP.
ForteFide operates under an explicit trust-anchor doctrine the C3PAO should
understand. The customer's license.key file IS the cryptographic trust
anchor. ForteFide derives the signing keys from the license payload; it does not store
the derived keys separately.
DATA_DIR. Possession of the
file is possession of the trust anchor.license.key has destroyed the trust anchor.
Their previously-shipped evidence ZIPs still exist as files, and the manifest signatures
are still cryptographically valid at the instant of issue — but provenance can no longer
be re-derived. Treat such packages as unverifiable for new assessments.| Item | Algorithm | Value bundled in package |
|---|---|---|
| Manifest signature | Ed25519 | manifest['signature'] —
base64-encoded 64-byte signature over canonicalized JSON of the manifest with the
signature field removed. |
| Public key | Ed25519 | manifest['public_key'] —
base64-encoded 32-byte public key. Same key embedded in the ForteFide build that produced
the package. |
| Per-artifact hash | SHA-256 | manifest['artifacts'][i]
['sha256'] — 64-hex-character digest of the file as included in the ZIP. |
| Manifest digest | SHA-256 | manifest['manifest_sha256']
— digest of the canonicalized manifest JSON (informational; the signature is the
authoritative integrity check). |
| Canonicalization | json.dumps(sort_keys=True) | All keys sorted; standard JSON whitespace. Guarantees the exact same bytes are signed and verified across implementations. |
$ unzip ForteFide_Signed_Evidence_42.zip -d ff_evidence
$ cd ff_evidence
$ python3 verify_evidence.py
OK ForteFide_Scan_Report_42.pdf
OK 01_System_Security_Plan.pdf
OK 02_POA_M.pdf
OK 04_SPRS_Scorecard.pdf
OK 05_Control_Evidence.pdf
OK scan_data.json
OK dd-trust-manifest.json
Signature: VALID (Ed25519, public_key signed in)
verify_evidence.py requires PyNaCl (pip install pynacl). It
runs in any Python 3.8+ environment. The script source is plain text in the ZIP; you may
inspect it before running.
If you prefer not to run vendor-supplied scripts, you can verify manually. The bundled
public key is base64 inside manifest['public_key']. openssl 3.0+ is required
for raw Ed25519 verification:
# 1. Extract the raw 32-byte Ed25519 public key from the manifest, wrap it in a
# PEM SubjectPublicKeyInfo header, reproduce the exact canonicalized-JSON bytes
# that were signed (every manifest field except signature/public_key), decode
# the base64 signature, then:
openssl pkeyutl -verify -pubin -inkey pub.pem \
-rawin -in payload.bin -sigfile sig.bin
# Expected: 'Signature Verified Successfully'
ForteFide uses a three-tier authentication cascade for operator-to-target access. The tier used directly affects how much weight a C3PAO should place on per-control evidence. The scan report and remediation log record the tier used per target.
| Tier | Mechanism | Strength | Compliance posture |
|---|---|---|---|
| Tier 1 | SSH certificate (Ed25519 user cert with 30-day validity, issued by a license-derived CA) | Strongest | Preferred. Cert expiry binds the auth window to the ForteFide engagement; no long-lived static credential. |
| Tier 2 | SSH public key (Ed25519 keypair, deployed at Prepare) | Strong | Acceptable. Public key stays in target authorized_keys until Teardown removes it. |
| Tier 3 | Password (admin-supplied, used once for Prepare or as scan-time fallback when SSH key/cert deploy failed) | Weakest | Compliance scrutiny flag. Persistent password use indicates Prepare did not complete cleanly. Verify the customer has a documented reason. |
Per-control evidence in 05_Control_Evidence.pdf and
scan_data.json includes the auth tier used — look for the
auth_tier field, or the "Auth: tier-N" line in the per-host header of the
scan report.
A small set of Linux controls are enabled for automatic remediation only behind an explicit per-control, per-target operator acknowledgment (ACK) — each carries a non-trivial chance of locking ForteFide out of the host if applied without coordination. The remediation log records the ACK timestamp and operator identity alongside the apply record. Absence of an ACK record for one of these controls means it was never remediated; presence means the operator deliberately accepted the lockout risk before the change ran.
Some 800-171 controls cannot be reliably verified by an automated remote scanner. ForteFide flags these as MANUAL and does not attempt to remediate them automatically. Out-of-band assessor verification is required.
DomainRole >= 4 via Win32_ComputerSystem) and chooses
behavior per host — APPLIED on a DC (the customer is the policy authority for their own
AD), SKIPPED on a domain member (AD-pushed policy overrides local).Manual-only controls in 05_Control_Evidence.pdf and
scan_data.json do NOT receive an automated MET. They emit
ATTESTATION_REQUIRED (passed=null, flagged for attestation) — ForteFide
deliberately does not auto-pass a control it cannot technically verify. Out-of-band
evidence the customer supplies (signed policies, training records, physical-security
inventory, HR records) goes alongside the ForteFide package.
Current ForteFide builds let the customer attest to the manual-only controls inside
the product. The customer signs a per-family attestation PDF; each signed PDF folds into
the evidence ZIP under the existing Ed25519 seal, and a sealed
10_Attestation_Index.pdf records, per family, whether the attestation is
signed (ATTESTED) or still pending (ATTESTATION REQUIRED).
The automated compliance percentage is unaffected by attestation: the score is computed over the 79 technically-assessed controls, and the 31 organizational controls are excluded from that denominator. Attestation does not move the automated number; it supplies the customer's signed assertion for the controls a scanner cannot evaluate.
ForteFide is designed so that, after Teardown, the customer's targets are returned to the state they were in before Prepare. ForteFide also ships paired, cryptographically signed install/remove records for every state change it makes on a target host, so an assessor can verify the leave-no-trace claim offline rather than trusting operator say-so.
| Item created during Prepare/Remediate | Removed at Teardown? |
|---|---|
| Per-host service account | Yes |
| Service-account home directory and authorized_keys | Yes (entire account is deleted) |
| Deployed SSH public key | Yes (with the account) |
| Deployed SSH user certificate | Yes (with the account); also auto-expires after 30 days |
| sshd_config modifications | Reverted from rollback bundle |
| Service-account privileges (sudo entries, group memberships) | Yes |
| Per-control remediations (package installs, registry edits, audit rules) | Reverted only if the customer explicitly invokes rollback from the dashboard. Teardown does NOT auto-rollback remediations. |
state_changes.jsonl — append-only JSONL of every install and remove
record for the engagement.{version, ts, engagement_id, target, kind,
action_type, details, actor, sig}.svc_user, sudoers, ssh_key, ssh_cert, ca_pubkey, sshd_config,
watchdog.sig is an HMAC-SHA256 of the canonical record (sorted JSON keys, no
whitespace), keyed by material derived from the customer's license.Pair key: (target, action_type, canonical(details)). For every install
record there should be a matching remove record with the same pair key. Any unpaired
install is a leave-no-trace audit gap. Any orphan remove (no matching install) usually
indicates a pre-existing artifact the customer cleaned up, not a cause for concern.
license.key file. If the
customer uninstalled ForteFide without backing it up, the derived key is unrecoverable —
signatures on file exist but cannot be verified. Treat such artifacts as UNTRUSTED.
DenseDefense does not escrow license.key files and cannot regenerate them. Asking the
customer for license.key alongside the evidence package is a normal part of the
assessment intake checklist for a ForteFide-generated engagement.state_changes.jsonl
entries — the file is append-only, fsync-durable, and signature-anchored.After each remediation, ForteFide re-runs the same 800-171A check that originally
returned NOT MET — it does not trust the remediation command's exit code. The outcome is
recorded as a per-control state-change pair {control_id, before, after,
verified} and sealed into the signed evidence package as
state_change_pairs.json, under the same Ed25519 chain of custody as the scan
evidence.
verified=true means the re-run of the original check now satisfies the
control. verified=false means the remediation ran but the control still does
not pass — treat as a NOT MET the customer attempted and failed to close.state_change_pairs.json is covered by the evidence-manifest SHA-256 and
Ed25519 signature like every other sealed artifact; the bundled verifier flags any
post-seal edit.A practical workflow for incorporating a ForteFide signed evidence package into a CMMC Level 2 assessment. Adapt to your C3PAO's process.
verify_evidence.py (or the manual openssl path from
Section 5).evidence_manifest.json. Record scan_id, generated_utc,
machine.hostname, machine.fingerprint, license.org_id, license.license_id,
product_version.05_Control_Evidence.pdf. For each NIST family, spot-check 3-5
controls that received a MET determination. Read the captured command and raw output;
confirm the determination follows from the output.04_SPRS_Scorecard.pdf. Confirm the starting score of 110 and
per-severity weights (Critical -5, High -3, Medium -3, Low -1).scan_data.json;
confirm the SPRS score in the PDF matches your computation.Record in your workpapers: package SHA-256, signature verification result, manifest identifiers, the ForteFide version that produced the package, the auth tiers observed, the controls you spot-checked, the live-verification results, and the manual-only evidence obtained out-of-band. Your assessment determination derives from this composite, not from the ForteFide package alone.
Stating the trust assumptions and known limitations explicitly so the C3PAO knows what the signature does and does not defend against, and what to plan around.
license.license_id and license.org_id in the manifest for
customer-distinguishing identity.state_change_pairs.json — absence means "no remediation was attempted," not
"remediation occurred and the verifier was bypassed."| Term | Meaning in this guide |
|---|---|
| C3PAO | Certified Third-Party Assessment Organization. Authorized by The Cyber AB to perform CMMC Level 2 certification assessments. |
| CCA / CCP | Certified CMMC Assessor / Certified CMMC Professional — individual credentials under the Cyber AB ecosystem. |
| OSC / OSA | Organization Seeking Certification / Organization Seeking Assessment. The customer being assessed. |
| CUI | Controlled Unclassified Information — the data type the CMMC Level 2 assessment is concerned with. |
| CMMC | Cybersecurity Maturity Model Certification. DoD compliance framework codified in 32 CFR Part 170. |
| NIST SP 800-171 / 800-171A | NIST publication enumerating 110 security requirements for non-federal systems handling CUI, and its companion publication defining assessment objectives. |
| SPRS | Supplier Performance Risk System. DoD scoring format used by prime contractors; ForteFide produces an SPRS scorecard. |
| SSP / POA&M | System Security Plan / Plan of Action & Milestones — required compliance documents; ForteFide produces scaffolds. |
| Ed25519 | Edwards-curve digital signature algorithm — 32-byte keys, 64-byte signatures. Used for the manifest signature. |
| Auth tier | ForteFide-internal classification of the auth method used per target. Tier 1 = SSH cert, Tier 2 = SSH key, Tier 3 = password. 1 is strongest. |
| DC-aware controls | ForteFide's internal list of controls whose remediation behavior depends on whether the Windows target is a domain controller — APPLIED on DCs, SKIPPED on domain members. |
| Leave-no-trace | Design principle: targets return to their pre-Prepare state at Teardown. Customer-controlled remediation persistence is opt-in via per-control rollback bundles. |
| Manual-only | A control the scanner cannot reliably verify; ForteFide flags it for assessor review rather than fabricating automated evidence. |
Every control in scan_data.json carries a determination from a small
fixed vocabulary. Understanding each determination is essential to reading
05_Control_Evidence.pdf correctly.
| Determination | Field value | What it means | Assessor action |
|---|---|---|---|
| MET | passed: true | ForteFide ran a probe, captured output, and the output satisfies the control's pass criteria. | Spot-check the captured command and raw output. |
| NOT MET | passed: false | The output does NOT satisfy the control's pass criteria. | Confirm a POA&M entry exists with a severity-appropriate target date. |
| MANUAL | passed: null,
determination: "manual" | Control is in the manual-only category. ForteFide did not attempt automated probing. | Verify out-of-band: signed policy, training record, physical inspection, HR record. |
| NOT APPLICABLE | passed: null,
determination: "na" | Customer asserted the control does not apply to this environment. Override rationale required. | Read the override rationale and confirm the asserted environmental fact. |
| ERROR | passed: null,
determination: "error" | Probe execution failed (timeout, auth failure, target unreachable). The control was NOT evaluated. | Treat as missing evidence; request a re-scan of the affected target. |
| OVERRIDDEN | passed: true with an override flag,
determination: "override-met" | Customer accepted a compensating control or risk and marked the control MET via override, with rationale. | Apply heightened scrutiny — the underlying probe may have returned NOT MET. |
The 14 NIST SP 800-171 Rev 2 families and how ForteFide handles each. "Automated" means ForteFide runs probes and produces a MET / NOT MET determination from raw output. "Manual-flagged" means ForteFide marks the control for assessor or customer review and does not fabricate a determination. "Hybrid" means some controls in the family are automated and some are manual.
| ID | Family | ForteFide handling |
|---|---|---|
| AC | Access Control | Hybrid. Local account, lockout, session, remote-access controls automated. Policy-statement controls manual. |
| AT | Awareness and Training | Manual-flagged. Attestation-based; ForteFide produces a Training Records scaffold. |
| AU | Audit and Accountability | Mostly automated. Audit subsystem state, log retention, log-write success captured via probes. |
| CA | Security Assessment | Hybrid. Self-assessment frequency and POA&M presence automated; system-boundary documentation manual. |
| CM | Configuration Management | Mostly automated. Baseline drift, software inventory, least-functionality probes run. One control is DC-aware. |
| IA | Identification and Authentication | Mostly automated. Password policy, MFA presence, account ageing, identifier reuse all probed. One control is DC-aware. |
| IR | Incident Response | Hybrid. IRP existence and contact accuracy via a scaffold document; tabletop-exercise evidence remains organizational. |
| MA | Maintenance | Hybrid. Remote-maintenance auth automated; on-site maintenance ledger manual. |
| MP | Media Protection | Mostly manual-flagged. Removable-media policy, sanitization, transport are organizational. |
| PE | Physical and Environmental Protection | Manual-only. ForteFide cannot inspect server rooms or verify badge logs. |
| PS | Personnel Security | Manual-only. Background-screening and termination records are HR-system records ForteFide does not access. |
| RA | Risk Assessment | Hybrid. Vulnerability-scan presence and remediation cycle automated; risk-register content review remains assessor-side. |
| SC | System and Communications Protection | Mostly automated. Boundary protection, DNS, encryption-in-transit, secure baselines all probed. |
| SI | System and Information Integrity | Mostly automated. Patch level, malicious-code defense, monitoring presence all probed. |
Total: 110 NIST 800-171 r2 controls. ForteFide technically scans
79 of the 110; 31 are organizational
(training, physical, personnel), assessed via attestation and out-of-band documentation.
The automated compliance percentage is computed over the 79 technically-assessed
controls; the 31 organizational controls are excluded from that denominator, not
counted as failures. Automated remediation covers 67 controls
on Linux and 66 on Windows (82
distinct controls across the union of both) — the remainder are manual-flagged for the
assessor's independent verification or are doctrine-skipped on DC targets to prevent
self-lockout. Exact per-control automation status is in scan_data.json
under control_results[].determination.