Статьи
💾 Шифруй, Храни, Доказуй: как работает децентрализованное хранилище файлов на 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 через клиентское шифрование и блокчейн‑подтверждение. Всё работает в браузере, без серверов, приватно и прозрачно.
🔗 Ссылки на проект
- 🌐 Онлайн-демо: https://rossku.github.io/kaspa-file-storage-v2/
- 💻 Репозиторий на GitHub: https://github.com/RossKU/kaspa-file-storage-v2