secp256k1
https://en.bitcoin.it/wiki/Secp256k1
…
p = 115792089237316195423570985008687907852837564279074904382605163141518161494337
je prvočíslo. ✔️
Používá se jako modul v eliptické křivce secp256k1,
která je definována právě nad konečným tělesem 𝔽ₚ, a proto musí být p prvočíslo, aby vzniklo těleso (ne jen okruh).
Toto p má speciální tvar:p=2256−232−977p = 2^{256} – 2^{32} – 977p=2256−232−977
Tento tvar je zvolen kvůli rychlé aritmetice modulo p (efektivní redukce). ⚙️
Modulus používaný v secp256k1
má tvarp=2256−232−977p = 2^{256} – 2^{32} – 977p=2256−232−977
To umožňuje rychlou redukci modulo p, protože každé číslo větší než 22562^{256}2256 lze přepsat pomocí identity
2256≡232+977(modp)2^{256} \equiv 2^{32} + 977 \pmod{p}2256≡232+977(modp)
To plyne přímo z definice p:p=2256−232−977=0(modp)p = 2^{256} – 2^{32} – 977 = 0 \pmod{p}p=2256−232−977=0(modp)
tedy2256=232+977(modp)2^{256} = 2^{32} + 977 \pmod{p}2256=232+977(modp)
Jak se používá při redukci
Mějme číslo větší než 256 bitů, např.x=a⋅2256+bx = a \cdot 2^{256} + bx=a⋅2256+b
pak modulo p:x≡a(232+977)+bx \equiv a(2^{32}+977) + bx≡a(232+977)+b
tedy x ≡ a ⋅ 232 + 977 a + b
→ místo dělení modulo p stačí
sčítání
posun o 32 bitů
pár násobení



Nejnovější komentáře