Skip to content

About

DApp za prag (threshold) enkripciju i distribuirano dešifrovanje

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Threshold Encryption DApp

Decentralizovana aplikacija (DApp) za prag-enkripciju (threshold encryption) i distribuirano dešifrovanje.

Repozitorijum: github.com/IAnt0nI/Threshold-Encryption-DApp

Opis projekta

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č.

Kriptografski tok

  1. Enkripcija poruke — AES-256-GCM simetričnim ključem
  2. Shamir-ovo deljenje tajne — simetrični ključ se deli na N delova sa pragom M (shamirs-secret-sharing)
  3. Zaštita delova — svaki deo se enkriptuje javnim ključem odgovarajućeg čuvara (X25519 / NaCl u browseru)
  4. Evidencija na lancu — pametni ugovor na Sepolia beleži metapodatke, potvrde čuvara i dostizanje praga M
  5. Dešifrovanje — M čuvara dešifruje svoje delove, sistem rekonstruiše ključ i dešifruje poruku

Šta je na blockchain-u, a šta nije

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) —

Struktura projekta

├── 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

Preduslovi

Instalacija

# 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 install

Pokretanje unit testova

Iz root foldera projekta (Threshold-Encryption-DApp):

npm.cmd test

Testovi 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)

Deploy na Sepolia

  1. Kopiraj .env.example u .env u root folderu:

    SEPOLIA_RPC_URL=https://ethereum-sepolia-rpc.publicnode.com
    PRIVATE_KEY=tvoj_privatni_kljuc_bez_0x
    
  2. Deploy:

    npm.cmd run deploy:sepolia
  3. Kopiraj adresu ugovora u frontend/.env:

    VITE_CONTRACT_ADDRESS=0x...
    

Pokretanje frontenda

cd frontend
npm.cmd run dev

Otvori http://localhost:5173 u browseru sa MetaMask-om na Sepolia mreži.

End-to-end demo

Potrebna su 3 MetaMask naloga (ili 3 profila) na Sepolia mreži — npr. vlasnik + 2 čuvara, prag M=2, ukupno N=3.

Korak 1 — Čuvari generišu par ključeva

  1. Svaki čuvar se poveže sa MetaMask-om (Sepolia)
  2. Tab 2. Čuvar → Generiši par ključeva za enkripciju
  3. Čuvari prosleđuju vlasniku red: adresa,javni_kljuc

Korak 2 — Vlasnik enkriptuje i registruje

  1. Tab 1. Enkriptuj
  2. Unesi poruku, prag M=2, i listu čuvara (format iznad)
  3. Klik Enkriptuj i registruj na Sepolia
  4. Sačuvaj Message ID

Korak 3 — Čuvari potvrđuju učešće

  1. Svaki čuvar (min. M=2) se poveže
  2. Tab 2. Čuvar → unesi Message ID
  3. Dešifruj moj deo i potvrdi na lancu
  4. Proveri status — "Prag dostignut: DA" nakon M potvrda

Korak 4 — Dešifrovanje

  1. Tab 3. Dešifruj → unesi Message ID
  2. Klik Dešifruj poruku — prikazuje se originalni tekst

Demonstracija neuspeha (M-1 čuvar)

Ponovi Korak 3 sa samo 1 čuvarom — status će pokazati da prag nije dostignut i dešifrovanje neće uspeti.

Pametni ugovor — događaji

  • MessageRegistered — nova poruka registrovana
  • GuardianConfirmed — čuvar potvrdio učešće (sa hash-om doprinosa i vremenom)
  • ThresholdReached — prag M dostignut

Tehnologije

  • 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

About

DApp za prag (threshold) enkripciju i distribuirano dešifrovanje

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages