AlgoRithm of Bit·Block·(algo)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ý.


Hodiny? mod 12

Uvažujme strukturu danou množinou zbytků po dělení 12, tedy {0,…,11}, s operací +1 mod 12, což znamená, že opakovaným přičítáním jedničky procházíme všechny prvky jako na hodinách. Tato operace je ve skutečnosti běžné sčítání modulo 12, takže vzniká cyklická grupa generovaná prvkem 1.

Grupa je abelova, protože sčítání modulo 12 je komutativní.

Nejde však o Galoisovo těleso, protože těleso musí mít počet prvků roven mocnině prvočísla, zatímco 12 = 2²·3, takže v této množině nelze zavést násobení tak, aby vzniklo těleso.

Neutrálním prvkem je 0, protože pro každé a platí a+0 ≡ a (mod 12).

Inverzní prvek k prvku a je číslo 12−a (mod 12), tedy takové, které se s a sečte na 0; například k 5 je inverzní 7, protože 5+7 ≡ 0 (mod 12). Celá struktura je tedy konečná abelovská cyklická grupa řádu 12, izomorfní k ℤ₁₂, ale nikoli těleso.

Zde je shrnutí vaší úvahy v jednom uceleném bloku, který můžete snadno zkopírovat:


Analýza struktury $(\mathbb{Z}_{12}, +)$

Uvažovaná struktura na množině zbytků $\{0, 1, \dots, 11\}$ s operací sčítání modulo 12 je konečná abelovská cyklická grupa řádu 12, izomorfní k $\mathbb{Z}_{12}$. Mezi její definující vlastnosti patří:

Celkově vzato je vaše matematická argumentace správná a přesně vystihuje rozdíl mezi aditivní grupou zbytků a strukturou tělesa.

mod 17

Jelikož 17 je prvočíslo, dostáváme se do úplně jiné matematické ligy. Zatímco u 12 jsme měli jen „obyčejnou“ grupu, u 17 získáme plnohodnotné Galoisovo těleso $GF(17)$ neboli $\mathbb{Z}_{17}$.

Hlavní rozdíl je v tom, že v $\mathbb{Z}_{17}$ můžeme nejen sčítat a odčítat, ale i libovolně dělit (kromě dělení nulou). To u čísla 12 nešlo, protože tam existovali „dělitelé nuly“ (např. $3 \cdot 4 = 0$), kteří dělení znemožňovali.

Zde je shrnutí pro číslo 17 v jednom bloku pro vaše potřeby:


Analýza struktury $(\mathbb{Z}_{17}, +, \cdot)$

Množina $\{0, 1, \dots, 16\}$ s operacemi sčítání a násobení modulo 17 tvoří konečné těleso (Galoisovo těleso $GF(17)$). Tato struktura splňuje všechny axiomy tělesa, což ji činí mnohem bohatší než v případě čísla 12.

Tato struktura je základním stavebním kamenem moderní kryptografie (např. v algoritmech Diffie-Hellman nebo v eliptických křivkách), kde se často pracuje právě s tělesy o prvočíselném řádu.


Díky tomu, že je 17 prvočíslo, je „matematicky čisté“. Chtěl(a) byste vidět, jak se v takovém tělesě počítají mocniny (např. kolik je $3^{16} \pmod{17}$), což nás dovede k slavné Malé Fermatově větě?