Algo Rithm of Bit·Block·Rithm

How Bitcoin Works: Bitcoin Math Playground

https://github.com/agama-point/Bit-Block-Rithm


https://www.agamapoint.com/bbr
https://www.agamapoint.com/bbr_err/
https://www.agamapoint.com/bbr_tx/

https://github.com/agama-point/the_mathematics_of_Bitcoin


Matematické principy stejné, jako má Bitcoin, jen velmi zjednodušené.
Málá čísla:

ecc251 – má jen 251 privátních klíčů, takže by se daly všechny páry (secret+pubKey naučit zpaměti)

y^2 = x^3 + 7 mod 251

Jen jedna peněženka
Max tři adresy (pro testy já1 to já2… ale stačí jen jednen)
Jen celé jednotky mincí bez fee

Centralizovaná databáze:
jen simulováno na jediném serveru
mempool i blockchain zcela pod kontrolou admina

Tato velká zjednodušení vedou k jistým omezením, ale především se dá demonstrovat obrovská zranitelnost!



těžba
klikání po cca 3-5 sec
obtížnost 1 nebo 2 nuly
max dvě transakce v bloku

registrace nového testovacího uživatele?
možná jen zamčeno pro editaci
a odemykat jen na workshop – schválně, kdy se to zvrhne

ecc251 | ess251

Modulo tělesa p = 251: Určuje „velikost hřiště“. Všechny souřadnice x a y v [x,y] musí být menší než 251.

Řád grupy n = 252: Určuje „počet kroků“, než se po křivce vrátíme na začátek (potažmo do nekonečna).

původní bod $G=(15, 13)$ na křivce vůbec neležel -> Výběrem $G=(1, 192)$ jsme zajistili, že se pohybujeme po „kolejích“ definovaných křivkou.



ECC251_skips

https://www.agamapoint.com/bbr/tests_examples/simple_ecc251ec.html

ukázka zkoumá izomorfní (strukturálně stejné) vztahy mezi eliptickými křivkami v diskrétním a spojitém prostoru. Mapováním skalárních násobení v Galoisově tělese GF(251) na reálnou Weierstrassovu projekci vizualizace odhaluje základní algebraickou symetrii, která řídí moderní kryptografické systémy. Každý krok ukazuje transformaci diskrétních mřížkových bodů na jejich geometrické protějšky pomocí rekonstrukce znaménka založené na paritě.


Vysvětlení pro středoškoláka


Shrnutí jednoduše

V experimentu se vezme eliptická křivka počítaná v „modulárním světě“ (jen čísla 0–250) a ukáže se, že její chování odpovídá hladké křivce v běžném grafu. I když jedna verze je jen sada bodů a druhá spojitá čára, jejich matematická struktura je stejná. Tato skrytá symetrie je základem moderní kryptografie.


Galoisovo těleso (finite field) je množina konečného počtu čísel, ve které lze sčítat, odčítat, násobit a dělit (kromě dělení nulou) a vždy zůstáváme uvnitř té množiny.

Typický příklad:
GF(251) znamená, že počítáme s čísly 0–250 a všechny operace děláme modulo 251.

Například v GF(251):

Když řekneme, že eliptická křivka je „na Galoisově tělese“, znamená to, že:

To je klíčové pro kryptografii – pracujeme s konečnou, přesně definovanou strukturou.


„Weierstrassova projekce“

Eliptická křivka se obvykle zapisuje ve tvaru: y2=x3+ax+by^2 = x^3 + ax + by2=x3+ax+b

Tomuto tvaru se říká Weierstrassův tvar (podle matematika Karla Weierstrasse).

„Weierstrassova projekce“ zde znamená:

V reálném prostoru vznikne hladká symetrická křivka.
V konečném tělese (např. GF(251)) vznikne jen sada oddělených bodů.



Podepisování a ověřování

1) GENEROVÁNÍ VEŘEJNÉHO KLÍČE
Funkce: scalar_mult(priv, G_POINT)
Vstup: priv = 111 G_POINT = [1,192]
Výstup: veřejný bod P = [131,193] x = 131 y = 193
Funkce: pubkey_to_addr(pub)
Vstup: pub = [131,193]
Výstup: hex veřejného klíče = 83c1

2) HASH ZPRÁVY
Funkce: ASH24(input_msg) | Vstup: input_msg = „1“ |
Výstup: h_raw = ASH24(msg) = 9366529 | hex24(…) = 0x8eec01

3) PODPIS ZPRÁVY
Funkce: signToy(priv, h_raw) | Vstup: priv = 111 | h_raw = 9366529
Výstup objektu: sig.R_point = [19,198] | sig.r = 19 sig.s = 27
Mezikroky ověřitelné ručně:
L = scalar_mult(s, G) = [230,182]
e*Pub = scalar_mult(h mod n, Pub) = [155,235]
P = R + e*Pub = [230,182]

4) OVĚŘENÍ PODPISU
Funkce: verifyToy(pub, h_raw, sig)
Vstup: pub = [131,193] | h_raw = 9366529 | sig = { r:19, s:27 }
Výstup: valid = true

Proč je podpis validní?
Podpis je validní, pokud platí:
s*G = R + e*Pub
což znamená, že podpis mohl vytvořit pouze držitel privátního klíče.
Zde: L = [230,182] | P = [230,182]
=> L == P → Podpis je VALIDNÍ ✅


hashujeme: „1“

| 0x8eec01 | signed | R=[19,198]
L = s*G: [230,182], P = R + e*PubKey: [230,182], Valid ✅


1. Příprava a výběr vstupu (UTXO)

Předtím, než se začne cokoliv podepisovat, musí systém zjistit, zda má uživatel čím platit.

2. Co se hashuje (The Message)

Aby byla transakce bezpečná, nepodepisuje se jen částka, ale celá struktura, která definuje „kdo, co a komu“. Vytvoří se řetězec msg (zpráva), který obsahuje:

Tento řetězec vypadá například takto: e875|1005|abcd|3.

Následně se na něj aplikuje hashovací funkce ASH24, která vytvoří unikátní číselný otisk (hash) této zprávy.

3. Jakým klíčem se podepisuje

K podpisu se používá soukromý klíč (myPriv), který má uživatel v session.

4. Jak se transakce odesílá

Po podepsání se na backend pošle balíček dat:

5. Jak pak ověříme (Validace)

Ačkoliv to v tomto výřezu kódu není přímo vidět (děje se to na straně příjemce nebo v historii), ověření probíhá takto:

  1. Sestavení zprávy: Vezmou se data uložená v databázi (from, txid, to, amount) a vytvoří se úplně stejný hash jako při podepisování.
  2. Veřejný klíč: Z adresy odesílatele (from_addr) se zrekonstruuje jeho veřejný klíč.
  3. Kryptografický test: Zavolá se funkce verifyToy(pubKey, hash, signature).

Princip ověření: Matematika eliptických křivek umožní ověřit, zda dvojice (r, s) odpovídá danému hashi a veřejnému klíči. Pokud se levá strana rovnice ($L = s \cdot G$) rovná pravé straně ($P = R + h \cdot Pub$), víme s jistotou, že data nebyla změněna a podpis je pravý.