proofbridge-liner-safety-kernel / docs /SOC2-CC6-Mapping.md
divhanimajokweni-ctrl's picture
feat: submit ProofBridge Liner to LabLab AI AMD Developer Hackathon
93c7565
# SOC 2 Type II β€” CC6 Logical Access Control Mapping
## ProofBridge Liner Β· Institution-Grade Circuit Breaker
**Document version:** 1.0
**Date:** 2026-05-01
**Scope:** `contracts/AssetRegistry.sol`, `contracts/TEEVerifier.sol`,
`contracts/CircuitBreaker.sol`, `proofs/SafetyKernel.v`
---
## CC6 Control Objective
> The entity implements logical access security software, infrastructure,
> and architectures over protected information assets to protect them from
> security events to meet the entity's objectives.
---
## CC6.1 β€” Logical Access Security Measures
| Control Criterion | ProofBridge Implementation | Evidence Artifact |
|---|---|---|
| Access to protected information is restricted to authorized users. | `AssetRegistry.onlyOwner` modifier gates all administrative writes. Non-owners receive `"AR: not owner"` revert. | `contracts/AssetRegistry.sol` L48–51 |
| User identification and authentication is required prior to granting access. | TEEVerifier enforces EIP-191 ECDSA signature from the registered enclave before any kernel state change. Unsigned or mis-signed calls revert with `"TEE: INVALID_ATTESTATION"`. | `contracts/TEEVerifier.sol` L68–76 |
| Access is granted consistent with job responsibilities. | Three distinct roles: `owner` (admin), `authorizedResetter` (per-asset reset only), enclave (check writes only). No role can exceed its surface. | `contracts/AssetRegistry.sol` L130–137 |
| Access to protected assets is removed when no longer required. | `transferOwnership()` atomically revokes the prior owner. Per-asset `authorizedResetter` is set to `address(0)` to revoke. | `contracts/AssetRegistry.sol` L193–198 |
---
## CC6.2 β€” Prior to Issuing Credentials
| Control Criterion | ProofBridge Implementation | Evidence Artifact |
|---|---|---|
| Credentials are issued only after identity is established. | Enclave address is set once at deploy-time via immutable `enclavePublicKey`. Cannot be changed post-deployment, preventing credential substitution. | `contracts/TEEVerifier.sol` L40–41 |
| Credentials are not transmitted in clear text. | All authentication is via on-chain ECDSA signature verification. Private keys never appear in contract storage or calldata. | `contracts/TEEVerifier.sol` L86–106 |
---
## CC6.3 β€” Role-Based Access
| Role | Capabilities | Contract Enforcement |
|---|---|---|
| `owner` | Register assets, set thresholds, reset any kernel, transfer ownership | `onlyOwner` modifier on `registerAsset`, `setThreshold`, `transferOwnership`, `reset` |
| `authorizedResetter` | Reset one specific asset's kernel only | `reset()` checks `msg.sender == k.authorizedResetter` |
| `enclave` (TEEVerifier) | Advance kernel state via `check()` only | TEEVerifier is the only caller; signature checked before `kernel.check()` |
| Any address | Read `isOpen()`, call `assertOpen()` | View functions β€” no state modification possible |
---
## CC6.6 β€” Boundary Protection
| Control Criterion | ProofBridge Implementation | Evidence Artifact |
|---|---|---|
| Logical boundaries protect information assets. | Each asset has a fully isolated `KernelState` struct. A halt in one asset cannot affect another (`mapping(bytes32 => KernelState)`). | `contracts/AssetRegistry.sol` L34, L90–102 |
| Boundary protection mechanisms are in place. | The `assertOpen(assetId)` hook reverts token transfers when the kernel is HALTED, enforcing the boundary at the EVM level. | `contracts/AssetRegistry.sol` L155–161 |
| Boundary protections are monitored. | `KernelTripped`, `KernelReset`, `AssetRegistered`, `AttestationVerified` events provide immutable audit trail on-chain. | All contracts, Events sections |
---
## CC6.7 β€” Transmission Integrity
| Control Criterion | ProofBridge Implementation | Evidence Artifact |
|---|---|---|
| Data is protected during transmission. | All oracle/TEE data is authenticated via ECDSA before it can modify state. Replayed or tampered payloads are rejected. | `contracts/TEEVerifier.sol` L68–76 |
| Cryptographic mechanisms protect transmission integrity. | `keccak256(abi.encodePacked(docHash, posterior, threshold))` binds all three fields together. Changing any single field invalidates the signature. | `contracts/TEEVerifier.sol` L63–65 |
---
## CC6.8 β€” Malicious Software Prevention
| Control Criterion | ProofBridge Implementation | Evidence Artifact |
|---|---|---|
| Malicious software is prevented from being introduced. | Smart contracts are immutable after deployment. No `delegatecall`, no upgradeable proxy, no `selfdestruct` in CircuitBreaker or AssetRegistry. | `contracts/CircuitBreaker.sol`, `contracts/AssetRegistry.sol` |
| Formal verification confirms absence of unauthorized state transitions. | Coq proof (`proofs/SafetyKernel.v`) provides machine-checked guarantee that UNAUTH actors cannot reset HALTED state. TLA+ model (`proofs/SafetyKernel.tla`) confirms no deadlocks. | `proofs/SafetyKernel.v`, `proofs/SafetyKernel.tla` |
---
## Gas Analysis (DoS Prevention)
The following confirms `O(1)` execution with no unbounded loops:
| Function | Gas bound | Notes |
|---|---|---|
| `check(assetId, posterior)` | ~5,000 gas | Single mapping read + conditional SSTORE |
| `assertOpen(assetId)` | ~2,200 gas | Single mapping read + require |
| `reset(assetId)` | ~7,500 gas | Two SSTOREs + event emit |
| `registerAsset(...)` | ~65,000 gas | Struct SSTORE (first-time cold write) |
All hot-path functions (`check`, `assertOpen`) are O(1) and bounded,
preventing Denial-of-Service via gas exhaustion.
---
## Summary Matrix
| SOC 2 CC | Status | Key Control |
|---|---|---|
| CC6.1 | βœ… Implemented | `onlyOwner` + EIP-191 TEE attestation |
| CC6.2 | βœ… Implemented | Immutable enclave key, ECDSA-only auth |
| CC6.3 | βœ… Implemented | Three-role access model |
| CC6.6 | βœ… Implemented | Per-asset kernel isolation |
| CC6.7 | βœ… Implemented | ECDSA-bound payload integrity |
| CC6.8 | βœ… Implemented | Immutable contracts + Coq + TLA+ proofs |
---
*This document is intended as evidence for SOC 2 Type II audit preparation.
Final audit opinion is the sole responsibility of the appointed CPA firm.*