# KMS Security Architecture ## Table of Contents 1. [Security Overview](#security-overview) 2. [Multi-Layered Security Model](#multi-layered-security-model) 3. [Authentication Security](#authentication-security) 4. [Token Security Models](#token-security-models) 5. [Authorization Framework](#authorization-framework) 6. [Data Protection](#data-protection) 7. [Security Middleware Chain](#security-middleware-chain) 8. [Threat Model](#threat-model) 9. [Security Controls](#security-controls) 10. [Compliance Framework](#compliance-framework) --- ## Security Overview The KMS implements a comprehensive security architecture based on defense-in-depth principles. Every layer of the system includes security controls designed to protect against both external threats and insider risks. ### Security Objectives - **Confidentiality**: Protect sensitive data and credentials - **Integrity**: Ensure data accuracy and prevent tampering - **Availability**: Maintain service availability under attack - **Accountability**: Complete audit trail of all operations - **Non-repudiation**: Cryptographic proof of operations ### Security Principles - **Zero Trust**: Verify every request regardless of source - **Fail Secure**: Safe defaults when systems fail - **Defense in Depth**: Multiple security layers - **Least Privilege**: Minimal permission grants - **Security by Design**: Security integrated into architecture --- ## Multi-Layered Security Model ```mermaid graph TB subgraph "External Threats" DDoS[DDoS Attacks] XSS[XSS Attacks] CSRF[CSRF Attacks] Injection[SQL Injection] AuthBypass[Auth Bypass] TokenReplay[Token Replay] BruteForce[Brute Force] end subgraph "Security Perimeter" subgraph "Load Balancer Security" NginxSec[Nginx Security
- Rate limiting
- SSL termination
- Request filtering] end subgraph "Application Security Layer" SecurityMW[Security Middleware] subgraph "Security Headers" HSTS[HSTS Header
max-age=31536000] ContentType[Content-Type-Options
nosniff] FrameOptions[X-Frame-Options
DENY] XSSProtection[XSS-Protection
1; mode=block] CSP[Content-Security-Policy
Restrictive policy] end subgraph "CORS Protection" Origins[Allowed Origins
Whitelist validation] Methods[Allowed Methods
GET, POST, PUT, DELETE] Headers[Allowed Headers
Authorization, Content-Type] Credentials[Credentials Policy
Same-origin only] end subgraph "CSRF Protection" CSRFToken[CSRF Token
Double-submit cookie] CSRFHeader[X-CSRF-Token
Header validation] SameSite[SameSite Cookie
Strict policy] end end subgraph "Rate Limiting Defense" GlobalLimit[Global Rate Limit
100 RPS per IP] EndpointLimit[Endpoint-specific
Limits per route] BurstControl[Burst Control
200 request burst] Backoff[Exponential Backoff
Failed attempts] end subgraph "Authentication Security" MultiAuth[Multi-Provider Auth
Header, JWT, OAuth2, SAML] subgraph "Token Security" JWTSigning[JWT Signing
RS256 Algorithm] TokenExpiry[Token Expiration
Configurable TTL] TokenRevocation[Token Revocation
Blacklist in Redis] TokenRotation[Token Rotation
Refresh mechanism] end subgraph "Static Token Security" HMACValidation[HMAC Validation
SHA-256 signature] TimestampCheck[Timestamp Validation
5-minute window] ReplayProtection[Replay Protection
Nonce tracking] KeyRotation[Key Rotation
Configurable schedule] end subgraph "Session Security" SessionEncryption[Session Encryption
AES-256-GCM] SessionTimeout[Session Timeout
Idle timeout] SessionFixation[Session Fixation
Protection] end end subgraph "Authorization Security" RBAC[Role-Based Access
Hierarchical permissions] PermissionCheck[Permission Validation
Request-level checks] ScopeValidation[Scope Validation
Token scope matching] PrincipleOfLeastPrivilege[Least Privilege
Minimal permissions] end subgraph "Data Protection" Encryption[Data Encryption] subgraph "Encryption at Rest" DBEncryption[Database Encryption
AES-256 column encryption] KeyStorage[Key Management
Environment variables] SaltedHashing[Salted Hashing
BCrypt cost 14] end subgraph "Encryption in Transit" TLS13[TLS 1.3
All communications] CertPinning[Certificate Pinning
OAuth2/SAML providers] MTLS[Mutual TLS
Service-to-service] end end subgraph "Input Validation" JSONValidation[JSON Schema
Request validation] SQLProtection[SQL Injection
Parameterized queries] XSSProtectionValidation[XSS Protection
Input sanitization] PathTraversal[Path Traversal
Prevention] end subgraph "Monitoring & Detection" SecurityAudit[Security Audit Log
All operations logged] FailureDetection[Failure Detection
Failed auth attempts] AnomalyDetection[Anomaly Detection
Unusual patterns] AlertSystem[Alert System
Security incidents] end end subgraph "Database Security" DBSecurity[PostgreSQL Security
- Connection encryption
- User isolation
- Query logging
- Backup encryption] end subgraph "Infrastructure Security" ContainerSecurity[Container Security
- Non-root user
- Minimal images
- Security scanning] NetworkSecurity[Network Security
- Internal networks
- Firewall rules
- VPN access] end %% Threat Mitigation Connections DDoS -.->|Mitigated by| NginxSec XSS -.->|Prevented by| SecurityMW CSRF -.->|Blocked by| CSRFToken Injection -.->|Stopped by| JSONValidation AuthBypass -.->|Blocked by| MultiAuth TokenReplay -.->|Prevented by| TimestampCheck BruteForce -.->|Limited by| GlobalLimit %% Security Layer Flow NginxSec --> SecurityMW SecurityMW --> GlobalLimit GlobalLimit --> MultiAuth MultiAuth --> RBAC RBAC --> Encryption Encryption --> JSONValidation JSONValidation --> SecurityAudit SecurityAudit --> DBSecurity SecurityAudit --> ContainerSecurity %% Styling classDef threat fill:#ffcdd2,stroke:#d32f2f,stroke-width:2px classDef security fill:#c8e6c9,stroke:#388e3c,stroke-width:2px classDef auth fill:#e1bee7,stroke:#7b1fa2,stroke-width:2px classDef data fill:#fff9c4,stroke:#f57f17,stroke-width:2px classDef infra fill:#e3f2fd,stroke:#1976d2,stroke-width:2px class DDoS,XSS,CSRF,Injection,AuthBypass,TokenReplay,BruteForce threat class SecurityMW,HSTS,ContentType,FrameOptions,XSSProtection,CSP,Origins,Methods,Headers,Credentials,CSRFToken,CSRFHeader,SameSite security class MultiAuth,JWTSigning,TokenExpiry,TokenRevocation,TokenRotation,HMACValidation,TimestampCheck,ReplayProtection,KeyRotation,SessionEncryption,SessionTimeout,SessionFixation,RBAC,PermissionCheck,ScopeValidation,PrincipleOfLeastPrivilege auth class Encryption,DBEncryption,KeyStorage,SaltedHashing,TLS13,CertPinning,MTLS,JSONValidation,SQLProtection,XSSProtectionValidation,PathTraversal,SecurityAudit,FailureDetection,AnomalyDetection,AlertSystem,DBSecurity data class ContainerSecurity,NetworkSecurity,NginxSec,GlobalLimit,EndpointLimit,BurstControl,Backoff infra ``` ### Security Layer Breakdown 1. **Perimeter Security**: Load balancer, rate limiting, DDoS protection 2. **Application Security**: Security headers, CORS, CSRF protection 3. **Authentication Security**: Multi-provider authentication with strong cryptography 4. **Authorization Security**: RBAC with hierarchical permissions 5. **Data Protection**: Encryption at rest and in transit 6. **Input Validation**: Comprehensive input sanitization and validation 7. **Monitoring**: Security event detection and alerting --- ## Authentication Security ### Multi-Provider Authentication Framework The KMS supports four authentication providers, each with specific security controls: #### **Header-based Authentication** ```go // File: internal/auth/header_validator.go:42 func (hv *HeaderValidator) ValidateAuthenticationHeaders(r *http.Request) (*ValidatedUserContext, error) ``` **Security Features:** - **HMAC-SHA256 Signatures**: Request integrity validation - **Timestamp Validation**: 5-minute window prevents replay attacks - **Constant-time Comparison**: Prevents timing attacks - **Email Format Validation**: Prevents injection attacks **Implementation Details:** ```go // HMAC signature validation with constant-time comparison func (hv *HeaderValidator) validateSignature(userEmail, timestamp, signature string) bool { mac := hmac.New(sha256.New, []byte(signingKey)) mac.Write([]byte(signingString)) expectedSignature := hex.EncodeToString(mac.Sum(nil)) return hmac.Equal([]byte(signature), []byte(expectedSignature)) } ``` #### **JWT Authentication** ```go // File: internal/auth/jwt.go:47 func (j *JWTManager) GenerateToken(userToken *domain.UserToken) (string, error) ``` **Security Features:** - **RSA Signatures**: Strong cryptographic signing - **Token Revocation**: Redis-backed blacklist - **Secure JTI Generation**: Cryptographically secure token IDs - **Claims Validation**: Complete token verification **Token Structure:** ```json { "iss": "kms-api-service", "sub": "user@example.com", "aud": ["app-id"], "exp": 1642781234, "iat": 1642694834, "nbf": 1642694834, "jti": "secure-random-id", "user_id": "user@example.com", "app_id": "app-id", "permissions": ["app.read", "token.create"], "token_type": "user", "max_valid_at": 1643299634 } ``` #### **OAuth2 Authentication** ```go // File: internal/auth/oauth2.go ``` **Security Features:** - **Authorization Code Flow**: Secure OAuth2 flow implementation - **State Parameter**: CSRF protection for OAuth2 - **Token Exchange**: Secure credential handling - **Provider Validation**: Certificate pinning support #### **SAML Authentication** ```go // File: internal/auth/saml.go ``` **Security Features:** - **XML Signature Validation**: Assertion integrity verification - **Certificate Validation**: Provider certificate verification - **Attribute Extraction**: Secure claim processing - **Replay Protection**: Timestamp and nonce validation --- ## Token Security Models ### Static Token Security (HMAC-based) ```mermaid stateDiagram-v2 [*] --> TokenRequest: Client requests token state TokenRequest { [*] --> ValidateApp: Validate app_id ValidateApp --> ValidatePerms: Check permissions ValidatePerms --> GenerateToken: Create token GenerateToken --> [*] } TokenRequest --> StaticToken: type=static state StaticToken { [*] --> GenerateHMAC: Generate HMAC key GenerateHMAC --> HashKey: BCrypt hash (cost 14) HashKey --> StoreDB: Store in static_tokens table StoreDB --> GrantPerms: Assign permissions GrantPerms --> Active: Token ready Active --> Verify: Incoming request Verify --> ValidateHMAC: Check HMAC signature ValidateHMAC --> CheckTimestamp: Replay protection CheckTimestamp --> CheckPerms: Validate permissions CheckPerms --> Authorized: Permission check CheckPerms --> Denied: Permission denied Active --> Revoke: Admin action Revoke --> Revoked: Update granted_permissions.revoked=true } Authorized --> TokenResponse: Success response Denied --> ErrorResponse: Error response Revoked --> [*]: Token lifecycle end note right of StaticToken Static tokens use HMAC signatures - Timestamp-based replay protection - BCrypt hashed storage - Permission-based access control - No expiration (until revoked) end note ``` #### **Token Format** ``` Format: {PREFIX}_{BASE64_DATA} Example: ABC_xyz123base64encodeddata... Validation: HMAC-SHA256(request_data, hmac_key) Storage: BCrypt hash (cost 14) Lifetime: No expiration (until revoked) ``` #### **Security Implementation** ```go // File: internal/crypto/token.go:95 func (tg *TokenGenerator) HashToken(token string) (string, error) { hash, err := bcrypt.GenerateFromPassword([]byte(token), tg.bcryptCost) if err != nil { return "", fmt.Errorf("failed to hash token with bcrypt cost %d: %w", tg.bcryptCost, err) } return string(hash), nil } ``` ### User Token Security (JWT-based) ```mermaid stateDiagram-v2 [*] --> UserTokenRequest: User requests token state UserTokenRequest { [*] --> AuthUser: Authenticate user AuthUser --> GenerateJWT: Create JWT with claims GenerateJWT --> SetExpiry: Set expires_at, max_valid_at SetExpiry --> StoreSession: Store user session StoreSession --> Active: JWT issued } UserTokenRequest --> UserToken: type=user state UserToken { Active --> Verify: Incoming request Verify --> ValidateJWT: Check JWT signature ValidateJWT --> CheckExpiry: Verify expiration CheckExpiry --> CheckRevoked: Check revocation list CheckRevoked --> Authorized: Valid token CheckRevoked --> Denied: Token invalid CheckExpiry --> Expired: Token expired Active --> Renew: Renewal request Renew --> CheckRenewal: Within renewal window? CheckRenewal --> GenerateNew: Issue new JWT CheckRenewal --> Denied: Renewal denied GenerateNew --> Active: New token active Active --> Logout: User logout Logout --> Revoked: Add to revocation list Expired --> Renew: Attempt renewal } Authorized --> TokenResponse: Success response Denied --> ErrorResponse: Error response Revoked --> [*]: Token lifecycle end note right of UserToken User tokens are JWT-based - Configurable expiration - Renewable within limits - Session tracking - Hierarchical permissions end note ``` #### **Token Format** ``` Format: {CUSTOM_PREFIX}UT-{JWT_TOKEN} Example: ABC123UT-eyJhbGciOiJSUzI1NiIs... Validation: RSA signature + claims validation Storage: Revocation list in Redis Lifetime: Configurable with renewal window ``` #### **Security Features** - **RSA-256 Signatures**: Strong cryptographic validation - **Token Revocation**: Redis blacklist with TTL - **Renewal Controls**: Limited renewal window - **Session Tracking**: Database session management --- ## Authorization Framework ### Role-Based Access Control (RBAC) The KMS implements a hierarchical permission system with role-based access control: #### **Permission Hierarchy** ``` admin ├── app.admin │ ├── app.read │ ├── app.write │ │ ├── app.create │ │ ├── app.update │ │ └── app.delete ├── token.admin │ ├── token.read │ │ └── token.verify │ ├── token.write │ │ ├── token.create │ │ └── token.revoke ├── permission.admin │ ├── permission.read │ ├── permission.write │ │ ├── permission.grant │ │ └── permission.revoke └── user.admin ├── user.read └── user.write ``` #### **Role Definitions** ```go // File: internal/auth/permissions.go:151 func (h *PermissionHierarchy) initializeDefaultRoles() { defaultRoles := []*Role{ { Name: "super_admin", Description: "Super administrator with full access", Permissions: []string{"admin"}, Metadata: map[string]string{"level": "system"}, }, { Name: "app_admin", Description: "Application administrator", Permissions: []string{"app.admin", "token.admin", "user.read"}, Metadata: map[string]string{"level": "application"}, }, // Additional roles... } } ``` #### **Permission Evaluation** ```go // File: internal/auth/permissions.go:201 func (pm *PermissionManager) HasPermission(ctx context.Context, userID, appID, permission string) (*PermissionEvaluation, error) { // Cache lookup first cacheKey := cache.CacheKey(cache.KeyPrefixPermission, fmt.Sprintf("%s:%s:%s", userID, appID, permission)) // Evaluate permission with hierarchy evaluation := pm.evaluatePermission(ctx, userID, appID, permission) // Cache result for 5 minutes pm.cacheManager.SetJSON(ctx, cacheKey, evaluation, 5*time.Minute) return evaluation, nil } ``` ### Authorization Controls #### **Resource Ownership** ```go // File: internal/authorization/rbac.go:100 func (a *AuthorizationService) AuthorizeApplicationOwnership(userID string, app *domain.Application) error { // System admins can access any application if a.isSystemAdmin(userID) { return nil } // Check if user is the owner if a.isOwner(userID, &app.Owner) { return nil } return errors.NewForbiddenError("You do not have permission to access this application") } ``` #### **Token Scoping** ```go // File: internal/services/token_service.go:400 func (s *tokenService) verifyStaticToken(ctx context.Context, req *domain.VerifyRequest, app *domain.Application) (*domain.VerifyResponse, error) { // Get granted permissions for this token permissions, err := s.grantRepo.GetGrantedPermissionScopes(ctx, domain.TokenTypeStatic, matchedToken.ID) // Check specific permissions if requested if len(req.Permissions) > 0 { permissionResults, err := s.grantRepo.HasAnyPermission(ctx, domain.TokenTypeStatic, matchedToken.ID, req.Permissions) // Validate all requested permissions are granted } } ``` --- ## Data Protection ### Encryption at Rest #### **Database Encryption** ```sql -- Sensitive data encryption in PostgreSQL CREATE TABLE applications ( app_id VARCHAR(100) PRIMARY KEY, hmac_key TEXT, -- Encrypted with application-level encryption created_at TIMESTAMP DEFAULT NOW() ); CREATE TABLE static_tokens ( id UUID PRIMARY KEY, key_hash TEXT NOT NULL, -- BCrypt hashed with cost 14 created_at TIMESTAMP DEFAULT NOW() ); ``` #### **BCrypt Hashing** ```go // File: internal/crypto/token.go:22 const BcryptCost = 14 // 2025 security standards (minimum 14) func (tg *TokenGenerator) HashToken(token string) (string, error) { hash, err := bcrypt.GenerateFromPassword([]byte(token), tg.bcryptCost) if err != nil { return "", fmt.Errorf("failed to hash token with bcrypt cost %d: %w", tg.bcryptCost, err) } return string(hash), nil } ``` ### Encryption in Transit #### **TLS Configuration** ```go // TLS 1.3 configuration for all communications tlsConfig := &tls.Config{ MinVersion: tls.VersionTLS13, CipherSuites: []uint16{ tls.TLS_AES_256_GCM_SHA384, tls.TLS_CHACHA20_POLY1305_SHA256, tls.TLS_AES_128_GCM_SHA256, }, } ``` #### **Certificate Pinning** ```go // OAuth2/SAML provider certificate pinning func (o *OAuth2Provider) validateCertificate(cert *x509.Certificate) error { expectedFingerprints := o.config.GetStringSlice("OAUTH2_CERT_FINGERPRINTS") fingerprint := sha256.Sum256(cert.Raw) fingerprintHex := hex.EncodeToString(fingerprint[:]) for _, expected := range expectedFingerprints { if fingerprintHex == expected { return nil } } return fmt.Errorf("certificate fingerprint mismatch") } ``` --- ## Security Middleware Chain ### Middleware Processing Order 1. **Request Logger**: Structured logging with security context 2. **Security Headers**: XSS, clickjacking, MIME-type protection 3. **CORS Handler**: Cross-origin request validation 4. **CSRF Protection**: Double-submit token validation 5. **Rate Limiter**: DDoS and abuse protection 6. **Authentication**: Multi-provider authentication 7. **Authorization**: Permission validation 8. **Input Validation**: Request sanitization and validation ### Rate Limiting Implementation ```go // File: internal/middleware/security.go:48 func (s *SecurityMiddleware) RateLimitMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { clientIP := s.getClientIP(r) limiter := s.getRateLimiter(clientIP) if !limiter.Allow() { s.logger.Warn("Rate limit exceeded", zap.String("client_ip", clientIP), zap.String("path", r.URL.Path)) s.trackRateLimitViolation(clientIP) http.Error(w, `{"error":"rate_limit_exceeded"}`, http.StatusTooManyRequests) return } next.ServeHTTP(w, r) }) } ``` ### Brute Force Protection ```go // File: internal/middleware/security.go:365 func (s *SecurityMiddleware) checkAndBlockIP(clientIP string) { var count int err := s.cacheManager.GetJSON(ctx, key, &count) maxFailures := s.config.GetInt("MAX_AUTH_FAILURES") if maxFailures <= 0 { maxFailures = 5 // Default } if count >= maxFailures { // Block the IP for 1 hour blockInfo := map[string]interface{}{ "blocked_at": time.Now().Unix(), "failure_count": count, "reason": "excessive_auth_failures", } s.cacheManager.SetJSON(ctx, blockKey, blockInfo, blockDuration) } } ``` --- ## Threat Model ### External Threats #### **Network-based Attacks** - **DDoS**: Rate limiting and load balancer protection - **Man-in-the-Middle**: TLS 1.3 encryption - **Packet Sniffing**: End-to-end encryption #### **Application-level Attacks** - **SQL Injection**: Parameterized queries only - **XSS**: Input validation and CSP headers - **CSRF**: Double-submit token protection - **Session Hijacking**: Secure session management #### **Authentication Attacks** - **Brute Force**: Rate limiting and account lockout - **Credential Stuffing**: Multi-factor authentication support - **Token Replay**: Timestamp validation and nonces - **JWT Attacks**: Strong cryptographic signing ### Insider Threats #### **Privileged User Abuse** - **Audit Logging**: Complete audit trail - **Role Separation**: Principle of least privilege - **Session Monitoring**: Abnormal activity detection #### **Data Exfiltration** - **Access Controls**: Resource-level authorization - **Data Classification**: Sensitive data identification - **Export Monitoring**: Large data access alerts --- ## Security Controls ### Preventive Controls #### **Authentication Controls** - Multi-factor authentication support - Strong password policies (where applicable) - Account lockout mechanisms - Session timeout enforcement #### **Authorization Controls** - Role-based access control (RBAC) - Resource-level permissions - API endpoint protection - Ownership validation #### **Data Protection Controls** - Encryption at rest (AES-256) - Encryption in transit (TLS 1.3) - Key management procedures - Secure data disposal ### Detective Controls #### **Monitoring and Logging** ```go // Comprehensive audit logging type AuditLog struct { ID uuid.UUID `json:"id"` Timestamp time.Time `json:"timestamp"` UserID string `json:"user_id"` Action string `json:"action"` ResourceType string `json:"resource_type"` ResourceID string `json:"resource_id"` IPAddress string `json:"ip_address"` UserAgent string `json:"user_agent"` Metadata map[string]interface{} `json:"metadata"` } ``` #### **Security Event Detection** - Failed authentication attempts - Privilege escalation attempts - Unusual access patterns - Token misuse detection ### Responsive Controls #### **Incident Response** - Automated threat response - Token revocation procedures - User account suspension - Alert escalation workflows #### **Recovery Controls** - Backup and restore procedures - Disaster recovery planning - Business continuity measures - Data integrity verification --- ## Compliance Framework ### OWASP Top 10 Protection 1. **Injection**: Parameterized queries, input validation 2. **Broken Authentication**: Multi-provider auth, strong crypto 3. **Sensitive Data Exposure**: Encryption, secure storage 4. **XML External Entities**: JSON-only API 5. **Broken Access Control**: RBAC, authorization checks 6. **Security Misconfiguration**: Secure defaults 7. **Cross-Site Scripting**: Input validation, CSP 8. **Insecure Deserialization**: Safe JSON handling 9. **Known Vulnerabilities**: Regular dependency updates 10. **Logging & Monitoring**: Comprehensive audit trails ### Regulatory Compliance #### **SOC 2 Type II Controls** - **Security**: Access controls, encryption, monitoring - **Availability**: High availability, disaster recovery - **Processing Integrity**: Data validation, error handling - **Confidentiality**: Data classification, access restrictions - **Privacy**: Data minimization, consent management #### **GDPR Compliance** (where applicable) - **Data Protection by Design**: Privacy-first architecture - **Consent Management**: Granular consent controls - **Right to Erasure**: Data deletion procedures - **Data Portability**: Export capabilities - **Breach Notification**: Automated incident response #### **NIST Cybersecurity Framework** - **Identify**: Asset inventory, risk assessment - **Protect**: Access controls, data security - **Detect**: Monitoring, anomaly detection - **Respond**: Incident response procedures - **Recover**: Business continuity planning ### Security Metrics #### **Key Security Indicators** - Authentication success/failure rates - Authorization denial rates - Token usage patterns - Security event frequency - Incident response times #### **Security Monitoring** ```yaml alerts: - name: "High Authentication Failure Rate" condition: "auth_failures > 10 per minute per IP" severity: "warning" - name: "Privilege Escalation Attempt" condition: "permission_denied + elevated_permission" severity: "critical" - name: "Token Abuse Detection" condition: "token_usage_anomaly" severity: "warning" ``` This security architecture document provides comprehensive coverage of the KMS security model, suitable for security audits, compliance reviews, and security team training.