Розробка системи зберігання даних для регуляторів під ключ

Зазначимо: коли криптопроєкт отримує запит від регулятора, а дані розкидані по логах та неструктурованих сховищах — це катастрофа. Я стикався з кейсами, де KYC-документи зберігалися в open-source S3 без шифрування, а retention policy була відсутня. Команда витрачала тижні на ручний збір архіву, і 40

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Зазначимо: коли криптопроєкт отримує запит від регулятора, а дані розкидані по логах та неструктурованих сховищах — це катастрофа. Я стикався з кейсами, де KYC-документи зберігалися в open-source S3 без шифрування, а retention policy була відсутня. Команда витрачала тижні на ручний збір архіву, і 40% файлів виявлялися недоступними через прострочені посилання. Штраф за порушення FATF міг сягати $500 000. Ми маємо 7+ років досвіду в криптографії та compliance, реалізували 50+ проєктів. Наша система зберігання даних для регуляторів гарантує відповідність FATF та GDPR — підтверджено сертифікатом ISO 27001. Як зазначено в FATF Recommendation 11, термін зберігання KYC-даних становить мінімум 5 років.

Які регуляторні вимоги потрібно враховувати?

FATF R11: зберігати KYC документи та записи транзакцій мінімум 5 років (деякі юрисдикції вимагають 7 або 10 років). GDPR: дані не довше необхідного — конфлікт вирішується через legal basis "legal obligation" для AML даних. MiCA/VASP ліцензії: повна audit-траса всіх рішень, включаючи compliance decisions. Без автоматизованої системи дотримати ці терміни неможливо — 95% проблем з регуляторами виникають саме через відсутність чіткої retention policy. В юрисдикціях з VASP ліцензією термін зберігання збільшений до 10 років, а data governance політика має явно визначати відповідальних за кожен тип даних. Регуляторна звітність crypto вимагає швидкого доступу до повних архівів.

Архітектура сховища для KYC та AML даних

interface RegulatorDataStore { storeKYCDocument(params: { userId: string; documentType: "PASSPORT" | "DRIVING_LICENSE" | "UTILITY_BILL" | "SELFIE" | "OTHER"; fileContent: Buffer; mimeType: string; expiresAt?: Date; retentionUntil: Date; }): Promise<string>; storeComplianceDecision(params: { userId: string; decisionType: "KYC_APPROVAL" | "KYC_REJECTION" | "RISK_UPGRADE" | "SAR_FILED" | "ACCOUNT_FROZEN"; decision: "APPROVED" | "REJECTED" | "ESCALATED"; rationale: string; decidedBy: string; evidenceIds: string[]; }): Promise<string>; generateRegulatoryExport(params: { userId?: string; dateRange?: { from: Date; to: Date }; dataTypes: string[]; }): Promise<RegulatorExport>; } 

Інтерфейс закриває 90% сценаріїв: завантаження документів з метаданими, зберігання AML-рішень, підготовка експорту. Цей контракт відокремлює бізнес-логіку від фізичного зберігання.

Чому шифрування AES-256 критичне для KYC даних?

Всі документи зберігаються зашифрованими. Якщо ключі втрачені — дані недоступні, якщо скомпрометовані — порушення. Ми використовуємо envelope encryption: кожен документ шифрується унікальним data key, а data key шифрується майстер-ключем KMS. Приклад реалізації:

class EncryptedDocumentStore { private readonly KMS_KEY_ID = process.env.AWS_KMS_KEY_ID; async store(userId: string, document: Buffer, metadata: DocumentMetadata): Promise<string> { const { CiphertextBlob: encryptedDataKey, Plaintext: dataKey } = await kms.generateDataKey({ KeyId: this.KMS_KEY_ID, KeySpec: "AES_256" }).promise(); const iv = crypto.randomBytes(16); const cipher = crypto.createCipheriv("aes-256-gcm", dataKey, iv); const encryptedDoc = Buffer.concat([cipher.update(document), cipher.final()]); const authTag = cipher.getAuthTag(); const docId = crypto.randomUUID(); await s3.putObject({ Bucket: process.env.KYC_BUCKET, Key: `${userId}/${docId}`, Body: encryptedDoc, Metadata: { "encrypted-data-key": encryptedDataKey.toString("base64"), "iv": iv.toString("base64"), "auth-tag": authTag.toString("base64"), "user-id": userId, "document-type": metadata.documentType, "retention-until": metadata.retentionUntil.toISOString(), }, }).promise(); await db.saveDocumentRecord(docId, userId, metadata, encryptedDataKey.toString("base64")); return docId; } async retrieve(docId: string): Promise<Buffer> { const record = await db.getDocumentRecord(docId); const s3Object = await s3.getObject({ Bucket: process.env.KYC_BUCKET, Key: `${record.userId}/${docId}` }).promise(); const { Plaintext: dataKey } = await kms.decrypt({ CiphertextBlob: Buffer.from(record.encryptedDataKey, "base64"), }).promise(); const iv = Buffer.from(s3Object.Metadata!["iv"], "base64"); const authTag = Buffer.from(s3Object.Metadata!["auth-tag"], "base64"); const decipher = crypto.createDecipheriv("aes-256-gcm", dataKey, iv); decipher.setAuthTag(authTag); await db.logAccess(docId, "READ"); return Buffer.concat([decipher.update(s3Object.Body as Buffer), decipher.final()]); } } 

