Cada transacció de Bitcoin conté una o més signatures digitals. Aquestes signatures autoritzen la despesa de fons, però també poden revelar indirectament informació sobre com o “qui” les ha generat.

Comencem amb una breu descripció 😉

El wallet fingerprinting és la pràctica d’identificar quin moneder ha creat una transacció concreta. Les software wallets ja han estat relativament estudiats en aquest àmbit: es diferencien en com seleccionen UTXOs, ordenen inputs i outputs, estimen comissions, etc. D’altra banda, els hardware wallets han rebut gairebé cap atenció, principalment perquè es considera que tots són iguals: dispositius aïllats de signatura que simplement produeixen una signatura determinista i res més.

Doncs bé, aquesta suposició resulta ser només parcialment certa.


Què hi ha realment dins d’una signatura?

Per entendre el fingerprinting en aquests dispositius, cal entendre què conté una signatura de Bitcoin i com es codifica.

ECDSA (Legacy i SegWit)

Les signatures ECDSA produeixen un parell de valors (r,s)(r, s). El valor rr es deriva d’un nonce aleatori kk: concretament, r=(kG)xmodnr = (kG)_x \mod n.
El valor $s$ codifica l’autorització real utilitzant la clau privada: s=k−1(z+dr)modns = k^{-1}(z+dr) \mod n.

Aquests valors es codifiquen en format DER, que té una peculiaritat: si rr o ss comença amb un byte 0x80 o superior, cal afegir un byte de padding 0x00 per evitar que el valor s’interpreti com a negatiu (DER utilitza complement a dos). Això fa que una signatura pugui tenir una mida d’entre 70 i 73 bytes.

Després de BIP-62, el valor ss sempre es normalitza a la meitat inferior de la corba, limitant les signatures a 72 bytes. Però rr continua sent variable: aproximadament el 50% de les vegades, rr comença amb un byte alt i necessita aquest 0x00 extra.

Schnorr (Taproot)

Les signatures Schnorr sempre ocupen exactament 64 bytes, 32 per a la coordenada xx del punt nonce RR, i 32 per a ss. Sense codificació DER, sense longitud variable, sense mal·leabilitat.


Els vectors de fingerprinting

Tenint en compte l’anterior, què es pot utilitzar realment per fer fingerprinting d’un hardware wallet?

1. Low-r grinding

Alguns moneders iteren sobre nonces candidats fins que rr cau dins del rang baix de la corba (és a dir, que no necessita el byte 0x00 inicial). Aquest “low-r grinding” produeix signatures que sempre tenen 71 bytes en lloc dels habituals 71–72.

{% include figure.liquid path=”/assets/img/posts/hww-fp/ecdsa_len.png” alt=”Distribució de longitud de signatures ECDSA al llarg del temps” caption=”Longitud de signatures ECDSA al llarg del temps. El canvi cap a signatures de 71 bytes al voltant d’octubre de 2018 marca l’adopció del low-r grinding a Bitcoin Core v0.17.0. Font: mainnet.observer” class=”img-fluid w-75 d-block mx-auto rounded z-depth-1″ zoomable=true loading=”lazy” %}

La lògica de fingerprinting aquí és asimètrica:

  • Una signatura de 72 bytes implica que el moneder no implementa low-r grinding.
  • Una signatura de 71 bytes no ho prova — podria ser simplement un nonce afortunat.

Per tant… és un fingerprint probabilístic.

2. Tipus de SIGHASH

Cada signatura ECDSA acaba amb un byte que indica el tipus de SIGHASH, que defineix quines parts de la transacció cobreix la signatura.

Si una transacció utilitza qualsevol tipus de SIGHASH diferent de ALL, es redueix immediatament el conjunt de moneders possibles, ja que la majoria de hardware wallets només suporten SIGHASH_ALL.

3. Determinisme del nonce (RFC 6979)

RFC 6979 defineix una manera de generar el nonce kk de forma determinista a partir de la clau privada i el missatge, en lloc de fer-ho aleatòriament. Això significa que signar el mateix PSBT dues vegades amb la mateixa clau hauria de produir signatures idèntiques.

En teoria, això es podria utilitzar per fingerprinting: només cal signar la mateixa transacció dues vegades i comparar. Si les signatures són iguals, el moneder utilitza RFC 6979. Però a la pràctica, això només es pot detectar en un entorn de laboratori, ja que no es poden emetre dues transaccions conflictives a la xarxa.

Durant els nostres experiments, vam observar que alguns moneders que implementaven RFC 6979 produïen signatures diferents. Vam concloure que això estava relacionat amb la tècnica de low-R grinding i el nombre d’iteracions de RFC 6979 que realitzaven per obtenir un valor baix de rr.


Construint un entorn de proves

Un dels problemes pràctics d’aquesta recerca va ser que alguns dels moneders que volíem provar només funcionen a la mainnet de Bitcoin. Així que vam construir la nostra pròpia mainnet: una mainnet paral·lela que comparteix el mateix bloc gènesi que la xarxa real, però que s’executa de manera completament aïllada. Pots veure com replicar-la aquí 🙂

