Cryptographic Operations Validation Test Suite
CODITECT Biosciences QMS Platform
Document Control
| Attribute | Value |
|---|---|
| Document ID | CRYPTO-VAL-TEST-001 |
| Version | 1.0.0 |
| Status | Draft |
| Classification | Internal - Validation |
| Effective Date | TBD |
| Review Cycle | Annual or upon cryptographic system changes |
| Owner | Security & Compliance Team |
Approval Signatures
| Role | Name | Signature | Date |
|---|---|---|---|
| Prepared By | Security Engineer | _________________ | ________ |
| Reviewed By | QA Manager | _________________ | ________ |
| Approved By | VP Engineering | _________________ | ________ |
| Approved By | Quality Assurance | _________________ | ________ |
Revision History
| Version | Date | Author | Changes |
|---|---|---|---|
| 1.0.0 | 2026-02-16 | Claude (Opus 4.6) | Initial document creation |
1. Executive Summary
This document defines the comprehensive validation test suite for all cryptographic operations in the CODITECT Biosciences QMS Platform. The test suite ensures compliance with:
- FDA 21 CFR Part 11 (Electronic Records and Electronic Signatures)
- HIPAA Security Rule (45 CFR Part 164)
- SOC 2 Type II (Trust Services Criteria)
- NIST FIPS 140-2/3 (Cryptographic Module Validation)
- NIST SP 800-57 (Key Management Recommendations)
Purpose
Validate that all cryptographic operations meet regulatory requirements, industry standards, and performance targets through:
- NIST Known Answer Tests (KAT) - Verify algorithm implementations against published test vectors
- Operational Tests - Validate real-world cryptographic workflows including HSM integration
- Performance Benchmarks - Ensure cryptographic operations meet latency and throughput targets
- Negative Security Tests - Verify rejection of weak algorithms, tampered data, and unauthorized access
Scope
This test suite covers:
- Digital Signatures: ECDSA P-256, RSA-2048
- Encryption: AES-256-GCM, envelope encryption with DEK/KEK
- Hashing: SHA-256, SHA-512, HMAC-SHA256
- Key Management: Generation, rotation, revocation, destruction via Google Cloud KMS
- PKI Operations: Certificate issuance, chain validation, revocation (CRL/OCSP)
- Transport Security: TLS 1.3, mutual TLS (mTLS), certificate pinning
Success Criteria
All test cases must pass with:
- NIST Vector Tests: 100% exact match with published test vectors
- Operational Tests: 100% pass rate with correct outputs and error handling
- Performance Tests: ≥ 95% of operations meet target latency
- Security Tests: 100% rejection of weak algorithms and tampered data
2. Test Strategy Overview
2.1 Test Approach
The validation follows a four-layer testing pyramid:
┌─────────────────┐
│ Compliance │ (Traceability to FDA/HIPAA/SOC2)
│ Traceability │
└─────────────────┘
┌───────────────────┐
│ Integration │ (End-to-end workflows)
│ Tests │
└───────────────────┘
┌──────────────────────────┐
│ Operational Tests │ (Real HSM, certificates)
└──────────────────────────┘
┌────────────────────────────────────┐
│ NIST Known Answer Tests (KAT) │ (Algorithm correctness)
└────────────────────────────────────┘
2.2 Test Environment Requirements
Hardware and Services
- Google Cloud KMS: Production-equivalent HSM keyring for test tenant
- Google Cloud Platform: GKE cluster (dev/staging environment)
- Compute Resources: Minimum 4 vCPU, 16GB RAM for performance testing
- Network Access: Internal VPC with Cloud KMS API access
Software Prerequisites
- Node.js: v18+ (LTS)
- TypeScript: v5+
- Test Framework: Jest 29+ or Vitest 1+
- OpenSSL: v3.0+ (for certificate operations)
- Google Cloud SDK: Latest stable version
Test Data Requirements
- Test Tenant: Dedicated organization
test-org-crypto-validationwith isolated database - Test Certificates: Self-issued root CA, intermediate CA, 10+ user certificates (valid/expired/revoked)
- NIST Test Vectors: Downloaded from NIST CAVP (Cryptographic Algorithm Validation Program)
- Performance Baselines: Prior test run results for regression detection
Configuration
// test-config.ts
export const CRYPTO_TEST_CONFIG = {
kms: {
projectId: 'coditect-qms-test',
location: 'us-central1',
keyRingId: 'test-crypto-validation',
},
tenant: {
orgId: 'test-org-crypto-validation',
isolation: 'strict',
},
performance: {
warmupIterations: 100,
benchmarkIterations: 1000,
concurrentUsers: [10, 50, 100],
},
};
2.3 Test Execution Phases
| Phase | Description | Test Sets | Pass Criteria |
|---|---|---|---|
| IQ | Installation Qualification | NIST KAT, HSM connectivity | 100% pass |
| OQ | Operational Qualification | Operational tests, negative tests | 100% pass |
| PQ | Performance Qualification | Benchmarks, load tests | ≥95% meet targets |
2.4 Evidence Collection
All test executions must capture:
- Test Execution Report: Timestamped results with pass/fail status
- Test Logs: Full console output and application logs
- Performance Metrics: CSV export of latency measurements
- Digital Signature: Test report signed by QA lead
- Screenshots: Critical test steps (certificate validation, HSM operations)
Evidence stored in: gs://coditect-qms-validation/crypto-test-results/YYYY-MM-DD/
3. NIST Test Vector Validation
3.1 ECDSA P-256 (FIPS 186-4)
Algorithm: Elliptic Curve Digital Signature Algorithm using NIST P-256 curve (secp256r1)
Reference: NIST FIPS 186-4 Appendix B.4, NIST CAVP ECDSA Test Vectors
TC-NIST-ECDSA-001: Key Pair Generation Validation
Objective: Verify generated public key lies on the P-256 curve and corresponds to private key.
Test Vector (from NIST):
Private Key (d):
C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721
Expected Public Key (Qx, Qy):
Qx: 60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6
Qy: 7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299
Procedure:
- Import private key
dinto test HSM keyring - Retrieve public key from HSM
- Verify
QxandQymatch expected values - Verify point is on curve:
y² ≡ x³ + ax + b (mod p)
Expected Result: Public key matches NIST vector exactly.
TC-NIST-ECDSA-002: Signature Generation with Known Vector
Objective: Verify signature generation produces expected (r, s) values.
Test Vector (from NIST SigGen):
Message (SHA-256 hash):
44ACEF8A6E2B8B89E3D4F3D3E5F8D9B7A0C3F8A2B5E8D4F3A7E9B2C5A8E4D9F3
Private Key (d):
C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721
Random k (deterministic per RFC 6979):
9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B154BF61AF1D5A6DECE
Expected Signature:
r: F3AC8061B514795B8843E3D6629527ED2AFD6B1F6A555A7ACABB5E6F79C8C2AC
s: 8BF77819CA05A6B2786C76262BF7371CEF97B218E96F175A3CCDDA2ACC058903
Procedure:
- Hash message with SHA-256
- Sign hash using private key with deterministic nonce (RFC 6979)
- Extract signature components (r, s)
- Compare with expected values
Expected Result: Signature (r, s) matches NIST vector exactly.
TC-NIST-ECDSA-003: Signature Verification with Known Vector
Objective: Verify valid signature passes verification.
Test Vector (from TC-NIST-ECDSA-002):
Message Hash: 44ACEF8A...
Public Key (Qx, Qy): 60FED4BA..., 7903FE10...
Signature (r, s): F3AC8061..., 8BF77819...
Procedure:
- Verify signature using public key
- Check verification returns
true
Expected Result: Signature verification succeeds.
TC-NIST-ECDSA-004: Invalid Signature Rejection
Objective: Verify tampered signatures are rejected.
Test Data: Use vector from TC-NIST-ECDSA-002 with modified s component.
Procedure:
- Flip one bit in signature component
s - Attempt verification
- Check verification returns
false
Expected Result: Verification fails with clear error message.
TC-NIST-ECDSA-005: Point-Not-On-Curve Rejection
Objective: Verify invalid public keys are rejected.
Test Data: Public key with (Qx, Qy) not satisfying curve equation.
Procedure:
- Attempt to import invalid public key
- Check operation fails with validation error
Expected Result: Import fails with "point not on curve" error.
3.2 AES-256-GCM (NIST SP 800-38D)
Algorithm: Advanced Encryption Standard (256-bit key) in Galois/Counter Mode
Reference: NIST SP 800-38D, NIST CAVP GCM Test Vectors
TC-NIST-AES-001: Encryption with Known Vector
Objective: Verify AES-256-GCM encryption produces expected ciphertext and authentication tag.
Test Vector (from NIST CAVP gcmEncryptExtIV256):
Key (256-bit):
92E11DCDAA866F5CE790FD24501F92509AACF4CB8B1339D50C9C1240935DD08B
IV (96-bit):
AC93A1A6145299BCE4C6A485
Plaintext (128-bit):
2D71BCF9DCB9B2A8E0D3A7F0C6F5B9E1
AAD (Additional Authenticated Data):
5C9E940FEAD2B5A05F19FCF1
Expected Ciphertext:
8A68A5FD3E87CED96F7A3F77
Expected Tag (128-bit):
D00A3A0F53EE68FCDB5D4C34A90B1656
Procedure:
- Import key into HSM
- Encrypt plaintext with given IV and AAD
- Extract ciphertext and authentication tag
- Compare with expected values
Expected Result: Ciphertext and tag match NIST vector exactly.
TC-NIST-AES-002: Decryption with Known Vector
Objective: Verify AES-256-GCM decryption recovers original plaintext.
Test Vector (from TC-NIST-AES-001):
Procedure:
- Decrypt ciphertext with key, IV, AAD, and tag
- Verify tag authentication succeeds
- Compare decrypted plaintext with original
Expected Result: Plaintext matches original input exactly.
TC-NIST-AES-003: Authentication Tag Verification
Objective: Verify correct tag authenticates, incorrect tag rejects.
Test Data: Use vector from TC-NIST-AES-001 with flipped bit in tag.
Procedure:
- Attempt decryption with tampered tag
- Check operation fails with authentication error
Expected Result: Decryption fails with "authentication tag mismatch" error.
TC-NIST-AES-004: Tampered Ciphertext Detection
Objective: Verify tampered ciphertext is detected during decryption.
Test Data: Use vector from TC-NIST-AES-001 with modified ciphertext byte.
Procedure:
- Flip one bit in ciphertext
- Attempt decryption with original tag
- Check authentication failure
Expected Result: Decryption fails with authentication error (tag computed from tampered ciphertext won't match).
TC-NIST-AES-005: IV Uniqueness Enforcement
Objective: Verify system prevents IV/nonce reuse with same key.
Test Data: Two different plaintexts, same key and IV.
Procedure:
- Encrypt plaintext A with key K and IV I
- Attempt to encrypt plaintext B with same key K and IV I
- Check system generates new random IV or rejects operation
Expected Result: System either auto-generates unique IV or returns error "IV reuse detected".
TC-NIST-AES-006: Large Data Encryption (Streaming)
Objective: Verify correct encryption of data exceeding single-block size.
Test Vector (from NIST CAVP gcmEncryptExtIV256, 256-byte plaintext):
Key: 92E11DCD... (same as TC-NIST-AES-001)
IV: AC93A1A6...
Plaintext: [256 bytes - truncated for brevity]
Expected Ciphertext: [256 bytes]
Expected Tag: 8B3C59D2...
Procedure:
- Encrypt 256-byte plaintext
- Verify ciphertext and tag match expected values
Expected Result: Correct ciphertext and tag for multi-block data.
3.3 SHA-256 (FIPS 180-4)
Algorithm: Secure Hash Algorithm 256-bit
Reference: NIST FIPS 180-4, NIST CAVP SHA Test Vectors
TC-NIST-SHA-001: Empty String Hash
Objective: Verify hash of empty input.
Test Vector:
Message: "" (empty string)
Expected Hash (SHA-256):
E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855
Procedure:
- Compute SHA-256 hash of empty string
- Compare with expected value
Expected Result: Hash matches NIST vector exactly.
TC-NIST-SHA-002: Single-Block Message Hash
Objective: Verify hash of message ≤ 512 bits (single SHA-256 block).
Test Vector (from NIST CAVP SHA-256 ShortMsg):
Message (ASCII): "abc"
Expected Hash:
BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD
Procedure:
- Compute SHA-256 hash of "abc"
- Compare with expected value
Expected Result: Hash matches NIST vector exactly.
TC-NIST-SHA-003: Multi-Block Message Hash
Objective: Verify hash of message requiring multiple 512-bit blocks.
Test Vector (from NIST CAVP SHA-256 LongMsg):
Message (ASCII): "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno" (448 bits)
+ "ijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" (384 bits)
= 832 bits total (2 SHA-256 blocks)
Expected Hash:
CF5B16A778AF8380036CE59E7B0492370B249B11E8F07A51AFAC45037AFEE9D1
Procedure:
- Compute SHA-256 hash of message
- Compare with expected value
Expected Result: Hash matches NIST vector exactly.
TC-NIST-SHA-004: Large Message Hash (Streaming)
Objective: Verify correct hashing of 1MB message using streaming API.
Test Data: Pseudorandom 1MB message generated from NIST DRBG.
Procedure:
- Generate 1MB test message with seed
0x12345678 - Compute hash using streaming API (1KB chunks)
- Compare with reference hash computed by OpenSSL
- Verify memory usage remains constant (streaming, not buffering entire message)
Expected Result: Hash matches reference, memory usage < 10MB.
TC-NIST-SHA-005: Collision Resistance Test
Objective: Verify different inputs produce different hashes (basic collision resistance check).
Test Data: 1000 randomly generated messages.
Procedure:
- Generate 1000 random messages (varying lengths 1-1024 bytes)
- Compute SHA-256 hash for each
- Verify all 1000 hashes are unique
Expected Result: Zero hash collisions across 1000 random inputs.
3.4 RSA-2048 (FIPS 186-4)
Algorithm: Rivest-Shamir-Adleman 2048-bit with PKCS#1 v1.5 and PSS padding
Reference: NIST FIPS 186-4 Section 5, NIST CAVP RSA Test Vectors
TC-NIST-RSA-001: Key Generation Validation
Objective: Verify generated RSA-2048 key pair meets FIPS 186-4 requirements.
Procedure:
- Generate RSA-2048 key pair via HSM
- Verify modulus
nbit length = 2048 - Verify public exponent
e= 65537 - Verify
pandqare prime (Miller-Rabin test with 50 iterations) - Verify
|p - q| > 2^(1024-100)(p and q not too close) - Verify
d * e ≡ 1 (mod φ(n))
Expected Result: All validation checks pass.
TC-NIST-RSA-002: PKCS#1 v1.5 Signature Generation
Objective: Verify RSA signature with PKCS#1 v1.5 padding (legacy JWT support).
Test Vector (from NIST CAVP SigGen RSA):
Modulus n (2048-bit): [Hex value]
Private exponent d: [Hex value]
Message (SHA-256 hash): 44ACEF8A...
Expected Signature: [256 bytes]
Procedure:
- Import RSA private key
- Sign SHA-256 hash using PKCS#1 v1.5 padding
- Compare signature with expected value
Expected Result: Signature matches NIST vector exactly.
TC-NIST-RSA-003: PKCS#1 v1.5 Signature Verification
Objective: Verify RSA signature verification with PKCS#1 v1.5 padding.
Test Vector (from TC-NIST-RSA-002):
Procedure:
- Verify signature using RSA public key
- Check verification returns
true
Expected Result: Signature verification succeeds.
TC-NIST-RSA-004: PSS Signature Generation
Objective: Verify RSA signature with PSS padding (modern standard).
Test Vector (from NIST CAVP SigGen RSA-PSS):
Modulus n: [2048-bit]
Private exponent d: [2048-bit]
Message Hash (SHA-256): 44ACEF8A...
Salt Length: 32 bytes
Expected Signature: [256 bytes]
Procedure:
- Sign hash using RSA-PSS with SHA-256 and 32-byte salt
- Compare signature with expected value
Expected Result: Signature matches NIST vector exactly.
TC-NIST-RSA-005: PSS Signature Verification
Objective: Verify RSA-PSS signature verification.
Test Vector (from TC-NIST-RSA-004):
Procedure:
- Verify PSS signature using public key
- Check verification returns
true
Expected Result: Signature verification succeeds.
TC-NIST-RSA-006: Invalid Key Rejection
Objective: Verify system rejects weak RSA keys.
Test Data: RSA-1024 key (below minimum 2048-bit requirement).
Procedure:
- Attempt to import RSA-1024 private key
- Check operation fails with validation error
Expected Result: Import fails with "key size below minimum 2048 bits" error.
3.5 HMAC-SHA256 (FIPS 198-1)
Algorithm: Hash-based Message Authentication Code using SHA-256
Reference: FIPS 198-1, RFC 4231 HMAC-SHA256 Test Vectors
TC-NIST-HMAC-001: Known Vector Validation (Short Key)
Objective: Verify HMAC-SHA256 with key shorter than block size.
Test Vector (from RFC 4231 Test Case 1):
Key (20 bytes):
0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B
Data (ASCII): "Hi There"
Expected HMAC (32 bytes):
B0344C61D8DB38535CA8AFCEAF0BF12B881DC200C9833DA726E9376C2E32CFF7
Procedure:
- Compute HMAC-SHA256 using given key and data
- Compare with expected value
Expected Result: HMAC matches RFC 4231 vector exactly.
TC-NIST-HMAC-002: Known Vector Validation (Long Key)
Objective: Verify HMAC-SHA256 with key longer than SHA-256 block size (64 bytes).
Test Vector (from RFC 4231 Test Case 5):
Key (131 bytes):
0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C... (131 times 0x0C)
Data (ASCII): "Test With Truncation"
Expected HMAC (32 bytes):
A3B6167473100EE06E0C796C2955552B
Note: Key > 64 bytes triggers key hashing per HMAC spec.
Procedure:
- Compute HMAC-SHA256 with 131-byte key
- Compare with expected value
Expected Result: HMAC matches RFC 4231 vector exactly.
TC-NIST-HMAC-003: Variable-Length Data
Objective: Verify HMAC correctness across different data lengths.
Test Vectors (from RFC 4231 Test Cases 2-4):
Test Case 2:
Key: "Jefe"
Data: "what do ya want for nothing?"
Expected: 5BDCC146BF60754E6A042426089575C75A003F089D2739839DEC58B964EC3843
Test Case 3:
Key: AAAA... (20 bytes)
Data: DDDD... (50 bytes)
Expected: 773EA91E36800E46854DB8EBD09181A72959098B3EF8C122D9635514CED565FE
Procedure:
- Compute HMAC for each test case
- Verify all match expected values
Expected Result: All HMACs match RFC 4231 vectors exactly.
TC-NIST-HMAC-004: Truncated MAC Validation
Objective: Verify truncated HMAC output (common in protocols like JWT).
Test Data: Use TC-NIST-HMAC-001 vector, truncate to 128 bits.
Procedure:
- Compute full 256-bit HMAC
- Truncate to first 128 bits
- Verify truncated value matches first 16 bytes of expected HMAC
Expected Result: Truncated HMAC matches expected prefix.
TC-NIST-HMAC-005: Timing Attack Resistance
Objective: Verify HMAC comparison uses constant-time algorithm.
Test Data: Correct HMAC and 100 incorrect HMACs differing at various byte positions.
Procedure:
- Generate correct HMAC for test message
- Create 100 incorrect HMACs (flip bits at positions 0, 1, 2, ..., 31)
- Measure verification time for each
- Compute standard deviation of verification times
- Verify stddev < 1% of mean time (indicating constant-time comparison)
Expected Result: Verification time variance < 1% (constant-time comparison confirmed).
4. Operational Test Cases
4.1 Key Management Operations
TC-KM-001: Generate ECDSA P-256 Key Pair via HSM
Objective: Verify successful creation of ECDSA signing key in Google Cloud KMS.
Procedure:
- Call
keyManagementService.createKey()with algorithmEC_SIGN_P256_SHA256 - Verify key created with status
ENABLED - Verify key purpose =
ASYMMETRIC_SIGN - Retrieve public key and validate format (PEM-encoded X.509 SubjectPublicKeyInfo)
- Verify key is non-exportable (protection level =
HSM)
Test Data:
{
keyRingId: 'test-crypto-validation',
keyId: 'test-ecdsa-p256-001',
algorithm: 'EC_SIGN_P256_SHA256',
protectionLevel: 'HSM',
}
Expected Result: Key created successfully, public key retrievable, protection level = HSM.
Evidence: Screenshot of Cloud KMS console showing created key, API response JSON.
TC-KM-002: Generate AES-256 Key via HSM
Objective: Verify successful creation of AES encryption key in Cloud KMS.
Procedure:
- Call
keyManagementService.createKey()with algorithmGOOGLE_SYMMETRIC_ENCRYPTION - Verify key created with purpose =
ENCRYPT_DECRYPT - Verify key version auto-created with state
ENABLED - Test encrypt/decrypt operation with key
Test Data:
{
keyRingId: 'test-crypto-validation',
keyId: 'test-aes-256-001',
algorithm: 'GOOGLE_SYMMETRIC_ENCRYPTION',
protectionLevel: 'HSM',
}
Expected Result: Key created successfully, encrypt/decrypt operations succeed.
Evidence: API response JSON, successful encrypt/decrypt test output.
TC-KM-003: Key Rotation
Objective: Verify key rotation creates new version and old version remains functional.
Procedure:
- Create AES key with auto-rotation disabled
- Encrypt test data with initial key version (v1)
- Manually rotate key (create version v2)
- Verify primary version updated to v2
- Encrypt new data with v2
- Decrypt data encrypted with v1 (verify old version still decrypts)
- Decrypt data encrypted with v2
Expected Result:
- Version v2 becomes primary
- Data encrypted with v1 can still be decrypted
- New encryptions use v2
- Both versions remain in state
ENABLED
Evidence: API responses showing version creation, decrypt operations with both versions.
TC-KM-004: Key Revocation
Objective: Verify revoked key version cannot perform cryptographic operations.
Procedure:
- Create ECDSA key
- Sign test message with key
- Disable key version
- Attempt to sign new message
- Verify operation fails with "key version disabled" error
- Verify previously created signature still verifies (revocation doesn't invalidate old signatures)
Expected Result:
- Signing with disabled key version fails
- Existing signatures remain valid
- Error message clearly indicates key is disabled
Evidence: Error response JSON, verification of old signature success.
TC-KM-005: Key Destruction
Objective: Verify scheduled destruction prevents key usage after grace period.
Procedure:
- Create test AES key
- Schedule key version for destruction (24-hour grace period)
- Verify key version state =
DESTROY_SCHEDULED - Verify key still functional during grace period
- [Manual verification after 24h] Verify key version state =
DESTROYED - [Manual verification after 24h] Verify decrypt operations fail
Expected Result:
- Key usable during grace period
- After grace period, key version transitions to
DESTROYED - Decrypt operations fail with "key version destroyed" error
Evidence: State transition logs, failed decrypt operation after destruction.
Note: Full test requires 24-hour wait. Automated test verifies scheduling; manual verification required for post-destruction state.
TC-KM-006: Key Access Control
Objective: Verify RBAC prevents unauthorized key usage.
Procedure:
- Create test key with permissions:
test-user@coditect-qms-test.iam.gserviceaccount.comgrantedcloudkms.cryptoKeyEncrypterDecrypter - Attempt to decrypt using unauthorized service account (no role granted)
- Verify operation fails with permission denied error
- Authenticate as authorized service account
- Verify decrypt succeeds
Expected Result:
- Unauthorized account receives HTTP 403 Forbidden
- Error message: "Permission 'cloudkms.cryptoKeyVersions.useToDecrypt' denied"
- Authorized account succeeds
Evidence: Error response for unauthorized access, success response for authorized access.
TC-KM-007: Key Export Prevention
Objective: Verify HSM keys are non-exportable.
Procedure:
- Create HSM-backed key (protection level =
HSM) - Attempt to export private key via Cloud KMS API
- Verify operation fails (no export API exists for HSM keys)
- Verify public key export succeeds (asymmetric keys only)
Expected Result:
- No API method exists to export HSM private keys
- Public key export returns PEM-encoded key
- Documentation confirms HSM keys are non-exportable
Evidence: API documentation reference, successful public key export.
4.2 Envelope Encryption
TC-EE-001: Encrypt Data with DEK, Wrap DEK with KEK
Objective: Verify envelope encryption workflow: generate DEK, encrypt data, wrap DEK with Cloud KMS KEK.
Procedure:
- Generate random 256-bit DEK (Data Encryption Key) using
crypto.randomBytes(32) - Encrypt test data (1KB JSON payload) with DEK using AES-256-GCM
- Store IV and authentication tag with ciphertext
- Wrap DEK using Cloud KMS KEK:
keyManagementService.encrypt({ plaintext: DEK }) - Store wrapped DEK with encrypted data
- Verify ciphertext != plaintext
- Verify wrapped DEK != raw DEK
Test Data:
{
"patient_id": "P-12345",
"test_results": [{"assay": "ELISA", "value": 0.345}],
"timestamp": "2026-02-16T10:30:00Z"
}
Expected Result:
- Data encrypted with DEK
- DEK wrapped with KEK
- Output structure:
{ ciphertext: Buffer, iv: Buffer, authTag: Buffer, wrappedDEK: Buffer }
Evidence: Encrypted payload JSON, wrapped DEK hex dump.
TC-EE-002: Decrypt Envelope (Unwrap DEK, Decrypt Data)
Objective: Verify envelope decryption workflow: unwrap DEK, decrypt data.
Procedure:
- Use encrypted data from TC-EE-001
- Unwrap DEK using Cloud KMS:
keyManagementService.decrypt({ ciphertext: wrappedDEK }) - Decrypt data using unwrapped DEK with AES-256-GCM (IV and authTag from TC-EE-001)
- Verify authentication tag
- Verify decrypted plaintext matches original test data
Expected Result:
- DEK successfully unwrapped
- Data successfully decrypted
- Plaintext matches original input byte-for-byte
Evidence: Decrypted JSON payload matching original.
TC-EE-003: KEK Rotation (Old DEKs Still Unwrappable)
Objective: Verify KEK rotation doesn't break existing wrapped DEKs.
Procedure:
- Encrypt data and wrap DEK using KEK version v1 (from TC-EE-001)
- Rotate KEK (create version v2, set as primary)
- Unwrap DEK wrapped with v1 using rotated KEK
- Verify unwrap succeeds (Cloud KMS automatically uses correct version)
- Decrypt data using unwrapped DEK
- Encrypt new data, wrap DEK with rotated KEK (now uses v2)
- Verify new DEK unwrap succeeds
Expected Result:
- Old DEKs (wrapped with v1) remain unwrappable after rotation
- New wraps use v2
- Decryption succeeds for both old and new envelopes
Evidence: Successful decrypt of data encrypted before and after KEK rotation.
TC-EE-004: Large Data Encryption (100MB)
Objective: Verify envelope encryption scales to large files.
Procedure:
- Generate 100MB test file (random bytes)
- Generate DEK and wrap with KEK
- Encrypt file using AES-256-GCM in streaming mode (1MB chunks)
- Measure encryption time and memory usage
- Decrypt file and verify hash matches original
- Verify memory usage remains constant during streaming
Expected Result:
- Encryption completes in < 30 seconds
- Memory usage < 50MB (streaming, not buffering entire file)
- Decrypted file hash matches original
Evidence: Performance metrics (time, memory), hash comparison output.
TC-EE-005: Concurrent Encryption Operations
Objective: Verify multiple concurrent envelope encryptions don't conflict.
Procedure:
- Create 10 concurrent encryption tasks (each encrypting 1MB payload)
- Each task generates unique DEK, encrypts data, wraps DEK
- Verify all 10 tasks complete successfully
- Verify all 10 DEKs are unique
- Decrypt all 10 payloads and verify correctness
Expected Result:
- All 10 encryptions succeed
- No DEK collisions
- All 10 decryptions succeed
- Total time < 5 seconds (parallelism effective)
Evidence: Concurrent task completion log, unique DEK verification.
4.3 Digital Signature Operations
TC-DS-001: Sign Document Hash with User Certificate
Objective: Verify document signing with user's ECDSA certificate.
Procedure:
- Prepare test document (PDF metadata + SHA-256 hash)
- Retrieve user's signing certificate and private key from HSM
- Sign document hash using ECDSA P-256
- Embed signature in CAdES-BES structure (ETSI TS 103 171)
- Include signer certificate in signature envelope
- Verify signature structure contains:
- Signed hash
- Signature value (r, s)
- Signer certificate
- Signing time timestamp
Test Data:
{
"document_id": "DOC-2026-001",
"document_hash": "a3b5c7...",
"signer_id": "user-001@test-org-crypto-validation",
"signing_time": "2026-02-16T10:30:00Z"
}
Expected Result:
- Signature created successfully
- CAdES-BES structure valid per ETSI specification
- Signature size < 2KB
Evidence: Signed document JSON, signature structure dump.
TC-DS-002: Verify Signature with Certificate Chain
Objective: Verify signature verification validates full certificate chain (user → intermediate → root).
Procedure:
- Use signed document from TC-DS-001
- Extract signer certificate from signature envelope
- Build certificate chain: user cert → intermediate CA cert → root CA cert
- Verify root CA certificate is in trust store
- Verify each certificate in chain:
- Signature valid (signed by parent CA)
- Not expired
- Not revoked (check CRL/OCSP)
- Key usage allows signing
- Verify document signature using validated certificate
Expected Result:
- Certificate chain validation succeeds
- Signature verification succeeds
- Validation result:
VALIDwith trust chain to root CA
Evidence: Certificate chain validation log, signature verification result.
TC-DS-003: Reject Signature from Revoked Certificate
Objective: Verify signature verification fails when signer certificate is revoked.
Procedure:
- Issue test certificate for user
test-revoked-user@test-org - Sign test document with certificate
- Revoke certificate via internal CA (add to CRL)
- Publish updated CRL
- Attempt to verify signature
- Check CRL during verification
- Verify verification fails with "certificate revoked" error
Expected Result:
- Verification fails
- Error message: "Certificate revoked (CRL check failed)"
- Error includes revocation date and reason
Evidence: CRL entry for revoked certificate, verification error response.
TC-DS-004: Reject Signature from Expired Certificate
Objective: Verify signature verification fails when certificate is expired.
Procedure:
- Create test certificate with 1-hour validity (
notAfter= now + 1 hour) - Sign test document immediately
- [Manual after 1 hour] Attempt to verify signature
- Verify verification fails with "certificate expired" error
Expected Result:
- Signature verification fails after expiry
- Error message: "Certificate expired (notAfter: 2026-02-16T11:30:00Z)"
Evidence: Certificate with short validity, verification error after expiry.
Note: Automated test uses certificate with notAfter in past; manual test verifies real-time expiry behavior.
TC-DS-005: Reject Signature from Wrong Tenant Certificate
Objective: Verify cross-tenant signature rejection (tenant isolation).
Procedure:
- Create document in tenant A (
test-org-crypto-validation) - Attempt to sign document using certificate issued to tenant B (
test-org-b) - Verify signing operation succeeds (signature cryptographically valid)
- Verify document repository rejects signature due to tenant mismatch
- Check error: "Signer certificate does not belong to document tenant"
Expected Result:
- Signature cryptographically valid
- Application-level tenant check rejects signature
- Error clearly indicates tenant mismatch
Evidence: Tenant ID mismatch error, audit log entry.
TC-DS-006: Long-Term Validation (LTV) with Embedded OCSP
Objective: Verify signature includes OCSP response for long-term validation.
Procedure:
- Sign document with user certificate
- Query OCSP responder for signer certificate status
- Embed OCSP response in signature envelope (CAdES-T format)
- Include timestamp from trusted TSA (Time Stamping Authority)
- Verify LTV signature structure contains:
- Signature value
- Signer certificate
- OCSP response
- Timestamp token
- Verify signature remains verifiable even if OCSP responder becomes unavailable
Expected Result:
- LTV signature created successfully
- OCSP response embedded and valid
- Signature verifiable offline (no network calls to OCSP)
Evidence: LTV signature structure dump showing embedded OCSP response.
TC-DS-007: Concurrent Signature Operations
Objective: Verify multiple concurrent signing operations don't conflict.
Procedure:
- Create 10 concurrent signing tasks
- Each task signs unique document with same user certificate
- All tasks use HSM-backed private key (same key handle)
- Verify all 10 signatures created successfully
- Verify all 10 signatures verify correctly
- Measure total time and throughput
Expected Result:
- All 10 signatures succeed
- Average signing time < 50ms (meets performance target from TRACK-D)
- Throughput ≥ 200 signatures/second (10 signatures in < 50ms total)
Evidence: Concurrent task completion log, performance metrics.
4.4 Certificate Operations
TC-CO-001: Issue User Signing Certificate
Objective: Verify user certificate issuance via internal CA.
Procedure:
- Generate ECDSA P-256 key pair for user (CSR private key)
- Create Certificate Signing Request (CSR):
- Subject:
CN=test-user-001, O=test-org-crypto-validation, C=US - Key Usage: Digital Signature, Non-Repudiation
- Extended Key Usage: Document Signing (1.3.6.1.5.5.7.3.36)
- Subject:
- Submit CSR to internal intermediate CA
- Verify CA validates CSR signature
- Verify CA issues certificate signed by intermediate CA
- Verify issued certificate:
- Serial number unique
- Validity period = 1 year
- Issuer = intermediate CA DN
- Subject matches CSR
- Public key matches CSR
- Extensions correct (Key Usage, EKU)
Expected Result:
- Certificate issued successfully
- Certificate format: X.509 v3 PEM-encoded
- All extensions and fields correct
Evidence: Issued certificate PEM file, OpenSSL certificate dump output.
TC-CO-002: Verify Certificate Chain
Objective: Verify complete certificate chain validation (user → intermediate → root).
Procedure:
- Use certificate from TC-CO-001
- Build certificate chain:
Root CA (self-signed)
└─ Intermediate CA (signed by Root)
└─ User Certificate (signed by Intermediate) - Verify using OpenSSL:
openssl verify -CAfile root.pem -untrusted intermediate.pem user.pem - Verify programmatic validation using Node.js
crypto.createVerify() - Check each link:
- User cert signature valid (verify with Intermediate CA public key)
- Intermediate cert signature valid (verify with Root CA public key)
- Root CA self-signature valid
Expected Result:
- OpenSSL verify:
user.pem: OK - Programmatic verification succeeds
- Trust chain established to root CA
Evidence: OpenSSL verify output, validation logs.
TC-CO-003: Revoke Certificate and Verify CRL Update
Objective: Verify certificate revocation updates CRL.
Procedure:
- Issue test certificate (from TC-CO-001)
- Revoke certificate via CA admin interface:
- Revocation reason:
keyCompromise - Revocation date: current timestamp
- Revocation reason:
- Trigger CRL regeneration (CA should auto-regenerate or manual trigger)
- Download CRL from distribution point (HTTP URL)
- Parse CRL and verify:
- Revoked certificate serial number present
- Revocation date correct
- Revocation reason extension present
- Verify CRL signature valid (signed by intermediate CA)
Expected Result:
- Certificate appears in CRL within 5 minutes of revocation
- CRL entry contains serial number, revocation date, reason
- CRL signature valid
Evidence: CRL file, OpenSSL CRL dump showing revoked certificate entry.
TC-CO-004: OCSP Response for Valid Certificate
Objective: Verify OCSP responder returns "good" status for valid certificate.
Procedure:
- Use valid certificate from TC-CO-001
- Construct OCSP request:
- Certificate serial number
- Issuer name hash
- Issuer key hash
- Send OCSP request to responder URL (from certificate AIA extension)
- Verify OCSP response:
- Status:
good - Response signature valid (signed by OCSP responder certificate)
- Responder certificate issued by same CA
thisUpdateandnextUpdatetimestamps valid
- Status:
Expected Result:
- OCSP response status:
good - Response received within 2 seconds
- Response signature valid
Evidence: OCSP response ASN.1 dump, status verification log.
TC-CO-005: OCSP Response for Revoked Certificate
Objective: Verify OCSP responder returns "revoked" status for revoked certificate.
Procedure:
- Use revoked certificate from TC-CO-003
- Construct and send OCSP request
- Verify OCSP response:
- Status:
revoked - Revocation time present
- Revocation reason present (
keyCompromise)
- Status:
Expected Result:
- OCSP response status:
revoked - Response includes revocation time and reason
- Response received within 2 seconds
Evidence: OCSP response ASN.1 dump showing revoked status.
TC-CO-006: Certificate Renewal Before Expiry
Objective: Verify seamless certificate renewal before expiration.
Procedure:
- Use certificate issued in TC-CO-001 (expiry = now + 1 year)
- Simulate renewal 30 days before expiry (change system clock or create cert with near-expiry date)
- Generate new CSR with same subject DN but new key pair
- Submit renewal request to CA
- Verify CA issues new certificate:
- New serial number
- New validity period (1 year from renewal date)
- Same subject DN
- New public key
- Verify old certificate remains valid until expiry (both certs valid during overlap period)
Expected Result:
- New certificate issued with fresh validity period
- Old certificate not revoked (graceful transition)
- Both certificates valid during overlap
Evidence: Old and new certificates with overlapping validity periods.
TC-CO-007: Cross-Tenant Certificate Rejection
Objective: Verify certificate issued to tenant A cannot be used in tenant B.
Procedure:
- Issue certificate to
user-a@tenant-a - Create document in tenant B
- Attempt to sign document using tenant A certificate
- Verify application-level check rejects operation
- Check error: "Certificate organization (tenant-a) does not match document tenant (tenant-b)"
Expected Result:
- Signing operation rejected
- Clear tenant mismatch error
- Audit log entry created
Evidence: Tenant mismatch error response, audit log entry.
4.5 TLS Operations
TC-TLS-001: TLS 1.3 Handshake with Approved Cipher Suites
Objective: Verify TLS 1.3 connection uses approved cipher suites only.
Procedure:
- Configure test client to connect to QMS platform API endpoint
- Capture TLS handshake with
openssl s_clientor Wireshark - Verify:
- TLS version negotiated = 1.3
- Cipher suite = one of:
TLS_AES_256_GCM_SHA384TLS_CHACHA20_POLY1305_SHA256TLS_AES_128_GCM_SHA256
- Key exchange = ECDHE (ephemeral keys)
- Certificate signature algorithm = ECDSA-P256-SHA256 or RSA-PSS-SHA256
- Verify forward secrecy enabled (ephemeral DH keys)
Test Command:
openssl s_client -connect api.coditect-qms-test.com:443 -tls1_3 -showcerts
Expected Result:
- TLS 1.3 negotiation succeeds
- Approved cipher suite used
- Server certificate valid
- Forward secrecy confirmed
Evidence: OpenSSL handshake output, Wireshark capture showing TLS 1.3.
TC-TLS-002: Reject TLS 1.2 and Below
Objective: Verify server rejects TLS 1.2, 1.1, 1.0 connections.
Procedure:
- Attempt connection with TLS 1.2:
openssl s_client -connect api.coditect-qms-test.com:443 -tls1_2 - Verify connection refused or handshake fails
- Attempt connection with TLS 1.1:
openssl s_client -tls1_1 - Attempt connection with TLS 1.0:
openssl s_client -tls1 - Verify all legacy TLS versions rejected
Expected Result:
- TLS 1.2 connection fails with "protocol version not supported"
- TLS 1.1 connection fails
- TLS 1.0 connection fails
- Only TLS 1.3 accepted
Evidence: OpenSSL error messages showing protocol rejection.
TC-TLS-003: Mutual TLS (mTLS) with Service Certificates
Objective: Verify mutual TLS authentication between microservices.
Procedure:
- Configure test service A with client certificate
- Configure test service B to require client certificates
- Establish mTLS connection from A to B
- Verify:
- Server (B) presents certificate to client (A)
- Client (A) presents certificate to server (B)
- Both certificates validated against trusted CA
- Connection established only if both certs valid
- Attempt connection without client certificate
- Verify connection refused
Expected Result:
- mTLS connection succeeds with valid client cert
- Connection fails without client cert (error: "certificate required")
- Both client and server certificates validated
Evidence: mTLS handshake logs showing client certificate verification.
TC-TLS-004: Certificate Pinning Validation
Objective: Verify client enforces certificate pinning for API connections.
Procedure:
- Configure test client with pinned certificate fingerprint (SHA-256 hash of server cert public key)
- Connect to API server
- Verify client validates:
- Server certificate chain
- Pinned fingerprint matches server cert public key hash
- Simulate attack: serve different valid certificate (signed by same CA)
- Verify client rejects connection (fingerprint mismatch)
Test Data:
const pinnedFingerprint = 'A7:3D:5F:...'; // SHA-256 hash of legitimate server cert public key
Expected Result:
- Connection succeeds with pinned certificate
- Connection fails with different certificate (even if CA-signed)
- Error: "Certificate fingerprint mismatch"
Evidence: Successful connection log, fingerprint mismatch error for different cert.
TC-TLS-005: Reject Self-Signed Certificates
Objective: Verify client rejects self-signed certificates in production mode.
Procedure:
- Generate self-signed certificate for test server
- Configure test server with self-signed cert
- Attempt client connection with production settings (verify=true)
- Verify connection fails with "self-signed certificate" error
- [Dev mode test] Enable
rejectUnauthorized=falseand verify connection succeeds (confirm dev override works)
Expected Result:
- Production mode: connection fails, error "self-signed certificate in certificate chain"
- Dev mode: connection succeeds (override working as expected)
Evidence: Production mode error, dev mode success (confirming flag functionality).
5. Negative / Security Test Cases
TC-NEG-001: Reject MD5 Hash
Objective: Verify system rejects MD5 hash algorithm (broken, not FIPS-approved).
Procedure:
- Attempt to compute MD5 hash via crypto library
- Verify operation fails or returns error
- Attempt to verify signature with MD5 hash
- Verify verification fails
Expected Result:
- MD5 hash function disabled or returns error
- Error message: "MD5 algorithm not allowed (insecure)"
Evidence: Error response from hash function.
TC-NEG-002: Reject SHA-1 Signature
Objective: Verify system rejects SHA-1 signatures (collision attacks demonstrated).
Procedure:
- Create test certificate with signature algorithm
SHA1withRSA - Attempt to import certificate into trust store
- Verify import fails or certificate marked untrusted
- Attempt to verify document signature using SHA-1 hash
- Verify verification fails
Expected Result:
- Certificate import fails: "SHA-1 signatures not accepted"
- Signature verification fails: "SHA-1 hash algorithm not allowed"
Evidence: Import error message, signature verification failure.
TC-NEG-003: Reject DES/3DES Encryption
Objective: Verify system rejects legacy DES and 3DES encryption.
Procedure:
- Attempt to create symmetric key with algorithm
DESor3DES - Verify operation fails
- Attempt to decrypt ciphertext encrypted with 3DES
- Verify decryption fails
Expected Result:
- Key creation fails: "DES/3DES algorithms not allowed"
- Decryption fails: "Algorithm not supported"
Evidence: Key creation error, decryption error.
TC-NEG-004: Reject RSA < 2048 Bits
Objective: Verify system rejects weak RSA keys below 2048-bit minimum.
Procedure:
- Generate RSA-1024 key pair outside system
- Attempt to import RSA-1024 private key into HSM
- Verify import fails
- Attempt to import certificate with RSA-1024 public key
- Verify import fails
Expected Result:
- Key import fails: "RSA key size below minimum 2048 bits"
- Certificate import fails: "Weak RSA key (1024 bits)"
Evidence: Import error messages.
TC-NEG-005: Reject Expired Certificates
Objective: Verify certificate validation fails for expired certificates.
Procedure:
- Create test certificate with
notAfter= 1 day ago - Attempt to use certificate for signing
- Verify operation fails
- Attempt to verify signature with expired certificate
- Verify verification fails
Expected Result:
- Signing fails: "Certificate expired"
- Verification fails: "Certificate expired (notAfter: 2026-02-15T00:00:00Z)"
Evidence: Expired certificate validation errors.
TC-NEG-006: Detect Tampered Ciphertext (GCM Auth Tag Failure)
Objective: Verify AES-GCM detects ciphertext tampering via authentication tag.
Procedure:
- Encrypt test data with AES-256-GCM (from TC-EE-001)
- Flip one bit in ciphertext (e.g., byte 10, bit 3)
- Attempt decryption with original IV and auth tag
- Verify decryption fails with authentication error
- Verify no plaintext returned (fail-fast on auth failure)
Expected Result:
- Decryption fails immediately after auth tag verification
- Error: "Authentication tag mismatch (ciphertext tampered)"
- No plaintext leaked before authentication
Evidence: Authentication failure error, verification that plaintext not returned.
TC-NEG-007: Detect Tampered Signature
Objective: Verify signature verification detects tampered signature values.
Procedure:
- Create valid signature (from TC-DS-001)
- Flip one bit in signature value (modify
rorscomponent) - Attempt signature verification
- Verify verification fails
Expected Result:
- Verification fails: "Signature verification failed"
- No false positive acceptance
Evidence: Signature verification failure log.
TC-NEG-008: Reject Null/Empty Encryption Key
Objective: Verify system rejects null or empty encryption keys.
Procedure:
- Attempt to encrypt data with null key:
key = null - Attempt to encrypt data with empty buffer:
key = Buffer.alloc(0) - Attempt to encrypt data with key of incorrect size:
key = Buffer.alloc(16)(128-bit instead of 256-bit) - Verify all operations fail with validation error
Expected Result:
- Null key: "Encryption key is null or undefined"
- Empty key: "Encryption key length invalid (expected 32 bytes, got 0)"
- Wrong size: "Encryption key length invalid (expected 32 bytes, got 16)"
Evidence: Validation error messages.
TC-NEG-009: Reject Reused AES-GCM Nonce
Objective: Verify system prevents catastrophic AES-GCM nonce reuse.
Procedure:
- Encrypt data A with key K and IV
I1 - Encrypt data B with same key K and same IV
I1 - Verify system either:
- Auto-generates new random IV for second encryption (preferred), OR
- Rejects second encryption with error "IV reuse detected"
- Verify application tracks used IVs per key (nonce reuse detection)
Expected Result:
- System auto-generates unique IV for each encryption, OR
- System rejects reuse with error "IV/nonce reuse with same key not allowed"
Evidence: Encryption logs showing unique IVs, or IV reuse rejection error.
Note: IV reuse with AES-GCM completely breaks confidentiality. System must prevent this.
TC-NEG-010: Timing Attack Resistance (Constant-Time Comparison)
Objective: Verify cryptographic comparisons use constant-time algorithms (timing attack mitigation).
Procedure:
- Prepare correct HMAC value
- Prepare 1000 incorrect HMAC values with differences at each byte position (0-31)
- Measure verification time for each of 1000 comparisons
- Compute mean and standard deviation of verification times
- Verify standard deviation < 1% of mean time (confirms constant-time comparison)
- Repeat test 10 times to confirm consistency
Test Setup:
const correctHMAC = Buffer.from('A3B5C7D9...', 'hex');
const incorrectHMACs = generateIncorrectHMACs(correctHMAC, 1000);
const times = incorrectHMACs.map(hmac => measureVerificationTime(hmac, correctHMAC));
const stddev = calculateStdDev(times);
const mean = calculateMean(times);
assert(stddev / mean < 0.01, 'Timing variance exceeds 1% - potential timing leak');
Expected Result:
- Verification time variance < 1% (constant-time confirmed)
- No correlation between byte position of difference and verification time
Evidence: Timing analysis data, statistical analysis output.
6. Performance Benchmark Suite
6.1 Performance Targets
| Operation | Target Latency (p95) | Target Throughput |
|---|---|---|
| ECDSA P-256 Sign | < 50ms | ≥ 20 ops/sec |
| ECDSA P-256 Verify | < 30ms | ≥ 30 ops/sec |
| AES-256-GCM Encrypt (1KB) | < 5ms | ≥ 200 ops/sec |
| AES-256-GCM Decrypt (1KB) | < 5ms | ≥ 200 ops/sec |
| SHA-256 Hash (1KB) | < 1ms | ≥ 1000 ops/sec |
| HSM Key Sign | < 100ms | ≥ 10 ops/sec |
| Certificate Chain Validation | < 200ms | ≥ 5 ops/sec |
6.2 Benchmark Test Cases
TC-PERF-001: ECDSA P-256 Sign Latency
Objective: Measure ECDSA signature generation latency distribution.
Procedure:
- Prepare 1000 unique test messages (1KB each)
- Load ECDSA P-256 private key from HSM
- Warm-up: Sign 100 messages (exclude from measurements)
- Benchmark: Sign 1000 messages, record latency for each
- Compute percentiles: p50, p90, p95, p99, max
- Verify p95 < 50ms (target)
Test Code:
const messages = generateTestMessages(1000, 1024);
const privateKey = await loadHSMKey('test-ecdsa-p256-001');
// Warm-up
for (let i = 0; i < 100; i++) {
await signMessage(messages[i], privateKey);
}
// Benchmark
const latencies: number[] = [];
for (const message of messages) {
const start = performance.now();
await signMessage(message, privateKey);
const end = performance.now();
latencies.push(end - start);
}
const stats = calculatePercentiles(latencies);
console.log(`p50: ${stats.p50}ms, p95: ${stats.p95}ms, p99: ${stats.p99}ms`);
assert(stats.p95 < 50, `ECDSA sign p95 latency ${stats.p95}ms exceeds target 50ms`);
Expected Result:
- p50 < 30ms
- p95 < 50ms
- p99 < 80ms
Evidence: Latency distribution histogram, percentile table.
TC-PERF-002: ECDSA P-256 Verify Latency
Objective: Measure ECDSA signature verification latency.
Procedure:
- Pre-generate 1000 signed messages (from TC-PERF-001)
- Load ECDSA P-256 public key
- Warm-up: Verify 100 signatures
- Benchmark: Verify 1000 signatures, record latency for each
- Compute percentiles
- Verify p95 < 30ms
Expected Result:
- p50 < 15ms
- p95 < 30ms
- p99 < 50ms
Evidence: Latency distribution histogram.
TC-PERF-003: AES-256-GCM Encrypt Latency (Variable Data Size)
Objective: Measure AES-256-GCM encryption latency for different data sizes.
Test Data Sizes: 1KB, 10KB, 100KB, 1MB, 10MB, 100MB
Procedure:
- For each data size:
- Generate test data
- Generate random DEK
- Warm-up: Encrypt 10 times
- Benchmark: Encrypt 100 times, record latency
- Compute p50, p95, p99
- Verify 1KB p95 < 5ms
Expected Results:
| Data Size | p50 Latency | p95 Latency | p99 Latency |
|---|---|---|---|
| 1KB | < 1ms | < 5ms | < 10ms |
| 10KB | < 5ms | < 10ms | < 20ms |
| 100KB | < 20ms | < 50ms | < 80ms |
| 1MB | < 100ms | < 200ms | < 300ms |
| 10MB | < 800ms | < 1500ms | < 2000ms |
| 100MB | < 8s | < 15s | < 20s |
Evidence: Latency vs. data size chart, percentile table.
TC-PERF-004: AES-256-GCM Decrypt Latency
Objective: Measure AES-256-GCM decryption latency (same data sizes as TC-PERF-003).
Procedure: Same as TC-PERF-003 but decrypt instead of encrypt.
Expected Results: Similar to encryption (decryption typically same speed or slightly faster).
Evidence: Latency vs. data size chart.
TC-PERF-005: SHA-256 Hash Latency
Objective: Measure SHA-256 hashing latency for different data sizes.
Test Data Sizes: 1KB, 10KB, 100KB, 1MB, 10MB, 100MB
Procedure:
- For each data size:
- Generate test data
- Warm-up: Hash 10 times
- Benchmark: Hash 1000 times, record latency
- Compute percentiles
- Verify 1KB p95 < 1ms
Expected Results:
| Data Size | p50 Latency | p95 Latency | p99 Latency |
|---|---|---|---|
| 1KB | < 0.5ms | < 1ms | < 2ms |
| 10KB | < 2ms | < 5ms | < 10ms |
| 100KB | < 15ms | < 30ms | < 50ms |
| 1MB | < 100ms | < 200ms | < 300ms |
| 10MB | < 1s | < 2s | < 3s |
| 100MB | < 10s | < 15s | < 20s |
Evidence: Latency vs. data size chart.
TC-PERF-006: HSM Key Sign Operation Latency
Objective: Measure end-to-end HSM signing latency (includes network round-trip to Cloud KMS).
Procedure:
- Prepare 1000 test messages
- Warm-up: Sign 50 messages via HSM
- Benchmark: Sign 1000 messages, record latency
- Compute percentiles
- Verify p95 < 100ms
Expected Result:
- p50 < 50ms
- p95 < 100ms
- p99 < 200ms
Note: HSM operations include network latency to Google Cloud KMS. Higher latency than local crypto.
Evidence: Latency distribution, comparison with local signing latency.
TC-PERF-007: Certificate Chain Validation Latency
Objective: Measure certificate chain validation latency (user → intermediate → root).
Procedure:
- Prepare 100 user certificates (unique, all valid)
- Build certificate chains for each
- Warm-up: Validate 20 chains
- Benchmark: Validate 100 chains, record latency
- Compute percentiles
- Verify p95 < 200ms
Expected Result:
- p50 < 100ms
- p95 < 200ms
- p99 < 300ms
Evidence: Latency distribution.
TC-PERF-008: Concurrent Signing Throughput
Objective: Measure signature throughput under concurrent load.
Concurrency Levels: 10, 50, 100 concurrent signing operations
Procedure:
- For each concurrency level:
- Spawn N concurrent tasks (each signs 100 messages)
- Measure total time to complete all tasks
- Compute throughput: (N * 100) / total_time
- Measure individual operation latency (p50, p95)
- Verify throughput scales linearly up to 50 concurrent
Expected Results:
| Concurrency | Throughput (ops/sec) | p50 Latency | p95 Latency |
|---|---|---|---|
| 10 | ≥ 200 | < 50ms | < 80ms |
| 50 | ≥ 500 | < 100ms | < 150ms |
| 100 | ≥ 700 | < 150ms | < 250ms |
Evidence: Throughput vs. concurrency chart, latency distribution at each level.
TC-PERF-009: Envelope Encrypt/Decrypt Latency
Objective: Measure end-to-end envelope encryption latency (DEK generation + data encrypt + DEK wrap).
Test Data: 1KB payload
Procedure:
- Benchmark envelope encryption (1000 iterations):
- Generate random DEK (32 bytes)
- Encrypt data with DEK (AES-256-GCM)
- Wrap DEK with HSM KEK
- Record total latency
- Benchmark envelope decryption (1000 iterations):
- Unwrap DEK with HSM KEK
- Decrypt data with DEK
- Record total latency
- Compute percentiles for each operation
Expected Results:
| Operation | p50 Latency | p95 Latency | p99 Latency |
|---|---|---|---|
| Envelope Encrypt | < 60ms | < 120ms | < 200ms |
| Envelope Decrypt | < 60ms | < 120ms | < 200ms |
Note: Latency dominated by HSM wrap/unwrap operations (~50ms each).
Evidence: Latency breakdown (DEK gen, encrypt, wrap times), percentile table.
6.3 Performance Benchmark Results Template
Test Execution Date: _______________ Test Environment: _______________ HSM Region: _______________ GKE Cluster: _______________ Node Type: _______________
| Test Case | Operation | Data Size | Iterations | p50 (ms) | p90 (ms) | p95 (ms) | p99 (ms) | Max (ms) | Target (p95) | Pass/Fail |
|---|---|---|---|---|---|---|---|---|---|---|
| TC-PERF-001 | ECDSA Sign | 1KB | 1000 | < 50ms | ||||||
| TC-PERF-002 | ECDSA Verify | 1KB | 1000 | < 30ms | ||||||
| TC-PERF-003 | AES Encrypt | 1KB | 1000 | < 5ms | ||||||
| TC-PERF-003 | AES Encrypt | 1MB | 100 | < 200ms | ||||||
| TC-PERF-003 | AES Encrypt | 100MB | 10 | < 15s | ||||||
| TC-PERF-004 | AES Decrypt | 1KB | 1000 | < 5ms | ||||||
| TC-PERF-004 | AES Decrypt | 1MB | 100 | < 200ms | ||||||
| TC-PERF-005 | SHA-256 Hash | 1KB | 1000 | < 1ms | ||||||
| TC-PERF-005 | SHA-256 Hash | 1MB | 1000 | < 200ms | ||||||
| TC-PERF-006 | HSM Sign | 1KB | 1000 | < 100ms | ||||||
| TC-PERF-007 | Cert Chain Validation | N/A | 100 | < 200ms | ||||||
| TC-PERF-008 | Concurrent Sign (10) | 1KB | 1000 | < 80ms | ||||||
| TC-PERF-008 | Concurrent Sign (50) | 1KB | 5000 | < 150ms | ||||||
| TC-PERF-008 | Concurrent Sign (100) | 1KB | 10000 | < 250ms | ||||||
| TC-PERF-009 | Envelope Encrypt | 1KB | 1000 | < 120ms | ||||||
| TC-PERF-009 | Envelope Decrypt | 1KB | 1000 | < 120ms |
Summary:
- Total Tests: 15
- Passed: _______
- Failed: _______
- Pass Rate: _______
Regressions Detected: (List any performance regressions compared to baseline)
Signatures:
- Tested By: _________________ Date: _______
- Reviewed By: _________________ Date: _______
7. Compliance Traceability Matrix
| Regulatory Requirement | Description | Test Case(s) | Expected Evidence |
|---|---|---|---|
| FDA 21 CFR §11.10(a) | Validation of systems | All NIST KAT tests | Test execution report with 100% pass |
| FDA 21 CFR §11.10(c) | Integrity checks | TC-DS-001, TC-DS-002, TC-NEG-006, TC-NEG-007 | Valid signatures, tamper detection logs |
| FDA 21 CFR §11.50(a)(1) | Signed records contain identity | TC-DS-001, TC-CO-001 | Signature envelope with signer certificate |
| FDA 21 CFR §11.50(a)(2) | Signed records contain date/time | TC-DS-001 | Signature envelope with trusted timestamp |
| FDA 21 CFR §11.50(b) | Signature uniquely linked to record | TC-DS-002, TC-DS-005 | Signature verification, tenant isolation |
| FDA 21 CFR §11.70 | Signature/record linking | TC-DS-001, TC-DS-002 | Document hash in signature, chain validation |
| FDA 21 CFR §11.300 | Non-repudiation controls | TC-DS-006 | LTV signatures with embedded OCSP |
| HIPAA §164.312(a)(2)(iv) | Encryption at rest | TC-EE-001, TC-EE-002, TC-NIST-AES-001 | Encrypted data, envelope encryption workflow |
| HIPAA §164.312(e)(1) | Encryption in transit | TC-TLS-001, TC-TLS-002, TC-TLS-003 | TLS 1.3 handshake, mTLS validation |
| HIPAA §164.312(c)(1) | Integrity controls | TC-NEG-006, TC-NEG-007 | GCM auth tag verification, signature tampering detection |
| SOC 2 CC6.1 | Logical access controls | TC-KM-006, TC-CO-007 | RBAC enforcement, cross-tenant rejection |
| SOC 2 CC6.6 | Encryption for confidentiality | TC-NIST-AES-001, TC-EE-001 | AES-256-GCM encryption, HSM key protection |
| SOC 2 CC6.7 | Encryption key management | TC-KM-001 to TC-KM-007 | Key lifecycle operations, HSM non-exportability |
| NIST FIPS 140-2 | Cryptographic module validation | All NIST KAT tests | 100% match with NIST test vectors |
| NIST SP 800-57 | Key management practices | TC-KM-003, TC-KM-004, TC-KM-005 | Key rotation, revocation, destruction |
| NIST SP 800-52 | TLS guidelines | TC-TLS-001, TC-TLS-002 | TLS 1.3 only, approved cipher suites |
| NIST SP 800-63B | Digital authentication | TC-CO-002, TC-CO-004 | Certificate chain validation, OCSP |
8. Test Environment Setup
8.1 Prerequisites Checklist
- Google Cloud Project:
coditect-qms-testprovisioned - Cloud KMS Keyring:
test-crypto-validationcreated inus-central1 - GKE Cluster: Dev/staging cluster running with API pods
- Test Tenant: Organization
test-org-crypto-validationcreated in database - Service Accounts: Test service accounts with appropriate KMS roles
- PKI Infrastructure: Test root CA and intermediate CA certificates generated
- NIST Test Vectors: Downloaded from NIST CAVP to
test-data/nist-vectors/ - Node.js Environment: v18+ installed, dependencies via
npm install - OpenSSL: v3.0+ available in PATH
- gcloud CLI: Authenticated with project access
8.2 Environment Configuration
Create test-env.json:
{
"gcp": {
"projectId": "coditect-qms-test",
"region": "us-central1",
"kms": {
"keyRingId": "test-crypto-validation",
"location": "us-central1"
}
},
"tenant": {
"orgId": "test-org-crypto-validation",
"isolation": "strict"
},
"pki": {
"rootCA": "./test-data/pki/root-ca.pem",
"intermediateCA": "./test-data/pki/intermediate-ca.pem",
"crlUrl": "http://crl.coditect-qms-test.com/intermediate.crl",
"ocspUrl": "http://ocsp.coditect-qms-test.com"
},
"performance": {
"warmupIterations": 100,
"benchmarkIterations": 1000,
"timeoutMs": 30000
}
}
8.3 Test Data Preparation
# Create test data directory structure
mkdir -p test-data/{nist-vectors,pki,performance}
# Download NIST test vectors
curl -o test-data/nist-vectors/ecdsa-p256.zip \
https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/dss/186-3ecdsatestvectors.zip
unzip test-data/nist-vectors/ecdsa-p256.zip -d test-data/nist-vectors/
curl -o test-data/nist-vectors/aes-gcm.zip \
https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/mac/gcmtestvectors.zip
unzip test-data/nist-vectors/aes-gcm.zip -d test-data/nist-vectors/
# Generate test PKI
cd test-data/pki
openssl req -x509 -newkey rsa:4096 -keyout root-ca-key.pem -out root-ca.pem \
-days 3650 -nodes -subj "/CN=Test Root CA/O=CODITECT Test/C=US"
openssl req -newkey rsa:4096 -keyout intermediate-ca-key.pem -out intermediate-ca.csr \
-nodes -subj "/CN=Test Intermediate CA/O=CODITECT Test/C=US"
openssl x509 -req -in intermediate-ca.csr -CA root-ca.pem -CAkey root-ca-key.pem \
-CAcreateserial -out intermediate-ca.pem -days 1825 \
-extfile <(echo "basicConstraints=CA:TRUE,pathlen:0\nkeyUsage=keyCertSign,cRLSign")
8.4 Cleanup Procedures
# Delete test keys from Cloud KMS (after test execution)
gcloud kms keys list --keyring=test-crypto-validation --location=us-central1 \
--format="value(name)" | while read key; do
# Schedule all versions for destruction
gcloud kms keys versions list --key="$key" --location=us-central1 \
--format="value(name)" | while read version; do
gcloud kms keys versions destroy "$version" --location=us-central1
done
done
# Drop test tenant data from database
psql -h localhost -U postgres -d coditect_qms_test -c \
"DELETE FROM documents WHERE tenant_id = 'test-org-crypto-validation';"
# Remove test data files
rm -rf test-data/performance/*.json
rm -rf test-data/evidence/*
8.5 CI/CD Integration
GitHub Actions Workflow (.github/workflows/crypto-validation.yml):
name: Cryptographic Validation Tests
on:
pull_request:
paths:
- 'src/crypto/**'
- 'src/pki/**'
schedule:
- cron: '0 2 * * *' # Nightly at 2 AM UTC
jobs:
nist-kat-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- name: Run NIST KAT Tests
run: npm test -- --testPathPattern=nist-kat
env:
TEST_ENV: ci
- name: Upload Test Results
if: always()
uses: actions/upload-artifact@v3
with:
name: nist-kat-results
path: test-results/nist-kat/
operational-tests:
runs-on: ubuntu-latest
needs: nist-kat-tests
steps:
- uses: actions/checkout@v3
- uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_TEST_SA_KEY }}
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- name: Run Operational Tests
run: npm test -- --testPathPattern=operational
env:
TEST_ENV: ci
GCP_PROJECT: coditect-qms-test
performance-tests:
runs-on: ubuntu-latest
if: github.event_name == 'schedule' # Only nightly
steps:
- uses: actions/checkout@v3
- uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_TEST_SA_KEY }}
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- name: Run Performance Benchmarks
run: npm test -- --testPathPattern=performance
env:
TEST_ENV: ci
- name: Compare with Baseline
run: node scripts/compare-performance-baseline.js
- name: Upload Performance Results
uses: actions/upload-artifact@v3
with:
name: performance-results
path: test-results/performance/
Which Tests Run When:
| Event | Test Set | Duration | Blocking |
|---|---|---|---|
| Every PR | NIST KAT + Unit Tests | ~5 min | Yes (must pass) |
| Crypto Code PR | NIST KAT + Operational | ~15 min | Yes |
| Nightly | Full Suite (NIST + Operational + Performance) | ~45 min | No (report only) |
| Pre-Release | Full Suite + Manual IQ/OQ/PQ | ~2 hours | Yes |
9. Test Execution Procedures
9.1 Installation Qualification (IQ) Test Set
Objective: Verify cryptographic system components are correctly installed and configured.
Test Set:
- All NIST KAT tests (TC-NIST-*)
- TC-KM-001: HSM key generation
- TC-TLS-001: TLS 1.3 connectivity
- TC-CO-001: Certificate issuance
Pass Criteria: 100% pass rate, all NIST vectors match exactly.
Evidence Required:
- Test execution report with timestamps
- NIST vector comparison results
- HSM connectivity verification
Frequency: After initial installation, after system updates, after HSM configuration changes.
9.2 Operational Qualification (OQ) Test Set
Objective: Verify cryptographic operations function correctly in operational scenarios.
Test Set:
- All operational tests (TC-KM-*, TC-EE-*, TC-DS-*, TC-CO-*, TC-TLS-*)
- All negative security tests (TC-NEG-*)
Pass Criteria: 100% pass rate, all error conditions handled correctly.
Evidence Required:
- Test execution report
- Sample signed documents
- Certificate chain validation logs
- HSM operation logs
- Security test results (rejected weak algorithms)
Frequency: After initial installation, quarterly, after major system updates.
9.3 Performance Qualification (PQ) Test Set
Objective: Verify cryptographic operations meet performance targets under load.
Test Set:
- All performance benchmarks (TC-PERF-*)
Pass Criteria: ≥95% of operations meet target latency (p95).
Evidence Required:
- Performance benchmark report (percentile table)
- Latency distribution histograms
- Throughput vs. concurrency charts
- Comparison with baseline (regression check)
Frequency: After initial installation, semi-annually, after infrastructure changes (HSM region move, GKE cluster upgrade).
9.4 Re-validation Triggers
Re-run appropriate test sets when:
| Change | Test Set Required | Rationale |
|---|---|---|
| System software update (Node.js, crypto libraries) | IQ (NIST KAT) | Verify algorithm implementations unchanged |
| HSM configuration change (key rotation policy, new keyring) | IQ + OQ (key management) | Verify HSM operations correct |
| Certificate infrastructure change (new CA, CRL URL) | OQ (certificate operations) | Verify PKI workflows correct |
| Infrastructure migration (GKE cluster, HSM region) | PQ (performance) | Verify performance maintained |
| Regulatory audit | Full suite (IQ + OQ + PQ) | Comprehensive validation evidence |
| Security incident | OQ (security tests) + incident-specific tests | Verify mitigations effective |
9.5 Evidence Collection
For each test execution, capture:
-
Test Execution Report (PDF):
- Test date/time
- Tester name
- Environment details (GCP project, cluster, HSM keyring)
- Test results summary (pass/fail counts)
- Individual test case results with evidence references
-
Test Logs (Archived):
- Console output from test runner
- Application logs during test execution
- HSM operation logs from Cloud KMS
- Network traces (for TLS tests)
-
Performance Metrics (CSV + Charts):
- Raw latency measurements
- Percentile calculations
- Throughput measurements
- Comparison with baseline
-
Digital Signature (Detached):
- Test execution report signed by QA lead
- Signature includes timestamp from trusted TSA
- Evidence stored in:
gs://coditect-qms-validation/crypto-test-results/YYYY-MM-DD/
-
Screenshots (for critical operations):
- Cloud KMS console showing created keys
- Certificate chain validation output
- OCSP response for revoked certificate
- Performance dashboard showing benchmark results
10. Test Execution Report Template
CODITECT Biosciences QMS Platform Cryptographic Operations Validation Test Execution Report
Test Execution ID: CRYPTO-TEST-__________ Execution Date: __________ Executed By: __________ Reviewed By: __________ Approved By: __________
Test Environment
| Parameter | Value |
|---|---|
| GCP Project | |
| GKE Cluster | |
| KMS Keyring | |
| Region | |
| Test Tenant | |
| Node.js Version | |
| OpenSSL Version |
Test Results Summary
| Test Set | Total Tests | Passed | Failed | Pass Rate |
|---|---|---|---|---|
| NIST KAT Tests | 26 | |||
| Operational Tests | 35 | |||
| Security Tests | 10 | |||
| Performance Tests | 15 | |||
| TOTAL | 86 |
Failed Tests (if any)
| Test Case ID | Test Name | Failure Reason | Severity | Mitigation |
|---|---|---|---|---|
Performance Results
| Test Case | Operation | p95 Latency | Target | Pass/Fail |
|---|---|---|---|---|
| TC-PERF-001 | ECDSA Sign | < 50ms | ||
| TC-PERF-002 | ECDSA Verify | < 30ms | ||
| TC-PERF-003 | AES Encrypt (1KB) | < 5ms | ||
| TC-PERF-006 | HSM Sign | < 100ms | ||
| TC-PERF-007 | Cert Chain Validation | < 200ms |
Compliance Confirmation
- All NIST test vectors match exactly (100%)
- All weak algorithms rejected (MD5, SHA-1, DES, RSA-1024)
- Tampered data detected (GCM auth tag, signature verification)
- Certificate chain validation enforced
- HSM keys non-exportable
- Performance targets met (≥95% of operations)
Evidence Attachments
- Test execution logs:
evidence/test-logs-YYYY-MM-DD.zip - Performance metrics:
evidence/performance-results.csv - NIST vector comparison:
evidence/nist-kat-results.json - Screenshots:
evidence/screenshots/ - Digital signature:
evidence/test-report-signature.p7s
Signatures
| Role | Name | Signature | Date |
|---|---|---|---|
| Executed By | _________________ | ________ | |
| Reviewed By | _________________ | ________ | |
| Approved By | _________________ | ________ |
Digital Signature of This Report:
Signed by: __________
Signature File: test-report-signature.p7s
Verification Command: openssl smime -verify -in test-report-signature.p7s -CAfile root-ca.pem
11. Appendices
Appendix A: NIST Test Vector Sources
| Algorithm | Document | URL |
|---|---|---|
| ECDSA P-256 | FIPS 186-4, CAVP ECDSA | https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/digital-signatures |
| AES-256-GCM | NIST SP 800-38D, CAVP GCM | https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/block-ciphers |
| SHA-256 | FIPS 180-4, CAVP SHA | https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/secure-hashing |
| RSA-2048 | FIPS 186-4, CAVP RSA | https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/digital-signatures |
| HMAC-SHA256 | FIPS 198-1, RFC 4231 | https://datatracker.ietf.org/doc/html/rfc4231 |
Appendix B: Glossary
| Term | Definition |
|---|---|
| AAD | Additional Authenticated Data - unencrypted data authenticated by GCM mode |
| AES | Advanced Encryption Standard (FIPS 197) |
| CAdES | CMS Advanced Electronic Signatures (ETSI TS 103 171) |
| CRL | Certificate Revocation List |
| CSR | Certificate Signing Request |
| DEK | Data Encryption Key (used to encrypt data in envelope encryption) |
| ECDH | Elliptic Curve Diffie-Hellman (key agreement) |
| ECDSA | Elliptic Curve Digital Signature Algorithm |
| GCM | Galois/Counter Mode (authenticated encryption) |
| HMAC | Hash-based Message Authentication Code |
| HSM | Hardware Security Module |
| IV | Initialization Vector (nonce for AES-GCM) |
| KAT | Known Answer Test (test with published expected results) |
| KEK | Key Encryption Key (used to wrap DEKs in envelope encryption) |
| KMS | Key Management Service (Google Cloud KMS) |
| LTV | Long-Term Validation (signature with embedded revocation info) |
| mTLS | Mutual TLS (both client and server authenticate) |
| NIST | National Institute of Standards and Technology |
| OCSP | Online Certificate Status Protocol |
| PEM | Privacy-Enhanced Mail (Base64-encoded certificate format) |
| PKI | Public Key Infrastructure |
| PSS | Probabilistic Signature Scheme (RSA padding) |
| SHA | Secure Hash Algorithm |
| TLS | Transport Layer Security |
| TSA | Time Stamping Authority |
Appendix C: References
- NIST FIPS 140-2: Security Requirements for Cryptographic Modules
- NIST FIPS 180-4: Secure Hash Standard (SHS)
- NIST FIPS 186-4: Digital Signature Standard (DSS)
- NIST FIPS 197: Advanced Encryption Standard (AES)
- NIST FIPS 198-1: The Keyed-Hash Message Authentication Code (HMAC)
- NIST SP 800-38D: Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM)
- NIST SP 800-52 Rev. 2: Guidelines for the Selection, Configuration, and Use of TLS
- NIST SP 800-57 Part 1 Rev. 5: Recommendation for Key Management
- RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile
- RFC 6960: X.509 Internet Public Key Infrastructure Online Certificate Status Protocol (OCSP)
- RFC 6979: Deterministic Usage of DSA and ECDSA
- RFC 4231: Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512
- ETSI TS 103 171: CAdES Baseline Profile
- FDA 21 CFR Part 11: Electronic Records; Electronic Signatures
- HIPAA Security Rule: 45 CFR Part 164 Subpart C
END OF DOCUMENT
Document Control:
- Prepared by: Claude (Opus 4.6) on behalf of CODITECT Biosciences QMS Security Team
- Version: 1.0.0
- Classification: Internal - Validation
- Next Review: Annual or upon cryptographic system changes