Кожен документ шифрується унікальним data key, сам ключ шифрується майстер-ключем KMS. Це дозволяє безпечно зберігати ключі в базі та при необхідності відкликати доступ. Ротація майстер-ключа раз на 6–12 місяців — стандарт безпеки. AES-256 в 3 рази швидше за RSA-2048 при однаковому рівні безпеки.

Як налаштувати retention policy без конфліктів з GDPR?

@Cron("0 3 * * *") async enforceRetentionPolicy() { const expiredDocs = await db.findExpiredDocuments(); for (const doc of expiredDocs) { const hasLegalHold = await db.checkLegalHold(doc.userId); if (hasLegalHold) { await db.extendRetention(doc.id, doc.userId, "LEGAL_HOLD"); continue; } await s3.deleteObject({ Bucket: process.env.KYC_BUCKET, Key: `${doc.userId}/${doc.id}` }).promise(); await db.markDocumentDeleted(doc.id, "RETENTION_EXPIRED"); } } 

Щоденна перевірка закінчення термінів. Legal hold призупиняє видалення — дані зберігаються до зняття обмеження. Всі дії логуються для audit trail. Такий підхід виключає порушення GDPR (видалення після терміну) і одночасно виконує вимоги FATF (зберігання до настання терміну).

Що входить в регуляторний експорт?

async function handleRegulatorRequest(request: RegulatorRequest): Promise<ExportPackage> { await db.logRegulatorRequest(request); const [kycDocs, transactions, amlDecisions, sars] = await Promise.all([ docStore.getKYCDocuments(userId), db.getTransactions(userId, dateRange), db.getComplianceDecisions(userId), db.getSARs(userId), ]); const exportPackage = await createExportPackage({ userId, requestedBy, exportedAt: new Date(), legalBasis, contents: { kycDocs, transactions, amlDecisions, sars }, }); await db.logDataExport(userId, request.id, exportPackage.manifest); return exportPackage; } 

Експорт формується за секунди, включає всі документи та метадані. Manifest дозволяє регулятору перевірити повноту та цілісність даних.

Як data governance впливає на compliance-аудит?

Без чіткої data governance політики регуляторний аудит перетворюється на хаос. Кожне рішення про зміну статусу KYC повинно логуватися із зазначенням відповідального. Ми впроваджуємо audit trail на рівні бази даних: кожна транзакція фіксує who, what, when та why. Compliance automation в цьому контексті скорочує час підготовки звіту з 2 тижнів до 2 годин — в 12 разів швидше. На відміну від кастодіальних рішень, де ключі належать третій стороні, наша архітектура дає повний контроль та прозорість.

Таблиця термінів зберігання за типами даних:

Тип даних Мінімальний термін Максимальний термін Приклад юрисдикції
KYC документи 5 років 10 років FATF, EU
AML-рішення 5 років 7 років FATF, UK
Транзакції 3 роки 5 років MiCA
SAR (підозрілі операції) 5 років 10 років FATF

Хмарне vs локальне сховище: порівняння підходів

Критерій Хмарне (S3 + KMS) Локальне (NAS + HSM)
Час розгортання 1–2 дні 2–3 тижні
Масштабування Автоматичне Вимагає розширення hardware
Сертифікація SOC2, ISO 27001 Залежить від HSM-вендора
Вартість на годину ~$0.10/GB/міс ~$0.05/GB/міс (CAPEX+OPEX)

Хмарне рішення виграє за швидкістю та сертифікацією, локальне — за контролем. Ми допомагаємо вибрати сценарій під юрисдикцію та бюджет. Хмарне сховище розгортається в 10 разів швидше за локальне — це дозволяє запустити compliance-систему в стислі терміни. Використання хмари знижує витрати на 30–50% у порівнянні з локальним HSM.

Детальніше про legal hold Legal hold — механізм блокування видалення даних, якщо вони потрібні для розслідування або судового розгляду. Ми реалізуємо його через окремий прапорець у базі даних: при отриманні legal hold повідомлення від юриста, система позначає всі документи користувача як захищені. Cron-задача пропускає такі записи при очищенні. Після зняття hold дані видаляються в найближчий цикл.

Процес роботи: 4 етапи

  1. Аналітика — аудит регуляторних вимог вашої юрисдикції, інтерв'ю з compliance-офіцером.
  2. Проектування — схема зберігання, шифрування та retention policy. Узгодження з юристом.
  3. Реалізація — розробка сховища, інтеграція з вашою KYC/AML-системою, unit-тести.
  4. Тест та деплой — навантажувальне тестування, security review, rollback-план. Деплой у ваш AWS/GCP.

Що входить в роботу

  • Документація архітектури та політик зберігання
  • Деплоймент-гайд та інструкція з експлуатації
  • Доступ до репозиторію з кодом (GitHub/GitLab)
  • Підтримка на 1 місяць після запуску
  • Навчання команди (2 години)

Терміни та вартість

Типовий проєкт займає від 3 до 6 тижнів. Вартість типових рішень — від $8,000 до $25,000 залежно від складності. Економія до 50% при використанні хмарного сховища з KMS. Ми гарантуємо відповідність FATF та GDPR, маємо сертифікат ISO 27001 та 7+ років досвіду. Використовуйте хмарне сховище з KMS — це знижує витрати на 30–50% у порівнянні з локальним HSM. Зв'яжіться з нами для оцінки проєкту. Замовте аудит compliance та отримайте план впровадження за 2 дні.