Tot i que aquest entorn no és necessari per a la creació i observació de signatures, el necessitàvem per verificar que signatures generades amb diferents sighashes eren vàlides a mainnet.

En qualsevol cas, tens tot el setup disponible a BTC-Labnet.


Resultats

Vam provar deu dispositius, tots inicialitzats amb la mateixa llavor BIP-39, tots connectats a Sparrow Wallet (o a la seva aplicació oficial quan no era compatible amb Sparrow). Per a cada moneder, vam signar el mateix PSBT múltiples vegades i vam observar les signatures.

Els resultats es van agrupar en tres categories:

Grup Comportament
RFC 6979, sense low-r Signatures deterministes, 71–72 bytes
RFC 6979 + low-r grinding Deterministes, sempre 71 bytes
Anti-exfil, sense low-r No deterministes per disseny, 71–72 bytes

Per si no coneixes l’anti-exfil.

Moneders com BitBox02 i Jade introdueixen deliberadament aleatorietat externa en la generació del nonce per prevenir atacs de canal encobert (com Dark Skippy, del qual ja n’he parlat abans). Això fa que les seves signatures siguin no deterministes i, per tant, distingibles de la resta.

Pel que fa al suport de SIGHASH, el panorama és clar. La majoria de moneders rebutgen signar qualsevol cosa que no sigui SIGHASH_ALL. Només Ledger Nano S+ i Keystone 3 Pro accepten tota la gamma de tipus SIGHASH, cosa que els fa immediatament identificables quan aquests apareixen a la pràctica.

Aquí tens el resum:

Wallet Low-r NONE SINGLE ANYONECANPAY variants Cluster
Ledger Nano S Plus (Bitcoin App 2.3.0) ✗ ✓ ✓ ✓ A
BitBox02 (Multi 9.21.0) ✗ ✗ ✗ ✗ B
Foundation Passport (2.3.5) ✗ ✗ ✗ ✗ B
Trezor Model T Safe 3 (2.8.7) ✗ ✗ ✗ ✗ B
Trezor Model T Safe 5 (2.8.7) ✗ ✗ ✗ ✗ B
Coldcard Mk4 (5.2.0) ✓ ✗ ✗ ✗ C
Blockstream Jade (1.0.35) ✓ ✗ ✗ ✗ C
KeepKey (7.9.1) ✗ ✗ ✗ ✗ B
Keystone 3 Pro (BTC 1.1.4) ✗ ✓ ✓ ✓ A
SeedSigner (0.7.0) ✓ ✗ ✗ ✗ C

Aleshores, són fingerprintables o no?

Els hardware wallets són, en general, molt més difícils de fingerprintar que els software wallets.

La principal dificultat és determinar si una signatura ha estat produïda per un hardware wallet o per un de software, cosa que és pràcticament impossible sense informació addicional. Fins i tot si saps que una transacció ha estat signada amb un hardware wallet, potser pots assignar-la a un dels tres grups identificats. Tanmateix, no hi ha cap manera fiable de distingir entre dispositius individuals dins del mateix grup.

Per tant, podem concloure que identificar individualment un hardware wallet a partir d’una signatura és essencialment inviable.

TIGERSLOT4D Link Game Online x És possible realment el fingerprinting de hardware wallets? – DISCRYPT

TIGERSLOT4D mengangkat satu pertanyaan yang jarang dibedah: apakah fingerprinting hardware wallets benar-benar mungkin, atau hanya istilah yang sering disalahpahami? Di sini, topiknya dipaparkan dengan alur yang lebih terang supaya pembaca tidak terseret asumsi.

Fokusnya ada pada cara kerja fingerprinting, jejak perangkat, dan batas-batas keamanan yang kerap luput dari perhatian. Pendekatan ini membantu Anda membaca konteksnya dengan lebih rapi, tanpa jargon yang berputar-putar.

Jika Anda ingin mengikuti pembahasan yang lebih terarah, halaman TIGERSLOT4D ini memberi sudut pandang yang relevan dan mudah diikuti. Bandingkan sendiri penjelasannya, lalu tentukan langkah yang paling masuk akal.

