Decentralizovana aplikacija (DApp) za prag-enkripciju (threshold encryption) i distribuirano dešifrovanje.
Repozitorijum: github.com/IAnt0nI/Threshold-Encryption-DApp
Sistem omogućava da se poruka enkriptuje i da se može dešifrovati samo ako najmanje M od N čuvara ključa sarađuje. Nijedan pojedinac ne poseduje ceo privatni ključ.
- Enkripcija poruke — AES-256-GCM simetričnim ključem
- Shamir-ovo deljenje tajne — simetrični ključ se deli na N delova sa pragom M (
shamirs-secret-sharing) - Zaštita delova — svaki deo se enkriptuje javnim ključem odgovarajućeg čuvara (X25519 / NaCl u browseru)
- Evidencija na lancu — pametni ugovor na Sepolia beleži metapodatke, potvrde čuvara i dostizanje praga M
- Dešifrovanje — M čuvara dešifruje svoje delove, sistem rekonstruiše ključ i dešifruje poruku
| Na Sepolia (ugovor) | Off-chain (lokalno) |
|---|---|
| ID poruke, vlasnik, prag M | Enkriptovana poruka |
| Lista čuvara | Enkriptovani delovi ključa |
| Hash sadržaja | Simetrični ključ (deljen) |
| Potvrde čuvara + vreme | — |
| Hash doprinosa (revizija) | — |
├── contracts/ThresholdVault.sol # Pametni ugovor
├── test/ThresholdVault.test.js # Unit testovi (14 testova)
├── scripts/deploy.js # Deploy skripta
├── frontend/ # React + Vite + ethers.js
│ └── src/
│ ├── crypto/thresholdCrypto.js
│ ├── web3/contract.js
│ └── App.jsx
└── hardhat.config.js
- Node.js (v18+)
- MetaMask ekstenzija u browseru
- Sepolia testni ETH — Google Cloud faucet
# Kloniraj repozitorijum
git clone https://github.com/IAnt0nI/Threshold-Encryption-DApp.git
cd Threshold-Encryption-DApp
# Backend (Hardhat)
npm.cmd install
# Frontend
cd frontend
npm.cmd installIz root foldera projekta (Threshold-Encryption-DApp):
npm.cmd testTestovi pokrivaju:
- Registraciju zaštićene poruke
- Potvrde čuvara i emitovanje događaja
- Neuspešno dešifrovanje kada učestvuje manje od M čuvara
- Uspešno dešifrovanje (prag dostignut) kada M čuvara potvrdi
- Granične slučajeve (duplikati, nevalidan prag, ne-čuvar)
-
Kopiraj
.env.exampleu.envu root folderu:SEPOLIA_RPC_URL=https://ethereum-sepolia-rpc.publicnode.com PRIVATE_KEY=tvoj_privatni_kljuc_bez_0x -
Deploy:
npm.cmd run deploy:sepolia
-
Kopiraj adresu ugovora u
frontend/.env:VITE_CONTRACT_ADDRESS=0x...
cd frontend
npm.cmd run devOtvori http://localhost:5173 u browseru sa MetaMask-om na Sepolia mreži.
Potrebna su 3 MetaMask naloga (ili 3 profila) na Sepolia mreži — npr. vlasnik + 2 čuvara, prag M=2, ukupno N=3.
- Svaki čuvar se poveže sa MetaMask-om (Sepolia)
- Tab 2. Čuvar → Generiši par ključeva za enkripciju
- Čuvari prosleđuju vlasniku red:
adresa,javni_kljuc
- Tab 1. Enkriptuj
- Unesi poruku, prag M=2, i listu čuvara (format iznad)
- Klik Enkriptuj i registruj na Sepolia
- Sačuvaj Message ID
- Svaki čuvar (min. M=2) se poveže
- Tab 2. Čuvar → unesi Message ID
- Dešifruj moj deo i potvrdi na lancu
- Proveri status — "Prag dostignut: DA" nakon M potvrda
- Tab 3. Dešifruj → unesi Message ID
- Klik Dešifruj poruku — prikazuje se originalni tekst
Ponovi Korak 3 sa samo 1 čuvarom — status će pokazati da prag nije dostignut i dešifrovanje neće uspeti.
MessageRegistered— nova poruka registrovanaGuardianConfirmed— čuvar potvrdio učešće (sa hash-om doprinosa i vremenom)ThresholdReached— prag M dostignut
- Solidity 0.8.24 — pametni ugovor
- Hardhat 2 — kompilacija, testovi, deploy
- React + Vite — frontend
- ethers.js v6 — Web3 integracija
- shamirs-secret-sharing — Shamir-ovo (M,N) deljenje tajne
- Web Crypto API — AES-GCM enkripcija poruke
- tweetnacl — enkripcija delova ključa (X25519)
- MetaMask — potpisivanje transakcija na Sepolia