Key Management Policy
Key Management Policy
Project / Organization: ALAI Holding AS — Drop Payment App Policy Number: POL-SEC-KM-001 Version: 1.0 Date: 2026-02-23 Author:
ALAISecurityTeamArchitect Status: Draft Reviewers: CISO, CTO, DPO Next Review: 2027-02-23(annual) or after Phase 2 AWS KMS integrationClassification: Confidential — Restricted Distribution
Document History
| Version | Date | Author | Changes |
|---|---|---|---|
| 0.1 | 2026-02- | ||
| Security Architect |
Sources: legal/ikt-sikkerhetspolicy.md §6.3, docs/SECURITY-COMPLIANCE/data-encryption-policy.md, security/security-hardening-implementation.md
1. Purpose & Scope
Purpose: This policy defines the lifecycle management requirements for all cryptographic keys and secrets used by ALAI Holding AS infor the Drop payment application.app, Dropincluding processesgeneration, regulateddistribution, financialstorage, datausage, (fødselsnummer,rotation, bankrevocation, accounts,and transactiondestruction.
Regulatory AMLbasis:
- GDPR Art.
32,32 — appropriate technical measures for personal data - Personopplysningsloven (LOV-2018-06-15-38) § 28
- IKT-forskriften (FOR-2003-05-21-630) §§ 5-6
- DORA (EU) 2022/2554 Art. 9(4)(d)
,and—IKT-forskriften.encryption key management - Hvitvaskingsloven (LOV-2018-06-01-23) § 30 — KYC data protection at rest
Scope: All cryptographic keys and secrets in use across:
- Production, staging, and development environments for Drop
- AWS infrastructure (KMS, Secrets Manager, S3, App Runner)
- All
cloudemployeeinfrastructureand(AWS — EEA regions, Phase 2+) All developercontractor workstations handling Confidential or Restricted data- All third-party integrations where ALAI Holding AS holds
keys (Sumsub, Neonomics, Swan, BankID) JWT signing keys, database encryption keys, TLS certificate private keys, API authenticationkeys
Policy Owner: Alem Bašić, CISO (alem@alai.security@getdrop.no)
Operational Owner: ALAI Platform/Security team
2. Key Types & PurposesInventory
2.1 CurrentComplete MVPKey KeysTaxonomy
| Key ID | Type | Algorithm | Purpose | Data Classification |
Storage | |
|---|---|---|---|---|---|---|
drop-national-id-key |
Security |
AWS KMS (eu-north-1) | ||||
drop-db-master-key |
KEK (Database) | AES-256 XTS | PostgreSQL TDE — Phase 2 | Restricted (L4) | Security team | AWS KMS (eu-north-1) |
drop-kyc-key |
KEK (Object) | AES-256-GCM | KYC document encryption (S3 SSE-KMS) | Restricted (L4) | Security team | AWS KMS (eu-north-1) |
drop-backup-key |
KEK (Backup) | AES-256 | Database backup encryption | Restricted (L4) | Security team | AWS KMS (eu-west-1) — separate region |
JWT_SECRET |
Signing secret | HMAC-SHA-256 | JWT session token signing (HS256) | Confidential (L3) | Security team | AWS Secrets Manager |
TLS-EXT |
TLS Certificate |
ECDSA P-256 | External HTTPS (getdrop.no) | Cloudflare managed | ||
BankID-cert |
BankID |
BankID managed | ||||
SUMSUB-API-KEY |
|
2.2 Phase 2 Target Keys (AWS KMS)
| HMAC-SHA-256 | Sumsub |
AWS Secrets Manager | ||||
DEK-* |
Generated by AWS KMS GenerateDataKey |
2.2 Secrets Inventory (AWS Secrets Manager)
| Secret Name | Purpose | Rotation |
|---|---|---|
JWT_SECRET |
JWT token signing | Quarterly |
SUMSUB_SECRET_KEY |
||
BANKID_CLIENT_SECRET |
||
DATABASE_URL |
On DB credential rotation | |
SENTRY_DSN |
Sentry error monitoring | Annual |
3. Key Hierarchy
AWS KMS Root of Trust (eu-north-1 primary — Stockholm)
|
+-- drop-national-id-key (AES-256-GCM — annual rotation)
| +-- DEK-{user_id}-{timestamp}: Per-record envelope DEKs
| +-- Encrypts: foedselsnummer field in users table
| +-- Stored: base64(encryptedDEK || iv || tag || ciphertext)
|
+-- drop-db-master-key (AES-256 XTS — annual rotation)
| +-- Encrypts: PostgreSQL database at rest (Phase 2 — AWS RDS)
|
+-- drop-kyc-key (AES-256-GCM — annual rotation)
| +-- Encrypts: KYC document objects in AWS S3 (SSE-KMS)
|
+-- AWS KMS Root of Trust (eu-west-1 — SEPARATE REGION)
+-- drop-backup-key (AES-256 — annual rotation)
+-- Encrypts: All database backup files
AWS Secrets Manager (eu-north-1)
+-- JWT_SECRET (HMAC-SHA-256 — quarterly rotation)
| +-- Signs: Drop JWT session tokens (HS256 via jose ^6.1.3)
+-- SUMSUB_SECRET_KEY (API key — annual)
+-- BANKID_CLIENT_SECRET (OIDC client secret)
+-- DATABASE_URL (connection string)
Cloudflare / Let's Encrypt
+-- TLS Certificate (ECDSA P-256 — 90-day automated rotation)
+-- External HTTPS: getdrop.no
BankID Norge AS CA
+-- BankID Certificate (RSA-2048 — per BankID renewal schedule)
+-- Used for: BankID JWT signature verification (Phase 2)
4. Key Lifecycle
3.4.1 Lifecycle Overview
Generationflowchart (CSPRNGLR
/GEN[Generation] -->|"AWS KMS /CSPRNG"| HSM)DIST[Distribution]
↓DIST Distribution-->|"Runtime (encryptedAPI channelcall\nnever onlyin —env neverfiles"| plaintext)STORE[Storage]
↓STORE Storage (-->|"KMS / Secrets ManagerManager\naccess controlled"| USE[Usage]
USE -->|"Scheduled"| ROT[Rotation]
ROT -->|"New key active\noverlap period"| USE
ROT -->|"Old key retired"| ARCH[Archive / envRevoke]
varARCH —-->|"End neverof inlife"| code)DEST[Destruction]
↓REVOKE[Emergency UsageRevocation] (access-->|"Compromise controlled,detected"| allDEST
operationsUSE logged)--> ↓
Rotation (scheduled — see §3.6)
↓
Revocation (on compromise — immediate)
↓
Destruction (secure erase — verified)REVOKE
3.4.2 Generation
Entropy requirements:
- All keys MUST be generated using AWS KMS or a
cryptographically secure random number generator (CSPRNG) Minimum entropy: 256 bits for symmetric keysCSPRNG- NEVER
use: timestamps, UUIDs,use user-supplied passphrases, timestamps, UUIDs, or predictable values as keys - NEVER generate
Restricted (L4)keys in application code for Restricted data — use AWS KMSGenerateKeyAPIorGenerateDataKey
Approved key generation methods:
| Key Type | Generation Method | ||
|---|---|---|---|
| Symmetric (AES-256) KMS keys | KMS CreateKey API |
AWS KMS (FIPS 140-2 Level 3 HSMs) | |
| Envelope DEKs | KMS GenerateDataKey API |
AWS KMS | |
| JWT signing secret |
crypto.randomBytes(32).toString('hex') |
Node.js | |
ACME protocol |
|||
CA |
|||
| |||
| |||
| |||
|
CurrentGeneration MVP:environment: JWT_SECRET is generated and set as environment variable by operator at deployment. Must be cryptographically random — minimum 32 bytes.
Generation
KMS-managed environmentrule:Keyskeys protectingfor Restricted (L4) data (fødselsnummer) MUST bedata: generated within AWS KMS HSMs — key material never leaves AWS
crypto.randomBytes(32) then stored in 3.4.3 Distribution
Principles:
NeverNEVER transmit keys in plaintext over any channelNeverNEVER include keys in source code,config.envfiles committed toversion control,Git, orlogslog outputNeverNEVER send keys via email, Slack, or any messaging platformNeverAlwayshardcodefetchkeyssecrets—atfatalapplicationerrorruntimeiffromAWSJWT_SECRETnotSecretssetManagerinorproductionKMS(enforced inauth.ts)API
Distribution methods:
| Scenario | Method | Notes |
|---|---|---|
| AWS Secrets Manager |
Fatal |
|
| Envelope DEK generation | AWS KMS GenerateDataKey per encryption operation |
Key material decrypted in memory only |
| Developer |
Least |
|
| CI/CD pipeline secrets | GitHub Actions encrypted secrets ( |
Rotated per |
Current MVP protection: .env file excluded from git via .gitignore. JWT_SECRET fatal error if missing in production enforced in src/drop-app/src/lib/auth.ts.
3.4.4 Storage
Storage hierarchy (Phasefor 2 target):Drop:
Level 1 — AWS KMS HSMs (HSM-backed)FIPS ├──140-2 KEK-01:Level Master3)
+-- drop-national-id-key for(foedselsnummer encryption)
+-- drop-db-master-key (database PIITDE field— Phase 2)
+-- drop-kyc-key (KYC document S3 encryption)
+-- drop-backup-key (backup encryption ├──— KEK-02: Master key for fødselsnummer encryption (separate key)
└── Root of trust for all derived keyseu-west-1)
Level 2 — AWS Secrets Manager
├──+-- JWT_SECRET (orHMAC JWTsigning privatekey)
key+-- for RS256)
├── Database passwordSUMSUB_SECRET_KEY (PostgreSQL)API ├──key)
Sumsub+-- webhookBANKID_CLIENT_SECRET HMAC(OIDC keysecret)
├──+-- NeonomicsDATABASE_URL OAuth(connection client secret
├── Swan OAuth client secret
└── BankID client credentialsstring)
Level 3 — Application memory (ephemeral only)
├──+-- DEKsDecrypted DEK during active encryption/decryption
└──+-- Decrypted secretsJWT_SECRET during requesttoken handlingsigning/verification
Note:NOTE: NEVER persist Level 3 to disk
or logs
Level 4 — CI/CD (GitHub Actions secrets)
├── Staging environment secrets
└── Deployment credentials (scoped to specific environments)
Current MVP storage (pre-AWS):
JWT_SECRET: Environment variable — set at deployment by operatorThird-party API keys: Vaultwarden (vault.basicconsulting.no) for local dev, environment variables in deployment
Prohibited storage locations:
- Source code or config files in
version control (.envin git)Git - Application logs or
Sentryerrorerrormessages (Sentry, BetterStack) - Unencrypted database columns
- Email attachments or Slack messages
- Browser localStorage or sessionStorage
EmailContainerattachmentsimageor Slack messagesUnencrypted database columns for Restricted datalayers
3.4.5 Usage
Access control principles:
| Principle | Implementation |
|---|---|
| Least privilege | |
| Separation of duties | |
| Key purpose binding | drop-national-id-key used |
| Audit all access | |
Current enforcement: JWT_SECRET loaded at startup only, fatal if missing. NoKMS key everpolicy returnedroles:
| IAM |
Permissions | MFA |
|---|---|---|
drop-key-admin |
CreateKey, ScheduleKeyDeletion, RotateKey — NO Decrypt | YES |
drop-app-encrypt |
kms:Encrypt, kms:GenerateDataKey |
No (service account) |
drop-compliance-decrypt |
kms:Decrypt for drop-national-id-key only |
YES |
drop-key-auditor |
kms:ListKeys, kms:DescribeKey, CloudTrail read |
YES |
drop-app-runner |
kms:GenerateDataKey, kms:Decrypt (scoped per key) |
No (IAM role) |
3.4.6 Rotation Schedule
| Key |
Rotation Period | Method | Owner | Alert if Overdue | ||
|---|---|---|---|---|---|---|
drop-national-id-key |
Annual | AWS KMS automatic key | Security team | Yes — 7 days overdue | ||
drop-db-master-key |
Annual | AWS KMS automatic key rotation | Security team | |||
| Yes — 7 days overdue | ||||||
drop-kyc-key |
Annual | AWS KMS automatic key rotation | Security team | Yes — 7 days overdue | ||
drop-backup-key |
Annual | Manual + AWS KMS rotation | Security team | Yes — 7 days overdue | ||
JWT_SECRET |
Quarterly | Manual — generate new, deploy, rotate | Security team | Yes — 3 days overdue | ||
| TLS |
90 days | Automated (Cloudflare / Let's |
Platform | Yes — 14 days before expiry | ||
SUMSUB_SECRET_KEY |
Manual via Sumsub dashboard | |||||
| Security team | Yes — 7 days overdue |
JWTJWT_SECRET rotation overlap:overlap procedure:
- Generate new
JWT_SECRETremainsvalue - Deploy new secret to AWS Secrets Manager
- Rolling deploy of Drop app (picks up new secret)
- Wait for
24allhoursexistingaftersessions to expire (max 24h — JWT expiry) - All sessions issued with old secret are now invalid — users re-authenticate
- Delete old secret version from Secrets Manager
AWS KMS automatic rotation: AWS KMS generates new key activationmaterial toannually allowwhile in-flightretaining sessionsall toprior complete. Users are NOT logged out on rotation.
Rotation monitoring: Calendar remindersversions for manualdecryption rotations.of AWSexisting KMS rotation alerts for automated keys (Phase 2).ciphertext.
3.4.7 Revocation Procedures
Trigger conditions for immediate revocation:
- Known or suspected key compromise (key material logged, unauthorized access)
- Employee departure
(forwithkeyskeyinmanagementpersonalIAMknowledge)role access - System compromise where key was in use
RegulatoryDetectionrequirementoforunauthorizedlawdecryptionenforcementinorderCloudTrail Vendor security breach (Sumsub, Neonomics, Swan notify Drop)logs
Emergency JWT revocation procedure (target: < 1 hour):
Step 1: Alert Security Lead via #security-incident Slack channel
Step 2: Identify scope — which data was accessible with compromised key?
Step 3: AWS KMS: Disable compromised key (prevents new encrypt/decrypt)
Step 4: Generate replacement key via KMS CreateKey
Step 5: Re-encrypt all data protected by compromised key (Restricted first)
Step 6: Update KMS key references in application configuration
Step 7: Deploy updated configuration
Step 8: Verify all systems using new key
Step 9: Audit CloudTrail: What decrypt operations used compromised key in last 30 days?
Step 10: Assess breach notification requirement (data-breach-response-plan.md §5)
-> GDPR Art. 33 / Personopplysningsloven § 32: 72h to Datatilsynet if personal data affected
-> Finanstilsynet notification if payment data affected
Step 11: Document in incident log
Step 12: Post-mortem within 48 hours
JWT_SECRET emergency rotation (session compromise):
Step 1: Generate new JWT_SECRET immediately
Step 2: Deploy new secret to productionAWS (zero-downtime:Secrets old valid 5min overlap)Manager
Step 3: AllRolling existingdeploy Drop application — all in-flight sessions will be invalidated (revoke all in sessions table)
Step 4: UsersAll users must re-authenticate
(expected UX impact — communicate via status page)
Step 5: Audit all sessions active during compromise window
Step 6: Assess if breach notification required (see data-breach-response-plan.md)
Step 7: Document in incident log
Step 8: Post-mortem within 48 hours
Database key revocation (Phase 2):
Disable compromised key in AWS KMSRe-encrypt all data protected by compromised key with new keyPriority: Restricted (L4) data first → Confidential → Internal
Certificate revocation:
Immediately upon compromise: Revoke via CA (Let's Encrypt ACME revoke)Notify all certificate consumersOCSP response updated within 1 hour
3.4.8 Destruction
When destruction is required:
- Key
has beenrotated out and overlap period expired - Crypto-shredding: deleting user foedselsnummer by destroying envelope DEK (GDPR Art. 17)
- System decommissioned
GDPR erasure via crypto-shredding (destroy key → all data encrypted with it is unreadable)
Destruction methods:
| Key Location | Destruction Method | Verification |
|---|---|---|
| AWS KMS key | ScheduleKeyDeletion (7-30 day |
KMS + CloudTrail audit log |
| AWS Secrets Manager | DeleteSecret |
|
| ||
|
Verification:Crypto-shredding for GDPR erasure (Art. 17):
AfterWhen destruction,a confirmuser requests account deletion:
- The envelope DEK for that
decryptionuser'swithfoedselsnummerdestroyediskey fails on a test ciphertext.Destruction log:Document every key destruction inlegal/internkontroll.mdwith: key ID, date, reason, verification method, actor.4. Key Hierarchy (Phase 2 Target)AWS KMS Root (HSM-backed — EEA region) │ ├── KEK-01: General PII Encryption Master (annual rotation) │ └── DEK-PII-{ID}: Per-record PII field DEKs (quarterly rotation) │ └── Encrypts: name-as-stored, email, phone (if field-encrypted) │ ├── KEK-02: Fødselsnummer Master Key (annual rotation — SEPARATEdeleted fromKEK-01)the│database - The
DEK-FNR-{ID}: Fødselsnummer field DEKsciphertext (quarterlyfoedselsnummer)rotation)becomes│permanently└──unreadable - AML
recordretention:DEKs │ └── Encrypts: KYC documents, AML investigationtransaction records│retained├──5BACKUP-KEK:yearsBackupperEncryptionHvitvaskingslovenMaster§(annual30
5. Key Management System
MVP (Current):
JWT secret: environment variable with OS CSPRNG generationThird-party secrets: Vaultwarden (vault.basicconsulting.no) for local devNo formal KMS — acceptable for pre-production MVP
Phase 2 Target:
- Primary KMS: AWS KMS (
EEA regioneu-north-1 — Stockholm region) Backup KMS: AWS KMS (eu-west-1Ireland—orIreland)eu-central-1forFrankfurt) - only — separate region for disaster recovery
Secrets
Manager:management: AWS Secrets Managerfor application secrets Secondary:AWS KMS cross-region replication for disaster recoveryHSM:AWS CloudHSM(for KEK-02 fødselsnummer — L4 Restricted data)
drop-backup-key KMS access control (Phase 2):eu-north-1)
| ||
| ||
| ||
| ||
6. Access Controls for Key Operations
Separation of duties:
| Operation | Required |
Approval Process |
|---|---|---|
| Create new |
drop-key-admin + |
AWS IAM |
| Rotate KMS key (manual) | drop-key-admin |
Dual approval |
| Emergency key disable | Security Lead (any one) | Single — immediate incident ticket |
| Schedule key deletion | drop-key-admin + CISO |
Dual approval — minimum 7-day waiting period |
| Grant new service access | Security Lead + system owner | IAM PR review + approval |
| Rotate |
||
Current MVP: Alem Bašić (CEO/CISO) is sole key custodian. Dual approval to be implemented when team is hired (Phase 2).
7. KeyFoedselsnummer EscrowField &Encryption Recovery— Implementation Pattern
Escrow policy:Key: JWT signing drop-national-id-key and backup encryption keys must have recovery path.
Current MVP recovery:
JWT_SECRETrecovery:(AWSRe-generateKMS — separate fromCSPRNG,databaseredeploy.masterAllkey)usersStored:re-authenticate.Only IfAES-256-GCM ciphertext — never plaintext foedselsnummer in database Source:JWT_SECRETsrc/drop-app/src/lib/encrypt.tsis lost: Service restarts with new secret. All sessions invalidated. This is acceptable for MVP.
(Phase 2 escrowimplementation)
// Envelope encryption for KEKsfoedselsnummer
// Key: drop-national-id-key (AWS KMS)
// Stored: base64(encryptedDEK || iv || tag || ciphertext)
async function encryptNationalId(fodselsnummer: string): Promise<string> AWS{
KMSconst providesiv multi-region= redundancycrypto.randomBytes(12); // 96-bit random IV — nonever separatereused
escrowconst neededdek for= KMS-onlyawait keys kmsClient.generateDataKey({
AWSKeyId: KMSprocess.env.NATIONAL_ID_KEY_ARN,
deletionKeySpec: 'AES_256'
});
const cipher = crypto.createCipheriv('aes-256-gcm', dek.Plaintext, iv);
const ciphertext = Buffer.concat([cipher.update(fodselsnummer, 'utf8'), cipher.final()]);
const tag = cipher.getAuthTag();
dek.Plaintext.fill(0); // Zero DEK plaintext from memory after use
// Return: base64(encryptedDEK || iv || tag || ciphertext)
return Buffer.concat([dek.CiphertextBlob, iv, tag, ciphertext]).toString('base64');
}
Access restriction: Only the Compliance function has minimumIAM 7-day waiting period (protection against accidental deletion)
Phase 2 escrow for Backup encryption key (offline):
Key material exported encrypted from AWS KMS (if exportable) ORBackup KMS key replicationaccess toseconddrop-compliance-decryptregionrole.(recommendedApplicationforcodeKMS-nativecannotkeys)decrypt Physicalfoedselsnummerescrow:exceptEncryptedduringkeyexplicitfilecompliancestored in fireproof safe + separate secure off-site copyAccess: Requires CISO + one designated board memberVerification: Quarterly — confirm escrow holders can access
Recovery procedure (Phase 2):workflows.
CISO opens emergency key recovery request (documented)Escrow holder(s) conveneKey material combined and imported to KMSAll key recovery events logged and post-mortem required within 48 hours
8. Audit Logging for Key Operations
All key operations mustlogged bein logged:AWS CloudTrail, including:
- Key
generation:creation (actor, key ID, key type,timestamptimestamp) - Encryption/
decryption:decryption (actor, key ID,operation,context,timestamp (not data content)timestamp) - Key
rotation:rotation (actor, old keyID,version, new keyID,version,timestamptimestamp) - Key
revocation:disabling / deletion scheduling (actor, key ID, reason,timestamp Key destruction: actor, key ID, verification, timestampAccess grant/revoke: actor, grantee, key ID, permissions, timestamptimestamp)- Failed access
attempts:attempts (actor, key ID, reason,timestamptimestamp)
Log destination (Phase 2):destination: AWS CloudTrail → SIEMS3 — (immutable, append-onlyonly) Current+ MVP:BetterStack Manualaggregation
log in legal/internkontroll.md for all key operations
Log retention: 5 years (AML compliance — Hvitvaskingsloven § 30)
— key operation logs are AML-relevant
Alert on:
Off-hoursDecryptaccessoperationstobyKEKsunexpected IAM role- Failed KMS access attempts > 3 in 5 minutes
KeyOff-hoursdeletionaccessscheduledtodrop-national-id-keyordrop-kyc-keyKeyAnyrotationScheduleKeyDeletionoverdueevent (immediate alert)
9. ComplianceException MappingProcess
Exceptions not permitted for: Restricted (L4) data (foedselsnummer, KYC documents) — no exceptions to field-level encryption.
Exception request process:
- Submit request to: [email protected]
- Required: system, data classification, key being excepted, business justification, risk assessment, compensating controls, duration (max 12 months)
- Approval: CISO
- Logged in: compliance register
- Review: Quarterly — exceptions > 12 months require board-level approval
Active exceptions:
| Compensating Controls | |||
|---|---|---|---|
| JWT_SECRET |
|||
10. Emergency Procedures — Key Compromise
Immediate response checklist (execute within 1 hour of suspected compromise):
□ AlertActivate incident response — notify: Security Lead + CISO immediately:+ [email protected] / +47 40 47 42 51
□ Create incident channel: #incident-key-compromise-{DATE}CTO
□ Identify whichscope: key was compromised (JWT, database, API key)
□ Identify whatWhich data was accessible with compromised keykey?
□ RevokeAWS KMS: Disable compromised key immediately
□ For JWT_SECRET compromise: rotate immediately (seeall §3.7)sessions invalidated)
□ Generate replacement key
□ DeployRe-encrypt newall data protected by compromised key to all systems (zero-downtime rotation if possible)
□ For JWT: Revoke ALL active sessions (UPDATE sessions SET revoked=1)
□ For database key: Begin re-encryption of affectedRestricted data (Restricted first)
□ Audit logs:CloudTrail: What operationswas useddecrypted theusing compromised key in pastlast 30 days?
□ Assess breach notification requirement (see data-breach-response-plan.md §5)
-> GDPR Art. 33 / Personopplysningsloven § 32: 72h to Datatilsynet
-> Finanstilsynet notification if payment data affected
□ Document everything in incident log
□ Post-mortem within 48 hours
Re-encryption priority (if database key compromised):priority:
- Foedselsnummer (
drop-national-id-key) — Restricted (L4):,Fødselsnummer,highestAMLpriority - KYC documents (
drop-kyc-key) —IMMEDIATERestricted (L4) ConfidentialDatabase backup files (L3): Transaction data, KYC recordsdrop-backup-key) —withinRestricted4 hours(L4)InternalDatabase master (L2): Logs, session datadrop-db-master-key) —withinPhase24 hours2
Estimated impact of JWT compromise:
All active user sessions must be invalidatedAll users must re-authenticateExpected customer impact: temporary app disruptionCommunication: In-app notification + email explaining security measures taken
Approval
| Role | Name | Date | Signature |
|---|---|---|---|
| Author | 2026-02-23 | ||
| CISO | |||
| CTO | |||
| DPO ( |
|||
| Management |