idgame88 idksslot idmaxwin idn goal idnpoker idola188 idola303 idoltoto idrweone idslot88 idsultan idwgacor idwinbet ikonslot indah138 indo1945 indodadu indojitu indokick indoklub indopr e indoqqku indowins indozeus indra808 indrabet indriver infototo ingat303 ini hari initogel injektor intanbet intang77 intitoto inubet88 ionbet88 ionwin88 isitogel islotbet istana4d istana78 istana88 istanajp istanaqq itucapsa izabet77 jabrix4d jagoan11 jagoan49 jagoan68 jagoan69 jagoan89 jagoan96 jagoanjp jaguar55 jaguar99 jakaslot jamet138 jandabet janjiwin japan 88 japan168 jasmin4d javatoto jawara88 jawatoto jayaliga jebret69 jempol88 jhonslot jinpoker jiwaslot jiwaspin jjponsel jjslot88 jkttogel jogerbet jointamu jojojili jojoslot joker805 jokerdex jokislot jokoslot josbet88 jospoker joswd805 jowoslot joy bola jp vegas jpbos787 jphoki88 jpsultan jslot188 jualtoto juara 11 juara 28 juara 69 juara 77 juara 88 juara 99 juara jp juara103 juara119 juara125 juara126 juara188 juara288 juara789 juara888 juara991 juaraidr juarapro juaravip judi13qq judijitu judilive judol303 judototo julislot jumbo188 junaslot junket88 juraga69 juragajp justogel kacang99 kadoslot kaisar21 kaisar49 kaisar99 kaisarwd kakekpro kali 500 kaliba38 kambing2 kampleng kampus88 kamus 4d kancah4d kangen98 kangjitu kapak123 kapal4d2 kapsul88 kapten33 kapten77 karpet88 kartel4d kartu258 kartun4d kasbon88 kasih777 kasino69 kasinogo kastil89 kasus303 kawalbet kawanbet kaya88 n kedai 69 kedaimpo kedaivip kelapa88 kenatoto kendi555 kengan4d kenototo kenzo168 kenzo188 kenzobet keposlot keradewa kerahoki keras777 ketua123 kheislot kiaislot kientoto kikototo kilat368 kilatbet kilau555 king1111 king1881 kingagen kingkong kings128 kiosgame kiplibet kitab 4d kitajitu kitoslot kiwkiw4d kkbandar kkslot77 klik4did klikbets klikbola klikdewa klikzeus klubkaya koboi168 kodealam kodehoki kodejitu kodok 77 kodokwin koinbets koinjitu kointoto kokislot kokitoto koko 138 koktogel komang4d komoslot kompak4d konglo88 kongsi4d kongsi88 konitoto konoha69 konten88 kopislot koptogel kosimatu kotakbet kotaslot kotaspin kotazeus krocobet kruitoto kucing69 kudabola kudacuan kudeta88 kukang4d kukutoto kumis168 kumpulan kunci138 kunci303 kungfu2d kuntogel kutaslot labatoto laliga77 lambe168 lampu279 landak88 landakjp langit69 langit88 langit99 lanjut88 lanlan4d lapak138 lapakvip laporbet lasvegas latolato lawan777 layar138 lazury88 lebahwin lebel138 legend78 legit805 lemon868 lenitoto level303 lexitoto lexus888 lexus898 lexusbet lgosuper lgosurga liatogel libas777 lidewa88 liga ola liga8bet ligacuan ligaemas ligahobi ligajp89 ligazoom lilin138 limpol4d limtogel linaslot linejitu link10rb link2024 linkchip linkfree linkonix linkx500 lintogel lions 88 lipototo lisboa99 litetoto livetoto lobby138 lobby338 login138 logoslot logototo lokal303 lokal777 lombawin lotrewap lotto838 lotus4d1 lotus789 lowbet88 lulutoto lunabola lunar138 lunas168 lupin168 luwakbet luxtogel luxury89 lvslot88 m303slot mabar 69 macan168 macan288 macan388 macau118 macau139 macau288 macau328 madrtoto madura88 maduslot maeltoto maentoto mager789 magetoto magic138 mahacuan mahong4d maimun88 mainliga majujitu makislot malang4d malaysia malibu99 malio805 mamahoki mamba138 mamba168 mamislot mandor4d mania 88 mania 89 mania138 mania888 maniac88 maniak88 maniakjp mantap24 mantap4d mantap89 mantra33 mantul4d mantul86 mantul88 marga 4d margo333 marina4d marislot markasjp marstoto martel4d marvel4d masbro69 maskoi88 maskot77 master38 master78 masterjp mastogel matadewa matahari matahoki matatoto matic 55 maung888 maxbet88 mayang4d mayora88 mazda777 mbstogel mecan338 megacuan megah138 megapari megaplay megasoto megaways megaxwin meitogel meja mpo mejadewa mejaemas mejaqqid mejaslot melodi69 melody69 member4d memed 4d memori88 menang28 menang33 menangjp mencet88 mentri88 menubola meongwin merci188 mercybet meriah96 mesitoto metadewa metal303 metaslot metro115 mg4dslot mi77slot miabet88 miawslot micototo midas303 mikatoto mikototo milan 69 milanwin milenium miminbet mimp ewa minitoto minor138 mintogel mirage88 mitosbet modal138 modalbet modespin mojibola mojoslot mokatoto moleslot monaslot monika77 motojudi mp08slot mplay111 mpo 0404 mpo 2888 mpo 5000 mpo 7788 mpo dana mpo judi mpo play mpo slot mpo789co mpobagus mpogopay mpoktoto mpopetir mpopusat mporeceh mporesmi mpositus mr88asia mrjudi88 mtopoker muji 138 mulia189 muliabet mulong4d multi138 multisbo muraibet mw68slot mybett88 mywin138 n78slots naga mas nagacuan nagaemas nagahoki nagajp88 nagalaut nagoya88 nalar958 namaslot naruto88 nasatoto nasgor88 nation4d natuna4d ndjamena nekototo nemospin nengah4d neraka4d nesiabet nesiawin netwin22 TIGERSLOT4D Link Game Online x És possible realment el fingerprinting de hardware wallets? – DISCRYPT