Налаштування шифрування даних криптопроекту

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Налаштування шифрування даних криптопроекту
Середній
від 1 дня до 3 днів
Часті запитання

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

Етапи блокчейн-розробки

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

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

Настройка шифрування даних криптопроекту

Більшість Web3 проектів добре думають про безпеку смарт-контрактів і погано — про безпеку off-chain інфраструктури. Приватні ключі, API секрети, дані користувачів, seed фрази, ключі шифрування бэкапів — усе це створює attack surface, який потрібно закривати системно, а не за принципом «авось не взламають».

Управління секретами

Ніяких секретів у коді

Базове правило, яке порушується дивовижно часто. Приватний ключ, RPC endpoint з API key, Telegram bot token у .env файлі, захардкодований у репозиторії — це утечка даних. GitHub scanning (офіційний, Gitleaks, Trufflehog) регулярно знаходить подібні випадки у публічних репозиторіях.

# Gitleaks: перевірка репозиторію на утечки секретів
gitleaks detect --source . --verbose

# Або як pre-commit hook
gitleaks protect --staged

HashiCorp Vault

Для production-рівня управління секретами — HashiCorp Vault. Секрети зберігаються зашифровано, доступ — через dynamic secrets з TTL, аудит-лог кожного звернення.

# Отримання секрету через Vault CLI
vault kv get -field=private_key secret/blockchain/signer

# У приложенні: динамічний токен з коротким TTL
vault token create -policy="blockchain-signer" -ttl=1h

Для приложень у Kubernetes — Vault Agent Injector або External Secrets Operator. Секрет монтується як файл у pod, не потрапляє у environment variables (які логуються).

AWS Secrets Manager / GCP Secret Manager

Для cloud-native інфраструктури — cloud-native secret managers. Автоматична ротація, інтеграція з IAM, шифрування через KMS.

import boto3

def get_private_key():
    client = boto3.client('secretsmanager', region_name='us-east-1')
    response = client.get_secret_value(SecretId='blockchain/signer-key')
    return response['SecretString']

Ротація ключів: для підписуючих ключів — ротація через зміну адреси у контракті (multisig або governance). Для API keys — автоматична через Secrets Manager rotation lambda.

Шифрування приватних ключів

Апаратні модулі безпеки (HSM)

Для production підписуючих ключів (multisig учасники, oracle оператори, bridge оператори) — HSM. Ключ ніколи не покидає HSM у відкритому вигляді, підпись виконується всередині пристрою.

AWS CloudHSM / Google Cloud HSM: хмарні HSM з підтримкою secp256k1 (не завжди нативно — потрібна перевірка). Hashicorp Vault також може використовувати HSM як backend.

Nitro Enclaves (AWS): віртуальна ізоляція для sensitive операцій. Enclave не має постійного storage, не має network доступу крім спеціального каналу. Навіть root на хост-машині не може отримати доступ до даних у enclave.

Keystore шифрування

Для менш критичних ключів (hot wallets з лімітами) — EIP-55 keystore формат:

// ethers.js: створення зашифрованого keystore
const wallet = ethers.Wallet.createRandom();
const encrypted = await wallet.encrypt(
    process.env.KEYSTORE_PASSWORD!,
    {
        scrypt: { N: 131072, r: 8, p: 1 } // високий cost factor для production
    }
);
// Зберегти encrypted JSON, НЕ приватний ключ

// Розшифровка при старті приложення
const wallet = await ethers.Wallet.fromEncryptedJson(
    keystoreJson,
    process.env.KEYSTORE_PASSWORD!
);

Keystore пароль — також секрет. Зберігаємо у Vault або Secrets Manager, не у env файлі.

Шифрування даних користувачів

KYC та PII дані

Якщо проект зберігає KYC дані (паспорти, адреси) — вони підпадають під GDPR та аналоги. Мінімальні вимоги:

Encryption at rest: AES-256-GCM для даних у БД. У PostgreSQL — pgcrypto або column-level encryption через приложення. KMS для управління ключами шифрування.

Encryption in transit: TLS 1.3 везде. Cert pinning для мобільних приложень. HSTS для web.

Data minimization: зберігати тільки необхідне. Якщо KYC перевірено — зберігати тільки хеш документа і статус, не сам документ.

-- Шифрування чутливих полів у PostgreSQL через pgcrypto
CREATE EXTENSION IF NOT EXISTS pgcrypto;

-- Вставка зашифрованих даних
INSERT INTO kyc_data (user_id, encrypted_document_hash, verified_at)
VALUES (
    $1,
    pgp_sym_encrypt($2, current_setting('app.encryption_key')),
    NOW()
);

-- Читання
SELECT pgp_sym_decrypt(encrypted_document_hash, current_setting('app.encryption_key'))
FROM kyc_data WHERE user_id = $1;

End-to-end шифрування для messaging

Якщо протокол включає messaging (P2P комунікації, DAO discussions) — E2EE через libsodium або ECIES (Elliptic Curve Integrated Encryption Scheme) з ключами, деривованими від Ethereum приватних ключів.

XMTP протокол робить саме це — E2EE messaging между Ethereum адресами. Інтеграція через @xmtp/xmtp-js SDK.

Шифрування даних у IPFS

IPFS — публічна мережа. Усе завантажене доступно всім. Для приватних даних з IPFS зберіганням — шифрування перед завантаженням:

import { create } from 'ipfs-http-client';
import { box, randomBytes } from 'tweetnacl';
import { encodeBase64 } from 'tweetnacl-util';

async function uploadEncrypted(data: Uint8Array, recipientPublicKey: Uint8Array) {
    const nonce = randomBytes(box.nonceLength);
    const { publicKey, secretKey } = box.keyPair();

    // Шифруємо для отримувача
    const encrypted = box(data, nonce, recipientPublicKey, secretKey);

    const payload = {
        nonce: encodeBase64(nonce),
        ephemeralPublicKey: encodeBase64(publicKey),
        ciphertext: encodeBase64(encrypted)
    };

    const ipfs = create({ url: 'https://ipfs.infura.io:5001' });
    const result = await ipfs.add(JSON.stringify(payload));
    return result.cid.toString();
}

Infrastructure Security

Сітьова ізоляція

Signing ноди, bridge оператори, oracle ноди — не мають бути публічно доступні. VPC з private subnets, security groups з мінімальними дозволами.

Public subnet:  Load Balancer, API gateway
Private subnet: Application servers, RPC nodes
Isolated subnet: Signing services, key management

RPC endpoint безпека

Публічний RPC — вектор атаки. Alchemy/Infura ключі потрібно ротувати, використовувати allowlists по origin, мониторити аномальні запити.

Власна RPC нода (geth/erigon) у private subnet — краще для production. Доступ тільки через внутрішні сервіси.

Мониторинг та алертинг

OpenZeppelin Defender Sentinel: мониторинг on-chain подій, алерт при аномальних транзакціях із привільованих адрес.

Forta: децентралізований мониторинг, community detection agents для відомих атак.

Настройка займає 1-2 тижні, але дає критичну видимість для реагування на інциденти.

Повна настройка шифрування для production криптопроекту — 3-6 тижнів залежно від обсягу інфраструктури та вимог compliance.