bitcoin-ecdsa
/bitcoin-ecdsa
Opisuje podpisy ECDSA na krzywej secp256k1: podpisywanie i weryfikację, deterministyczne k (RFC6979), low-s, kodowanie DER, plastyczność i podpisy odzyskiwalne.
- Autor
- claude-dev-suite ↗
- Repozytorium
- claude-dev-suite ↗
- Licencja
- MIT
- Ostatnia zmiana repozytorium
- 21.10.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 1
- Skrypty
- 0
- Komentarze HTML
- 0
- Adresy URL w SKILL.md
- 0
Brak sygnałów. Repozytorium zmienione 21.10.2026, bez odwołań do wycofanych modeli i API.
MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.
Co robi i kiedy
Opisuje podpisy ECDSA na krzywej secp256k1: podpisywanie i weryfikację, deterministyczne k (RFC6979), low-s, kodowanie DER, plastyczność i podpisy odzyskiwalne.
Wyzwalacze z opisu
Oryginalny opis (EN)
ECDSA signatures over secp256k1: sign/verify, deterministic-k (RFC6979), low-s (BIP146), DER encoding, malleability, recoverable signatures. USE WHEN: signing legacy/SegWit-v0 inputs, verifying legacy signatures, debugging "non-canonical signature" errors.
Jak działa
- Sign (private key d, message hash h)
- Verify (public key Q, message hash h, signature (r, s))
- Deterministic k (RFC6979)
- DER encoding (for tx witness)
- Strict DER (BIP66)
- Low-s (BIP146)
- Recoverable signatures
- Common errors
- See also
Podgląd SKILL.md
--- name: bitcoin-ecdsa description: | ECDSA signatures over secp256k1: sign/verify, deterministic-k (RFC6979), low-s (BIP146), DER encoding, malleability, recoverable signatures. USE WHEN: signing legacy/SegWit-v0 inputs, verifying legacy signatures, debugging "non-canonical signature" errors. allowed-tools: Read, Grep, Glob --- # ECDSA on secp256k1 ECDSA is the original Bitcoin signature scheme. Used for legacy P2PKH, P2SH, and SegWit v0 (P2WPKH/P2WSH). Replaced by Schnorr in Taproot. ## Sign (private key d, message hash h) ``` 1. Generate nonce k ∈ [1, n-1]. 2. R = k * G 3. r = R.x mod n. if r == 0, retry. 4. s = k^(-1) * (h + r*d) mod n. if s == 0, retry. 5. Apply low-s normalization: if s > n/2, s = n - s. (BIP146) 6. Output (r, s). ``` The signature is `(r, s)` ∈ Z_n × Z_n. ## Verify (public key Q, message hash h, signature (r, s)) ``` 1. Check r, s ∈ [1, n-1]. 2. w = s^(-1) mod n. 3. u1 = h * w mod n, u2 = r * w mod n. 4. P = u1*G + u2*Q. 5. Verify P.x mod n == r. ``` ## Deterministic k (RFC6979) **CRITICAL**: never reuse k. If you sign two different messages with the same k, the private key leaks. ``` d * (s1 - s2) = k * (h2 - h1) (mod n) → d = (s1 - s2)^(-1) * (h2 - h1) * k (mod n) ``` RFC6979 derives `k` deterministically from `(d, h)` via HMAC-SHA256. Bitcoin libraries default to RFC6979 — never accept "user-provided" k unless you implement extra randomness mixing (RFC6979 + extra entropy pattern, used by some hardware wallets to defeat fault attacks). ## DER encoding (for tx witness) Bitcoin Script uses ASN.1 DER: ``` 30 LL 02 LR <r> 02 LS <s> ``` Where: - `30` = SEQUENCE tag. - `LL` = total length following. - `02` = INTEGER tag. - `LR` / `LS` = length of r / s. - `<r>` / `<s>` = big-endian, with leading 0x00 byte if high bit set (DER strict). Followed by 1-byte sighash flag in tx witness: ``` <DER signature> <sighash byte> ``` Total length typically 71-72 bytes. ## Strict DER (BIP66) Bitcoin Core enforces strict DER since 2015 to defeat malleability: - No extra leading bytes. - Length fields exactly minimal. - Integers must be DER-canonical. Non-DER signatures are rejected at script execution. ## Low-s (BIP146) Both `(r, s)` and `(r, n-s)` verify against the same message and key. This is malleability. BIP146 enforces `s ≤ n/2` as standard policy (strictly enforced in Tapscript and as standard in segwit; mempool rejects but consensus historically accepts both forms). ## Recoverable signatures A 65-byte ECDSA encoding `<header byte> r s` lets verifier recover the public key from the signature alone: - `header` byte = `27 + recovery_id + (4 if compressed pubkey)`. - `recovery_id ∈ [0, 3]`: encodes which of (R, -R, R+n, -R+n) to use. Used by: - BIP137 message signing. - Lightning gossip messages (signed announcements). - Some Ethereum-bridge tools (`ecrecover`). Not used in raw tx witness (regular DER is more compact for that). ## Common errors - Reusing k → key leak. **Never** accept an external nonce. - Skipping low-s normalization → mempool rejection. - Including a high-s signature in standardness-strict mempools → tx goes nowhere. - Off-by-one in DER length encoding (the most common DER bug). - Confusing nonce `k` with private key `d` in code reviews. ## See also - [secp256k1/SKILL.md](../secp256k1/SKILL.md) - [schnorr/SKILL.md](../schnorr/SKILL.md) - [../../protocol/transactions/quick-ref/sighash.md](../../protocol/transactions/quick-ref/sighash.md)
Wersje
W bazie nie ma innych skilli o nazwie bitcoin-ecdsa.
Migawka bazy z 28.10.2026 · wersja paczki acecb3fca9b9 (skrót SHA-256 całej paczki)
Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.
Podobne skille
- 95bitcoin-libraries-secp256k1-rs
Wspiera niskopoziomową kryptografię w Rust z rust-secp256k1: ECDSA, Schnorr, ECDH, tweaking kluczy i MuSig2 (BIP327). - 100micro-ecc-integration
Pomaga zintegrować, przenieść i debugować bibliotekę micro-ecc (uECC) na mikrokontrolerze: ECDH, ECDSA, generowanie kluczy, wybór krzywej i formaty bajtów. - 100signature-malleability
Wykrywa podatności podpisów ECDSA i pułapki ecrecover: brak wymuszenia low-s, niezwiązany v, adres zerowy i ponowne użycie podpisu. - 93bitcoin-message-signing
Obsługuje podpisywanie wiadomości Bitcoin według BIP137 (tylko legacy P2PKH) i BIP322 (dowolny typ wyjścia) do dowodu własności adresu, weryfikacji wypłat i uwierzytelniania. - 100circle-webhooks
Odbiera i weryfikuje webhooki Circle Payments Network v2, w tym podpisy ECDSA (X-Circle-Signature, X-Circle-Key-Id), oraz obsługuje powiadomienia cpn.payment, cpn.transaction i cpn.rfi. - 85sodax-wallet-sdk-core-bitcoin
Podpisuje PSBT i wiadomości Bitcoin w backendzie lub skryptach Node przez BitcoinWalletProvider, bez komponentów React.