Статьи

💾 Шифруй, Храни, Доказуй: как работает децентрализованное хранилище файлов на Kaspa

📌 Что делает этот инструмент?

Веб-приложение kaspa-file-storage-v2 позволяет зашифровать файл, загрузить его в IPFS, а CID (уникальный хеш файла) записать в блокчейн Kaspa через WASM SDK. Таким образом, можно подтвердить факт существования файла в определённое время и обеспечить безопасное хранение в децентрализованной сети.

🔐 Основные этапы работы

1. Шифрование файла на клиенте (AES-GCM)

async function encryptFile(file) {
  const key = crypto.getRandomValues(new Uint8Array(32));
  const iv = crypto.getRandomValues(new Uint8Array(12));
  const data = await file.arrayBuffer();
  const cryptoKey = await crypto.subtle.importKey(
    'raw', key, 'AES-GCM', false, ['encrypt']
  );
  const encrypted = await crypto.subtle.encrypt(
    { name: 'AES-GCM', iv }, cryptoKey, data
  );
  return { encryptedData: encrypted, key, iv };
}

2. Загрузка зашифрованного файла в IPFS через Web3.Storage

import { Web3Storage } from 'web3.storage';

const client = new Web3Storage({ token: 'YOUR_WEB3STORAGE_API_TOKEN' });

async function uploadToIPFS(blob) {
  const file = new File([blob], 'encrypted.bin');
  const cid = await client.put([file]);
  return cid;
}

3. Запись CID в блокчейн Kaspa

import initKaspa from '@kaspa/wallet-wasm';

async function sendCIDToKaspa(cid) {
  await initKaspa();
  const { Wallet } = await import('@kaspa/wallet-wasm');
  const wallet = await Wallet.create();
  const tx = await wallet.send({
    destination: 'kaspa_address',
    amount: 0,
    data: new TextEncoder().encode(cid)
  });
  return tx.txid;
}

4. Дешифровка при загрузке

async function decryptFile(encryptedData, key, iv) {
  const cryptoKey = await crypto.subtle.importKey(
    'raw', key, 'AES-GCM', false, ['decrypt']
  );
  const decrypted = await crypto.subtle.decrypt(
    { name: 'AES-GCM', iv }, cryptoKey, encryptedData
  );
  return new Blob([decrypted]);
}

📦 Что пользователь получает

  • 🔑 Ключ шифрования (32 байта)
  • 🔁 IV (вектор инициализации)
  • 📄 CID — адрес файла в IPFS
  • 📜 TxID — ID транзакции в сети Kaspa

🎯 Применение

  • 🔒 Приватная передача документов
  • 🧾 Доказательство существования (proof-of-existence)
  • 🗂️ Web3-архивация
  • 🧠 NFT или кастомные токены, привязанные к файлу

🛠️ Вывод

Этот инструмент — прототип безопасного Web3-хранилища, соединяющий IPFS и Kaspa через клиентское шифрование и блокчейн‑подтверждение. Всё работает в браузере, без серверов, приватно и прозрачно.

🔗 Ссылки на проект

Похожие статьи

Кнопка «Наверх»