Skip to content

Security Implementation

Overview

The SUDIGITAL API implements comprehensive security measures to protect user data, trading operations, and administrative functions. This document outlines the multi-layered security approach implemented in Step 5.6.

Security Features

1. API Key Encryption

Implementation: packages/api/src/services/encryption.service.ts

  • Algorithm: AES-256-CBC with scrypt key derivation
  • Key Management: Environment-based encryption key
  • Storage: Encrypted format in database with validation
  • Security: Secure encryption/decryption with proper error handling
typescript
// Example usage
const encrypted = encryptionService.encrypt(apiKey)
const decrypted = encryptionService.decrypt(encrypted)

2. Rate Limiting

Implementation: packages/api/src/middleware/rate-limit.middleware.ts

Rate Limit Tiers

Endpoint TypeLimitWindowPurpose
Trading Operations100 requests15 minutesNormal trading activity
Exchange Keys10 requests1 hourHigh security for credentials
General API200 requests15 minutesStandard API operations
Admin Operations50 requests1 hourStrict limits for management

Features

  • User & IP-based tracking: Prevents both user and network abuse
  • Automatic cleanup: Expired records removed every 5 minutes
  • Graceful errors: Returns retry-after headers for client handling
  • Memory efficient: In-memory storage with periodic cleanup

3. Role-based Access Control

Implementation: packages/api/src/middleware/trading-auth.middleware.ts

Permission Matrix

RoleTradingAPI KeysBotsView AllExchangesAssetsMarkets
Super Admin
Admin
Moderator
Owner
Worker
Player
User

Permission Functions

typescript
// Available middleware functions
requireTradingPermission // Can trade
requireApiKeyPermission // Can manage API keys
requireBotPermission // Can create bots
requireExchangeManagement // Can manage exchanges (admin only)
requireAssetManagement // Can manage assets (admin only)
requireMarketManagement // Can manage markets (admin only)
requireOwnership() // Resource ownership validation

4. Enhanced Authentication

Implementation: Integrated across all trading routes

Features

  • JWT Validation: Secure token verification with expiration checks
  • Real-time Status: Active user validation on each request
  • Role Authorization: Permission-based access control
  • Ownership Verification: Users can only access their own resources
  • Admin Override: Admins can access all resources for management

Route Security Integration

Exchange Keys

typescript
// Security stack for exchange key management
app.use('*', exchangeKeyRateLimit) // 10 requests/hour
app.use('*', tradingAuth) // JWT + role validation
app.use('*', requireApiKeyPermission) // API key permission
app.use('/users/:userId/*', requireOwnership()) // User ownership

Trading Bots

typescript
// Security stack for bot management
app.use('*', tradingRateLimit) // 100 requests/15min
app.use('*', tradingAuth) // JWT + role validation
app.use('*', requireBotPermission) // Bot creation permission
app.use('/users/:userId/*', requireOwnership()) // User ownership

Transactions

typescript
// Security stack for transaction history
app.use('*', tradingRateLimit) // 100 requests/15min
app.use('*', tradingAuth) // JWT + role validation
app.use('/users/:userId/*', requireOwnership()) // User ownership
app.use('/bots/:botId/*', requireOwnership()) // Bot ownership

Admin Routes (Assets, Exchanges, Markets)

typescript
// Security stack for admin operations
app.use('*', generalApiRateLimit) // 200 requests/15min
app.use('*', tradingAuth) // JWT + role validation
// Method-specific admin permissions applied conditionally

Security Best Practices

Environment Configuration

bash
# Required environment variables
JWT_SECRET=your-secure-jwt-secret
ENCRYPTION_KEY=your-32-byte-encryption-key
ENCRYPTION_SALT=your-16-byte-salt

Error Handling

  • No sensitive data exposure: Error messages don't leak internal details
  • Consistent responses: Standardized error format across all endpoints
  • Rate limit feedback: Clear retry-after information for clients
  • Audit trails: Security events logged for monitoring

Database Security

  • Encrypted credentials: All API keys encrypted before storage
  • Access patterns: Role-based data access restrictions
  • Ownership validation: Users can only access their own data
  • Admin oversight: Controlled admin access with full audit trails

Usage Examples

Accessing Protected Endpoints

typescript
// Client must include JWT token
const headers = {
  Authorization: `Bearer ${userToken}`,
  'Content-Type': 'application/json',
}

// Rate limits apply automatically
const response = await fetch('/api/users/123/bots', { headers })

Error Responses

json
{
  "success": false,
  "error": "Too many requests, please try again later",
  "retryAfter": 3600
}
json
{
  "success": false,
  "error": "Permission denied"
}

Monitoring and Compliance

Security Metrics

  • Rate limit violations tracked per user/IP
  • Permission denials logged with context
  • Authentication failures monitored
  • Encryption/decryption operations audited

Compliance Features

  • Data protection: All sensitive data encrypted at rest
  • Access control: Granular permission system
  • Audit trails: Comprehensive security event logging
  • Rate limiting: Prevents abuse and ensures fair usage

Next Steps

The security implementation provides a robust foundation for:

  1. Production deployment: Ready for production trading operations
  2. Compliance audits: Comprehensive security controls in place
  3. Monitoring integration: Built-in security metrics and logging
  4. Future enhancements: Extensible permission and rate limiting system