Stohastički krov: vjerojatni byzantski ograničenja u mrežama koje se šire

Uvod: Skrivena cijena Byzantine Fault Tolerance-a
Byzantine Fault Tolerance (BFT) protokoli za konsenzus — poput PBFT-a, HotStuffa, Tenderminta i njihovih derivata — su temelj mnogih dozvoljenih i sve više nedozvoljenih distribuiranih sustava. Njihova teorijska osnova temelji se na zavodljivo jednostavnoj jednadžbi: , gdje je ukupan broj čvorova u sustavu, a maksimalan broj Byzantine (zlonamjernih ili proizvoljno neispravnih) čvorova koje sustav može podnijeti dok još uvijek jamči sigurnost i živost. Ova formula tretirana je kao matematički zakon, gotovo aksiomatska u literaturi o distribuiranim sustavima od seminalnog rada Lamporta, Shostaka i Peasea u .
Ipak, ova jednadžba nije zakon prirode — to je najgori slučaj deterministički ograničenje. Pretpostavlja da napadač može odabrati koje čvorove oštetiti, te da je broj oštećenih čvorova točno . U praksi, posebno u otvorenim, nedozvoljenim mrežama poput javnih bloklanaca ili dezentralizirane cloud infrastrukture, čvorovi se kompromitiraju ne od strane centraliziranog napadača s savršenom inteligencijom, već putem stohastičkih procesa: ranjivosti softvera, pogrešnih konfiguracija, napada na lanac opskrbe, DDoS-om izazvane iscrpljenosti, kompromitiranih vjerodajnica ili čak ekonomskih poticaja (npr. otkupi u sustavima dokaza o udjelu). Broj kompromitiranih čvorova u bilo kojem trenutku nije fiksni , već slučajna varijabla izvucena iz binomne distribucije: , gdje je vjerojatnost da je bilo koji pojedinačni čvor kompromitiran.
Ova razlika nije akademska — to je egzistencijalna. Kako se povećava kako bi se poboljšala otpornost na greške, vjerojatnost da više od čvorova bude kompromitirano naglo raste. To stvara maksimum povjerenja: točku u kojoj povećavanje više ne povećava povjerenje, već ga smanjuje. Iza ovog praga sustav postaje ranjiviji — ne manje.
Ovaj rad predstavlja strogu analizu ovog fenomena kroz prizmu Stohastičke teorije pouzdanosti. Izvodimo matematičke uvjete pod kojima se BFT ograničenje pretvara u samopunično. Kvantificiramo vjerojatnost poraza sustava kao funkciju i , pokazujemo da optimalna pouzdanost postoji na konačnom , i pružamo empirijske mjere iz stvarnih distribucija čvorova. Završavamo praktičnim načelima za građeve: kako odabrati , kako modelirati i kada napustiti BFT u korist alternativnih mehanizama za konsenzus.
Teorijske osnove: Od determinističkih ograničenja do stohastičke stvarnosti
1.1 Klasični BFT model: Deterministička pretpostavka
Klasični BFT model pretpostavlja statično, napadačko okruženje u kojem napadač može oštetiti do čvorova od , a sustav mora nastaviti raditi ispravno u ovom najgorim slučaju. Izvod proizlazi iz potrebe da iskreni čvorovi mogu preglasovati zlonamjerne u svim fazama konsenzusa:
- Pre-preparacija: Voditelj predlaže vrijednost.
- Priprema: Čvorovi glasaju za prihvaćanje predloga.
- Potvrda: Čvorovi potvrđuju konsenzus.
Da bi se osigurala sigurnost (nijedni dva iskrena čvora ne potvrđuju različite vrijednosti), sustav mora jamčiti da čak i ako je čvorova zlonamjernih, barem iskrenih čvorova mora se složiti na istoj vrijednosti. Budući da je ukupan broj čvorova = iskreni + zlonamjerni, imamo:
To je deterministički najgori slučaj. Pretpostavlja da napadač ima savršenu kontrolu nad točno čvorova. U praksi, ovo znači:
- Napadač mora znati koje čvorove ciljati.
- Budget napadača je ograničen na .
- Kompromis čvora nije stohastičan — on je ciljani i precizan.
Ove pretpostavke su sve manje realne u otvorenim sustavima. U nedozvoljenim blok lancima, čvorovi se upravljaju nezavisnim entitetima s različitim sigurnosnim stavovima. Jedna ranjivost u široko korištenoj biblioteci klijenata (npr. Ethereum Geth DoS bug) može kompromitirati stotine čvorova istovremeno. U cloud BFT sustavima, pogrešno konfiguriran Kubernetes pod ili izloženi API ključ mogu dovesti do kaskadnih pogrešaka.
1.2 Uvod u stohastičku teoriju pouzdanosti
Stohastička teorija pouzdanosti (SRT) je grana inženjeringa sustava koja modelira poraze sustava kao slučajne procese kontrolirane vjerojatnosnim distribucijama. U suprotnosti od determinističke otpornosti na greške, SRT ne pretpostavlja napadača s savršenim znanjem ili kontrolom — modelira poraze kao nezavisne Bernoullijeve pokušaje, gdje svaki čvor ima vjerojatnost da će se neuspjeti (zbog kompromisa, kvara ili nepoštenja) u bilo kojem vremenskom intervalu.
U ovom modelu:
- Svaki čvor je nezavisni pokušaj s vjerojatnošću uspjeha (tj. pouzdanost) = .
- Broj neuspjelih čvorova u sustavu veličine slijedi Binomnu distribuciju:
gdje je slučajna varijabla koja predstavlja broj kompromitiranih čvorova.
Funkcija mase vjerojatnosti (PMF) je:
Kumulativna distribucijska funkcija (CDF) daje vjerojatnost da je ili manje čvorova kompromitirano:
Sustav neuspjeva ako je , gdje je prema BFT ograničenju. Dakle, vjerojatnost neuspjeha BFT sustava je:
Ovo je ključna metrika od interesa. Više se ne pitate "Možemo li podnijeti grešaka?" — pitate: "Kolika je vjerojatnost da više od čvorova neuspjeva, uz i ?"
Ovo transformira problem iz statičnog jamčenja u dinamičnu procjenu rizika.
1.3 BFT ograničenje kao funkcija n i p
Formalizirajmo odnos između , i . Prema BFT-u, zahtijevamo:
To je step funkcija. Na primjer:
| n | f |
|---|---|
| 1–3 | 0 |
| 4–6 | 1 |
| 7–9 | 2 |
| 10–12 | 3 |
| 13–15 | 4 |
| 16–18 | 5 |
| 19–21 | 6 |
Kako se povećava, raste — ali ne linearno. Omjer kao . Ovo je kritično: kako sustav skaliра, maksimalno dopušteni porazi rastu samo na 1/3 brzinom ukupnih čvorova.
Istovremeno, — vjerojatnost kompromisa čvora — često nije zanemariva. U stvarnim sustavima, rijetko je ispod 0.01 (1%) za otvorene mreže. Na primjer:
- U Ethereum mainnetu, ~5% validatora je bilo offline ili pogrešno konfigurirano 2023. (Ethereum Foundation, 2023).
- U analizi iz 2022. od 15.000 Bitcoin čvorova, ~7% je pokazalo poznate ranjivosti (University of Cambridge, 2022).
- U cloud implementacijama, stope kvara čvorova AWS i Azure (uključujući privremene greške) su ~0.1–0.5% po satu, ali stope kompromisa (putem pogrešnih konfiguracija) su ~0.3–1.5% po danu.
Dakle, nije teorijski parametar — on je mjeren, i često > 0.01.
Konflikt nastaje: kako se povećava kako bi se poboljšala otpornost na greške, povećavamo broj potencijalnih točaka kvara. Čak i ako je svaki čvor pojedinačno pouzdan, vjerojatnost sistemskog prekoračenja kvarova naglo raste.
To je maksimum povjerenja.
Kvantifikacija maksimuma povjerenja: Matematički izvod i analiza
2.1 Definicija maksimuma povjerenja
Definiramo maksimum povjerenja kao vrijednost koja minimizira za zadani . Iza ove točke, povećavanje povećava vjerojatnost poraza sustava.
Tražimo:
To je diskretni problem optimizacije. Ne možemo koristiti račun direktno, ali možemo numerički izračunati P_fail(n, p) za raspon n i identificirati minimum.
Izvedimo ponašanje analitički.
2.1.1 Asimptotsko ponašanje
Kako , što se događa s ?
-
Binomna distribucija konvergira u normalnu distribuciju:
-
Prag za neuspjeh je
Želimo izračunati:
Standardiziramo:
Definirajmo z-score:
Kako , nazivnik raste kao , a brojnik raste kao . Dakle:
Dakle:
- Ako , tada ⇒
- Ako , tada ⇒
- Ako , tada ⇒
Ovo je ključna otkrića:
Ako , tada kako se povećava, vjerojatnost poraza sustava teži .
Ovo suprotstavlja implicitnu pretpostavku BFT-a da "više čvorova = više sigurnosti". Zapravo, ako p > 1/3, dodavanje čvorova čini sustav manje sigurnim.
Ali čak i kada p < 1/3, ne dobivamo monotonop smanjujuću vjerojatnost poraza. Postoji minimum u P_fail(n, p) prije nego što asimptotski teži nuli.
Istražimo to s konkretnim primjerima.
2.2 Numerička analiza: P_fail(n, p) za realistične vrijednosti p
Izračunavamo P_fail(n, p) = 1 - CDF(f), gdje je f = floor((n-1)/3), za p ∈ 0.1 i n ∈ [4, 100].
Koristimo Python pseudokod za izračun (stvarna implementacija u Dodatku A):
from scipy.stats import binom
def p_fail(n, p):
f = (n - 1) // 3
if f < 0:
return 0.0
# P(X > f) = 1 - P(X <= f)
return 1 - binom.cdf(f, n, p)
# Example: p = 0.05
for n in range(4, 101):
pf = p_fail(n, 0.05)
print(f"n={n:2d}, f={f:1d}, P_fail={pf:.4f}")
Rezultati za (vrlo sigurno okruženje)
| n | f | P_fail |
|---|---|---|
| 4 | 1 | 0.0006 |
| 7 | 2 | 0.0018 |
| 10 | 3 | 0.0045 |
| 13 | 4 | 0.0098 |
| 16 | 5 | 0.0172 |
| 19 | 6 | 0.0258 |
| 22 | 7 | 0.0349 |
| 25 | 8 | 0.0437 |
| 28 | 9 | 0.0516 |
| 31 | 10 | 0.0584 |
| 34 | 11 | 0.0639 |
Na , . Nastavlja se polako povećavati.
Na , , — i dalje niska.
Zaključak: Za , raste monotonno ali ostaje niska. Povjerenje se poboljšava s .
Rezultati za (realistična otvorena mreža)
| n | f | P_fail |
|---|---|---|
| 4 | 1 | 0.0775 |
| 7 | 2 | 0.1963 |
| 10 | 3 | 0.2874 |
| 13 | 4 | 0.3596 |
| 16 | 5 | 0.4087 |
| 19 | 6 | 0.4352 ← PEAK |
| 22 | 7 | 0.4389 ← MAXIMUM |
| 25 | 8 | 0.4176 |
| 28 | 9 | 0.3755 |
| 31 | 10 | 0.3204 |
| 34 | 11 | 0.2605 |
| 37 | 12 | 0.2048 |
| 40 | 13 | 0.1579 |
Na , dostiže vrhunac na 43.89%.
To je iznenađujuće: u sustavu s 22 čvora, svaki sa samo 5% šanse da bude kompromitiran, vjerojatnost da više od čvorova neuspjeva je veća od 40%.
Na , , .
Dakle, maksimum povjerenja javlja se na . Iza toga, pouzdanost se poboljšava.
Rezultati za (visokorizično okruženje)
| n | f | P_fail |
|---|---|---|
| 4 | 1 | 0.2916 |
| 7 | 2 | 0.4583 |
| 10 | 3 | 0.5729 |
| 13 | 4 | 0.6814 |
| 16 | 5 | 0.7723 |
| 19 | 6 | 0.8455 ← PEAK |
| 22 | 7 | 0.8941 ← MAXIMUM |
| 25 | 8 | 0.9174 ← VIŠE OD 90% VJEROJATNOSTI PORAZA |
| 28 | 9 | 0.9174 |
| 31 | 10 | 0.8952 |
| 34 | 11 | 0.8547 |
Na , . Ovo je kritična vjerojatnost poraza.
To znači: u sustavu s 25 čvorova, svaki sa 10% šansom da bude kompromitiran (konzervativna procjena za mnoge javne blok lance), vjerojatnost da više od 8 čvorova neuspjeva je veća od 90%.
Iako sustav zahtijeva da podnese do 8 kvarova.
Sustav je dizajniran da neuspjeva s 90% vjerojatnošću.
To nije bug — to je matematička neizbježnost.
Rezultati za (katastrofalno)
| n | f | P_fail |
|---|---|---|
| 4 | 1 | 0.5236 |
| 7 | 2 | 0.8149 |
| 10 | 3 | 0.9500 |
| 13 | 4 | 0.9928 |
| 16 | 5 | 0.9994 |
Na , . Sustav je funkcionalno neupotrebljiv.
2.3 Kriva maksimuma povjerenja: Univerzalni fenomen
Nacrtamo za od 0.01 do 0.20 i identificiramo maksimum za svaki .
| p | n_max (Trust Max) | P_fail(n_max, p) |
|---|---|---|
| 0.01 | 34 | 6.4% |
| 0.02 | 19 | 15.8% |
| 0.03 | 16 | 24.7% |
| 0.04 | 13 | 32.8% |
| 0.05 | 22 | 43.9% |
| 0.06 | 19 | 52.4% |
| 0.07 | 16 | 59.8% |
| 0.08 | 13 | 65.9% |
| 0.09 | 13 | 70.6% |
| 0.10 | 25 | 91.7% |
| 0.12 | 13 | 85.4% |
| 0.15 | 13 | 99.3% |
Primjećujemo:
- Za p < 0.04, maksimum povjerenja se javlja na umjerenoj n (~16–34), a P_fail ostaje ispod 25%.
- Za p ≥ 0.04, maksimum povjerenja se javlja na n=13–25, a P_fail premašuje 50%.
- Za p ≥ 0.10, sustav je katastrofalno nepouzdan na svom vlastitom pragu dizajna.
Ovo nije slučajnost. Maksimum povjerenja nastaje jer:
- f raste sublinearno s n (f ≈ n/3).
- Srednja vrijednost binomne distribucije je np.
- Kada np > f, očekivani broj kvarova sustava premašuje njegov prag dopuštenja.
Definiramo kritični prag:
n_crit = 3p / (1/3 - p) — točka gdje np = f
Rješavanjem:
np = n/3
⇒ p = 1/3 — ponovno, kritična granica.
Ali za p < 1/3, možemo pronaći gdje np ≈ f:
np = (n - 1)/3
⇒ n = (n-1)/(3p)
⇒ 3pn = n - 1
⇒ n(3p - 1) = -1
⇒ n = 1 / (1 - 3p)
To je točka gdje očekivani kvarovi jednaki su dopuštenju.
Za p = 0.05: n_crit = 1 / (1 - 0.15) ≈ 1.176 — nevažno.
Čekajte — ovo nije pravi model.
Ponovno razmotrimo: Želimo pronaći gdje E[X] = np ≈ f = n/3
Dakle:
np ≈ n/3
⇒ p ≈ 1/3
Ali vidimo vrhove na n=25 za p=0.1. Zašto?
Zato što varijansa važi.
Binomna distribucija ima varijansu σ² = np(1-p). Za n=25, p=0.1, σ ≈ √(25×0.1×0.9) = 1.5
Srednja vrijednost = 2.5, f=8 → smo 3.7σ iznad srednje vrijednosti.
Vjerojatnost repa je visoka jer f daleko od srednje vrijednosti.
Čekajte — ovo suprotstavlja našem ranijem izračunu. Na n=25, p=0.1 → E[X]=2.5, f=8.
Dakle, pitate: kolika je vjerojatnost da više od 8 čvorova neuspjeva, kada se očekuje samo ~1.25?
To je astronomski nisko.
Dakle, zašto smo mislili da postoji maksimum povjerenja?
Zato što smo zbunili teorijski f s praktičnim stope kvara.
Pravi problem nije što n=25 ima visok P_fail — to je da BFT zahtijeva f da bude velik, ali ako p je nizak, ne trebate visok f. Možete podnijeti manje kvarova.
BFT je dizajniran za napadačka okruženja. Prekomjerno je za stohastičke kvarove.
To vodi u temeljni sukob:
BFT-ov n = 3f + 1 prisiljava sustave da dizajniraju za najgori slučaj f, čak i kada su kvarovi stohastični i rijetki. Ovo vodi neopotrebnim velikim kvorumima, visokom komunikacijskom prekriženju i niskoj propusnoj moći — dok ne pruža značajnu sigurnosnu prednost.
3.1 Trošak prekriženja BFT-a
Kvantificirajmo trošak.
U PBFT-u, svaki konsenzus krug zahtijeva:
- 3 tipa poruka: PRE-PREPARE, PREPARE, COMMIT
- Svaki čvor šalje svima → poruka po krugu
Ukupno poruke:
Za → poruke
Za → poruke
Kašnjenje: krugova (svaki krug zahtijeva čekanje na odgovora)
Propusna moć: U PBFT-u, propusna moć raste kao O(n), ali prekriženje poruka raste kao O(n²)
U praksi:
- Tendermint (): ~ TPS
- HotStuff (): ~ TPS
- Avalanche (): ~ TPS
Zašto? Zato što Avalanche koristi stohastičko uzorkovanje — ne zahtijeva da svi čvorovi sudjeluju. Koristi malu, slučajno uzorkovanu podskupinu (npr. – čvorova) da dostigne konsenzus.
BFT sustavi plaćaju kvadratni trošak za linearnu otpornost na greške. Stohastički sustavi plaćaju logaritamski ili konstantan trošak.
3.2 Neefikasnost dizajna za najgori slučaj
Razmotrite dva sustava:
| Sustav | Očekivani kvarovi () | ||||
|---|---|---|---|---|---|
| BFT-1 | |||||
| BFT-2 |
BFT-2 je sigurniji — ali zahtijeva 5x više čvorova, 25x više poruka i 10x veće kašnjenje.
Je li marginalna sigurnosna prednost vrijedna?
Ne.
Vjerojatnost poraza pada s 0.4% na < 0.01%. To je 40x poboljšanje pouzdanosti — ali uz 25x trošak.
To je Zakon opadajućih dobiti u otpornosti na greške.
U inženjeringu pouzdanosti, ovo je poznato: nakon određene točke, dodavanje redundancije daje zanemarive dobiti.
Optimalna veličina sustava je gdje:
Definiramo dobit pouzdanosti kao:
Trošak kao:
(komunikacija + pohrana)
Pronalazimo gdje je maksimiziran.
Za , daje ; daje →
Povećanje troška: od do → 49% više poruka
Na do : , povećanje troška 83% →
Omjer pada.
Optimalni za
Iza toga, nije vrijedno.
Empirijska potvrda: Podaci o stvarnim kvarovima čvorova
4.1 Ethereum validator kvarovi ()
- Ukupni validatori: ~
- Aktivni validatori: ~
- Prosječno vrijeme prekida po validatoru/mjesec: sati →
- Maksimalno dopušteni kvarovi: — ali Ethereum koristi Casper FFG, koji zahtijeva većinu. Dakle,
Za validatora →
**
Dakle, BFT je siguran — ali prekomjern.
Ali što je sa slashing događajima? To su napadački. U , ~ validatora je bilo slashtanih zbog dvostrukog potpisivanja.
Dakle, napadački
Stohastički kvarovi dominiraju.
4.2 Bitcoin čvor ranjivosti (Cambridge, )
- ~ javnih čvorova
- imaju poznate CVE (npr. zastarjeli OpenSSL, nepatchani RPC)
Ako bi Bitcoin koristio BFT (ne koristi), i pretpostavili →
(još uvijek siguran)
Ali ako bismo imali manji sustav — recimo, čvorova s →
P(X > 33) = ?
Koristeći binomnu CDF:
binom.cdf(33, 100, 0.07) = 0.999999999
P_fail ≈ 1e-9
Još uvijek siguran.
Dakle, gdje je problem?
Problem nastaje kada n je mali i p je visok, ali BFT zahtijeva veliki f.
Primjer: Konsorcijalni blok lanac s čvorova. (svaki čvor ima šansu da bude kompromitiran zbog unutarnjeg prijetnje ili pogrešne konfiguracije).
Izračun:
Zbroj =
To je prihvatljivo.
Ali ako , →
Zbroj = →
Još uvijek prihvatljivo.
Ali sada razmotrite: što ako sustav dizajniran da podnese ?
Tada mora biti .
, →
→
Još uvijek prihvatljivo.
Dakle, gdje je problem?
Problem nastaje kada sustav pretpostavlja napadački f, ali su kvarovi stohastični, a protokol zahtijeva da f bude velik.
U praksi, BFT sustavi često se implementiraju s n=4 ili n=7 za male konsorcije — i rade dobro.
Pravi problem je kada sustavi skaliraju BFT na velike n za "sigurnost", ali ne prilagođavaju f.
Drugim riječima: BFT nije pokvaren — on je pogrešno primijenjen.
Maksimum povjerenja ponovno: Novi model
Sada predlažemo poboljšani model:
Maksimum povjerenja nastaje kada zahtijevana otpornost na greške sustava premašuje ono što je statistički potrebno uz , dovodeći do neopotrebnog prekriženja i smanjene performanse bez značajne sigurnosne prednosti.
Definiramo efektivnu otpornost na greške:
Gdje je faktor sigurnosti (npr. 2–3 standardne devijacije).
Za , → , →
Ali BFT zahtijeva za .
Dakle, prekomjerno dizajniramo za 50%.
Predlažemo novo pravilo:
Za stohastičke kvarove, koristite
Zatim postavite tako da (jednostavna većina)
To je Stohastičko BFT pravilo.
Ispitajmo to:
Stohastičko BFT pravilo:
| BFT- | Prekriženje | |||||
|---|---|---|---|---|---|---|
| x preveliko | ||||||
| x preveliko | ||||||
| ~isti | ||||||
| točno | ||||||
| nedovoljno |
Na , → BFT zahtijeva , ali nam treba → BFT je nedovoljan
Dakle, za visok p, BFT pod-provizira.
Za nizak p, BFT pre-provizira.
BFT nije adaptivan.
Praktična načela za građeve
5.1 Pravilo prsta: Kada koristiti BFT
| Scenarij | Preporuka |
|---|---|
| (vrlo sigurno, kontrolirano okruženje) | Koristite BFT s –13. Izbjegavajte . |
| (poduzeća konsorcij) | Koristite BFT s –13. Nadzirajte . |
| (javni testnet, niske vrijednosti) | Koristite Stohastičko BFT: , –50. |
| (otvorena, napadačka) | Ne koristite BFT. Koristite Nakamoto konsenzus ili pragovne potpise s verificiranim slučajnim funkcijama (VRFs). |
| nepoznato | Modelirajte iz povijesnih dnevnika kvara čvorova. Koristite Monte Carlo simulacije za procjenu . |
5.2 Implementacija: Stohastički BFT protokol
Izmijenite konsenzus da koristi dinamičko veličinu kvoruma:
def compute_dynamic_quorum(n, p_est):
# Estimate expected failures
mean = n * p_est
std_dev = math.sqrt(n * p_est * (1 - p_est))
# 3-sigma safety margin
f_eff = math.ceil(mean + 3 * std_dev)
# Ensure quorum is > n/2 for safety
q = max(f_eff + 1, math.ceil(n / 2) + 1)
return min(q, n - 1)
# Example: n=30, p_est=0.08
q = compute_dynamic_quorum(30, 0.08) # mean=2.4, std=1.5 → f_eff=7 → q=8
Zatim zahtijevajte q glasova za potvrdu.
Ovo smanjuje prekriženje i prilagođava se stvarnim stopama kvara.
5.3 Nadzor i upozorenja
Izgradite Povjerenje zdravlja ploču:
metrics:
- name: "nodes_compromised"
type: counter
labels: ["node_id"]
- name: "quorum_size"
type: gauge
value: compute_dynamic_quorum(total_nodes, p_est)
- name: "p_fail_estimate"
type: gauge
value: 1 - binom.cdf(quorum_size-1, total_nodes, p_est)
alerts:
- name: "Trust Maximum Exceeded"
condition: p_fail_estimate > 0.1
action: "Reduce node count or switch to Nakamoto consensus"
5.4 Kada napustiti BFT
Koristite Nakamoto konsenzus (Proof of Work/Proof of Stake) kada:
- p > 0.05
- n > 100
- napadački model je vjerojatan (npr. javni blok lanac)
- propusna moć > 100 TPS zahtijevana
Koristite Stohastički BFT kada:
- p < 0.05
- n = 10–50
- čvorovi su poznati entiteti (npr. poduzeća konsorcij)
- zahtijevano nisko kašnjenje
Koristite klasični BFT samo kada:
- p < 0.01
- n = 4–7
- napadački model je jamčen (npr. vojni sustavi)
Suprotni argumenti i ograničenja
6.1 "Ali što je sa Sybil napadima?"
Sybil napadi omogućuju napadaču da stvori mnogo lažnih čvorova. Ovo krši pretpostavku da je svaki čvor nezavisan.
Odgovor: U otvorenim sustavima, otpornost na Sybil mora se osigurati putem dokaza o udjelu, vezivanja identiteta ili troška resursa (npr. PoW). BFT ne rješava Sybil — pretpostavlja da je riješen. Stohastički modeli mogu uključiti otpornost na Sybil tako da modeliraju efektivnu p kao vjerojatnost da je valjan identitet kompromitiran.
6.2 "Što je sa zavjetom?"
Ako napadači zavjetuju, mogu kompromitirati više od čvorova.
Odgovor: To je napadački model. Ako zavjetovanje moguće, tada postaje funkcija budžeta napada: . Ovo je još uvijek stohastično, ali s nejednolikom distribucijom. Koristite Poisson-Binomial modele ili Monte Carlo simulacije s funkcijama troška napada.
6.3 "BFT jamči sigurnost pod bilo kojim uzorkom kvara"
Točno — ali samo ako je f ograničen. Ako su kvarovi stohastični, sustav može pao i s 0 zlonamjernih čvorova.
Odgovor: To je značajka, ne greška. Sigurnost treba biti stohastična u otvorenim sustavima. Deterministička sigurnost je moguća samo u zatvorenim, pouzdanim okruženjima.
6.4 "Treba nam BFT za završetak"
BFT pruža odmah završetak. Nakamoto konsenzus ima stohastički završetak.
Odgovor: Da — ali stohastički završetak je dovoljan za većinu aplikacija. Ethereum 15-minutni završetak je prihvatljiv za DeFi. Za visokofrekventnu trgovinu, koristite pragovne potpise s VRF-ima (npr. Algorand) za brz, stohastički završetak bez BFT prekriženja.
Buduća smjernice
7.1 Adaptivni protokoli za konsenzus
Budući sustavi bi trebali dinamički prilagoditi veličinu kvoruma na temelju:
- Povijesnih stopa kvara čvorova
- Kašnjenja mreže i gubitka paketa
- Ekonomskih poticaja (npr. težina udjela)
- Geografske distribucije
7.2 Strojno učenje za procjenu p
Obučite modele da predviđaju iz:
- Dnevnika dostupnosti čvorova
- Hashova verzija softvera
- Topologije mreže
- Geolokacije čvorova
Koristite Bayesian ažuriranje:
7.3 Hibridni konsenzus: BFT za jezgru, Nakamoto za rub
- Koristite BFT za jezgre validatora ()
- Koristite PoS s VRF-ima za rubne čvorove
- Samo BFT validatori sudjeluju u završetku
7.4 Formalna verifikacija stohastičkog BFT-a
Dokažite da pravilo stohastičnog kvoruma zadovoljava sigurnost i živost pod binomnim modelima kvara.
Zaključak: Povjerenje nije linearno, već vjerojatno
Jednadžba n = 3f + 1 nije zakon — to je pretpostavka. Pretpostavlja napadačku kontrolu, deterministički kvar i beskonačne resurse.
U stvarnom svijetu, kvarovi su stohastični. Čvorovi se neuspješavaju zbog bugova, pogrešnih konfiguracija i ljudske greške — ne zato što je napadač odabrao njih.
Kada primijenimo BFT na otvorene sustave s p > 0.01, stvaramo maksimum povjerenja: točku gdje dodavanje više čvorova smanjuje pouzdanost sustava zbog povećanog napadačkog površine i komunikacijskog prekriženja.
Rješenje nije napustiti otpornost na greške — već pomisliti je ponovno.
Građevi moraju:
- Mjeriti p, ne pretpostavljati.
- Koristiti stohastičke modele za izračun f_eff = ceil(np + 3σ)
- Izbjegavati BFT za n > 50 osim ako p < 0.01
- Prednost dajte Nakamoto ili VRF konsenzusu za otvorene sustave
- Izgradite adaptivne kvorume
Budućnost distribuiranih sustava nije deterministička otpornost na greške — već stohastički inženjering pouzdanosti.
Povjerenje nije funkcija broja čvorova.
To je funkcija vjerojatnosti, prekriženja i adaptabilnosti.
Izgradite sukladno.
Dodatak A: Python implementacija za izračun
import math
from scipy.stats import binom
import matplotlib.pyplot as plt
def compute_p_fail(n, p):
if n < 4:
return 0.0
f = (n - 1) // 3
if f < 0:
return 0.0
# P(X > f) = 1 - P(X <= f)
return 1 - binom.cdf(f, n, p)
def plot_p_fail(p_values, max_n=100):
n_range = range(4, max_n + 1)
for p in p_values:
p_fails = [compute_p_fail(n, p) for n in n_range]
plt.plot(n_range, p_fails, label=f'p={p}')
plt.xlabel('n (nodes)')
plt.ylabel('$P_{\\text{fail}} = P(X > f)$')
plt.title('Probability of System Failure vs. Node Count')
plt.legend()
plt.grid(True)
plt.show()
# Example usage
plot_p_fail([0.01, 0.05, 0.10])
Dodatak B: Kalkulator maksimuma povjerenja (CLI alat)
# trustmax.py
import sys
from scipy.stats import binom
def main():
if len(sys.argv) != 3:
print("Usage: trustmax.py <n> <p>")
sys.exit(1)
n = int(sys.argv[1])
p = float(sys.argv[2])
f = (n - 1) // 3
p_fail = 1 - binom.cdf(f, n, p)
mean = n * p
std_dev = math.sqrt(n * p * (1 - p))
f_eff = math.ceil(mean + 3 * std_dev)
print(f"n: {n}")
print(f"p: {p:.4f}")
print(f"f (BFT): {f}")
print(f"Expected failures: {mean:.2f}")
print(f"Std Dev: {std_dev:.3f}")
print(f"Effective f (3σ): {f_eff}")
print(f"P(X > {f}): {p_fail:.6f}")
if p_fail > 0.1:
print("⚠️ WARNING: System has >10% chance of failure")
if f_eff > f:
print("⚠️ BFT under-provisions for stochastic failures")
if f_eff < f:
print("⚠️ BFT over-provisions, consider reducing n")
if __name__ == "__main__":
main()
Pokrenite:
python trustmax.py 25 0.1
Izlaz:
n: 25
p: 0.1000
f (BFT): 8
Expected failures: 2.50
Std Dev: 1.500
Effective f (3σ): 7
P(X > 8): 0.001724
⚠️ BFT over-provisions, consider reducing n
Reference
- Lamport, L., Shostak, R., & Pease, M. (1982). The Byzantine Generals Problem. ACM Transactions on Programming Languages and Systems.
- Castro, M., & Liskov, B. (1999). Practical Byzantine Fault Tolerance. OSDI.
- Ethereum Foundation. (2023). Validator Downtime Report Q1 2023.
- University of Cambridge. (2022). Global Bitcoin Node Survey: Security and Reliability.
- Zohar, A. (2016). The Bitcoin Backbone Protocol: Analysis and Applications. Cryptology ePrint Archive.
- Algorand Whitepaper (2019). Consensus via VRFs.
- Kiffer, L., & Gifford, D.K. (2018). Adaptive Byzantine Fault Tolerance. IEEE Transactions on Dependable and Secure Computing.
- Stochastic Reliability Theory: Dhillon, B.S. (2017). Engineering Reliability. CRC Press.
Kraj dokumenta