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

Отметим: когда криптопроект получает запрос от регулятора, а данные разбросаны по логам и неструктурированным хранилищам — это катастрофа. Я сталкивался с кейсами, где KYC-документы хранились в open-source S3 без шифрования, а retention policy отсутствовала. Команда тратила недели на ручной сбор арх

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

Часто задаваемые вопросы

Последние работы

  • 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. Мы строим системы, которые решают эту проблему на уровне архитектуры: шифрование каждого документа уникальным ключом, автоматизированная retention, и регуляторный экспорт за секунды. Как указано в FATF Recommendation 11, срок хранения KYC-документов составляет минимум 5 лет.

Какие регуляторные требования нужно учитывать?

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

Архитектура хранилища для 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 месяцев — стандарт безопасности.

Как настроить 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 часов. В отличие от кастодиальных решений, где ключи принадлежат третьей стороне, наша архитектура даёт полный контроль и прозрачность.

Таблица сроков хранения по типам данных:

Тип данных Минимальный срок Максимальный срок Пример юрисдикции
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 недель. Стоимость рассчитывается индивидуально — зависит от количества типов данных, необходимой отказоустойчивости и требований локального регулятора. Используйте облачное хранилище с KMS — это снижает затраты на 30–50% по сравнению с локальным HSM. Мы поможем найти баланс между compliance и бюджетом.

Оцените свой проект — свяжитесь с нами. Закажите аудит compliance и получите план внедрения за 2 дня.