Sotto il Cofano · Avanzato EP.07 18 min lettura

ECDH e Tweak: La Matematica degli SP

BIP352 Under the Hood con implementazione Python

BIP352 usa matematica elegante: un punto segreto condiviso tra mittente e destinatario genera indirizzi unici. Nessuna magia: solo curve ellittiche e hash deterministico. Vediamo i concetti base.
Idea L'idea semplice

Alice ha chiave privata a, chiave pubblica A. Bob ha chiave pubblica B. Alice calcola P = B + hash(a·B)·G. Solo Bob, conoscendo b, puo calcolare b·A e quindi trovare P. Nessuno altro puo.

L'operazione a·B (Alice) e b·A (Bob) danno lo stesso punto segreto perche a·b·G = b·a·G. Questo e l'ECDH.

Unicita Perche ogni indirizzo e diverso

Se Alice riusa lo stesso UTXO, genera lo stesso indirizzo. Il protocollo aggiunge input_hash che include l'outpoint della transazione: cosi ogni tx e unica anche con la stessa chiave.

Multi Piu output? Aggiungi un numero

Bob vuole dividere il pagamento? Alice introduce un contatore k: P_k = B + hash(a·B || k)·G. Bob riconosce entrambi.

Scan/Spend Due chiave, due compiti

Scan key: trova i pagamenti (pubblica, online). Spend key: spende i fondi (privata, offline). La separazione e architetturale: chi scansiona non puo spendere.

Label Provenienza con label

Bob vuole sapere chi gli ha pagato? Usa label numerate: B_m = B_spend + hash(b_scan || m)·G. Ogni m e un mittente diverso, tutti scansionabili con una sola scan key.

Codice Vedere il codice Python

L'implementazione di riferimento in Python usa secp256k1lab. Le funzioni chiave sono: somma chiavi private, normalizzazione Taproot, verifica checksum. Vedi il repository BIP352.

Trappole Casi limite

Input misti: wallet deve estrarre chiavi pubbliche da P2PKH, P2WPKH, P2SH-P2WPKH, P2TR. Non tutti gli input hanno la chiave esposta uguale.

P2SH: non valido perche nasconde la chiave fino alla spesa. BIP352 richiede chiavi visibili in input.

Riassunto Da zero a indirizzo
  1. Mittente: somma A di tutti i propri input.
  2. Calcola ECDH a·B con scan key di Bob.
  3. Applica input_hash per unicita.
  4. Deriva P = B + hash(tweak)·G.
  5. Destinatario: scansiona, trova P, spende con spend key.
Conclusione

BIP352 e una triade: ECDH per il segreto condiviso, input_hash per l'unicita, scan/spend separation per la sicurezza. Conceptualmente semplice, architetturalmente elegante.

Timeline
2024
BIP352 ratificato
Silent Payments standardizzati

Qual e la formula base di derivazione BIP352 per un singolo output?

Continua Esplorando