bbr_tx
Celý tvůj systém ESS251 funguje jako fascinující zmenšenina reálné kryptografie, kde se bezpečnost opírá o elegantní vlastnosti eliptických křivek. Hlavním pilířem je verifikační rovnice s * G = R + e * Q, která dokazuje, že levá strana (podpis vynásobený generátorem) se geometricky shoduje s pravou stranou (součtem dočasného bodu a veřejného klíče upraveného hashem). Tato rovnost platí díky distributivitě, která dovoluje „rozbalit“ podpis a ověřit znalost soukromého tajemství, aniž by bylo nutné ho přímo odhalit. V tvém logu tento proces vrcholí shodou v konkrétním bodě křivky [140, 129], což je pro systém nezvratný důkaz o platnosti transakce.
I když je matematika křivky v pořádku, tvoje zjednodušená implementace obsahuje kritickou slabinu v podobě veřejně odvoditelného noncu k. V reálném světě musí být toto číslo naprosto náhodné, ale tvůj vzorec využívající operaci XOR 0x55 umožňuje komukoliv provést zpětný výpočet. Útočník tak může pomocí jednoduché úpravy rovnice a modulární inverze vypreparovat soukromý klíč autora přímo z jediného zachyceného podpisu. V podstatě to znamená, že tvůj kryptografický trezor je sice vyroben ze silné oceli, ale klíč k němu zůstává volně ležet pod rohožkou, což je v „dospělé“ kryptografii nepřípustné.
V modelu transakce typu P2PK pracujeme se dvěma typy skriptů, které do sebe musí zapadnout. Prvním je scriptPubKey, což je zámek tvořený veřejným bodem (v tvém hexu 83ca) a instrukcí OP_CHECKSIG, který čeká v databázi na své uplatnění. Druhým je scriptSig, což je klíč v podobě digitálního podpisu (hex 939d), který se přikládá k nové transakci. Tato data nejsou jen náhodné shluky znaků, ale reprezentují přesné souřadnice na křivce a skaláry, které v kombinaci s hashem zprávy tvoří unikátní matematický otisk.
Samotné ověření pak probíhá na principu zásobníku (stacku), kde se obě části skriptu složí za sebe do jedné fronty. Verifikátor nejdříve na pomyslnou hromádku položí podpis, na něj přiloží veřejný klíč a nakonec spustí operaci OP_CHECKSIG. Ta si oba prvky ze zásobníku vyzvedne, provede s nimi tvou eliptickou magii a pokud se body na obou stranách rovnice shodují, transakce je uznána za platnou. Je to digitální obdoba mechanického zámku, kde se zářezy na klíči musí potkat s vnitřními stavítky v naprosté shodě, aby se mechanismus otočil.
tx = {
vin: [ {
prev_tx: ID_num,
from: A hex_addr hhhh,
scriptSig: { sig: 0xrrss }
} ],
vout: [ { value: num,
scriptPubKey: { pub: B, op: OP_CHECKSIG }
} ] }
TX (TXID):
H( FROM | PREV_TXID | TO | Value )
sig = sign(H, a)
verify(sig, H, A)
lock(B) - create UTXO locked to B
---
H = hash(...)
sign(H, priv_sender)
unlock(PUB_sender)
spend(PUB_sender)
lock(PUB_recipient)
sign(H,priv) → unlock(pub) → spend(pub) → lock(pub_new)
B spends UTXO locked to B
sign(H, b)
unlock(B)
spend(B)
lock(C)
create_UTXO(C)
Bitcoin:
tx
{
version
vin_count
vin[
{
prev_txid
prev_vout
scriptSig_size
scriptSig
sequence
}
]
vout_count
vout[
{
value
scriptPubKey_size
scriptPubKey
}
]
locktime
}


