Bitcoin Forum
May 26, 2024, 12:10:18 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 ... 96 »
741  Local / Italiano (Italian) / Re: [INFO] +MERIT. Come funziona il sistema di premio on: January 20, 2019, 09:36:52 PM

Mi permetto un'aggiunta anche al punto b):  non è che conferiscono "il potere di", semplicemente è semplice conseguenza della ricorsività di questo meccanismo.
Infatti se tu modificassi la depth con la quale vedi i feedback, quel che hai descritto ai punti a) e b) verrebbe automaticamente esteso di 1 o 2 livelli a seconda della profondità impostata (se 3 o 4).

Oh mi ripeto: io ho capito così......   Cheesy


E se metto invece la depth a 1 depth a 0 (e non imposto una mia personale list) vedo solo i feedback dei dt1 e non dei dt2?

Esatto.

Ho appena provato, se metto la depth a 0 visualizzo tutti i feedback rilasciati direttamente dalle persone della mia trust list, se invece imposto depth a 1 attivo quel meccanismo di cui parlavo prima nel punto b).

Mi manca ancora di capire come si ottiene il primo numero che si visualizza, il cosiddetto "punteggio trust" (il secondo è il numero dei feedback negativi, il terzo il numero dei feedback positivi ricevuti).
742  Local / Italiano (Italian) / Re: [INFO] +MERIT. Come funziona il sistema di premio on: January 20, 2019, 09:09:57 PM

Mi permetto un'aggiunta anche al punto b):  non è che conferiscono "il potere di", semplicemente è semplice conseguenza della ricorsività di questo meccanismo.
Infatti se tu modificassi la depth con la quale vedi i feedback, quel che hai descritto ai punti a) e b) verrebbe automaticamente esteso di 1 o 2 livelli a seconda della profondità impostata (se 3 o 4).

Oh mi ripeto: io ho capito così......   Cheesy


E se metto invece la depth a 1 (e non imposto una mia personale list) vedo solo i feedback rilasciati dai dt1 e non quelli dei dt2?

Comunque è strano tutto questo movimento per entrare in dt1 se poi la visualizzazione dei feedback rimane sempre legata principalmente alla scelta di ciascun utente.

Impostando la depth a 1 di fatto tolgo il potere a chiunque sia nella mia trust list di rendere i feedback rilasciati dagli utenti della propria trust list visibili a me, e questo mi basta. In questo modo scelgo direttamente io i rilasciatori di feedback affidabili e non delego almeno questo compito ad altri.

Comunque grazie per la risposta.
743  Local / Italiano (Italian) / Re: [INFO] +MERIT. Come funziona il sistema di premio on: January 20, 2019, 07:33:53 PM
Sicuramente sarà scritto da diverse parti, ma penso che potrebbe essere comunque utile anche a molti altri:

le trust list servono per decidere attraverso quali feedback vedere i punteggi degli altri utenti del forum.

Se non ci fossero le trust list, tutti vedremmo tutti i feedback dati da tutti e quindi ogni utente avrebbe lo stesso punteggio agli occhi di tutti.

Per evitare però di vedere i risultati distorti da feedback rilasciati dal primo che passa è stato introdotto questo sistema che ci consente di scegliere di quali feedback ci possiamo fidare (perchè rilasciati da utenti di cui ci fidiamo).

Se uno non si crea la propria trust list aveva (ha ancora?) di default la "default list", detta anche dt1.
Ciascun utente di questa lista, scelta prima da Theymos e ora non più, non solo rilascia i feedback che si vedono di default, ma rende visibili agli altri anche i feedback rilasciati dagli utenti inseriti nella sua personale trust list. L'insieme di questi utenti direttamente indicati dagli utenti dt1 come "affidabili rilasciatori di feedback" fanno parte della cosiddetta dt2.

Quindi in sostanza il potere dei dt1 è duplice, in quanto

a) i feedback che loro stessi rilasciano in prima persona sono visibili a tutti
b) possono conferire il potere di rilasciare feedback visibili a tutti a persone di propria fiducia

I dt2 invece hanno solo la facoltà a) e non quella b).


I miei dubbi sono:

1) ma se ognuno usasse una lista personale e non la default list, a cosa servirebbero la dt1 e la dt2? Probabilmente non ho capito bene il meccanismo

2) rilasciare un feedback positivo a un utente non equivale a inserirlo nella propria trust list, ovvero anche se ho fatto uno scambio positivo con lui posso decidere che non voglio fidarmi dei feedback che lui rilascia (non li voglio vedere conteggiati) quando guardo al punteggio trust degli altri utenti del forum?
744  Local / Italiano (Italian) / Re: BITCOIN PUMP! on: January 20, 2019, 06:39:28 PM

-  sul 4) la noto solo io la diminuzione degli interventi qui nel forum? pensate che possano essere solo conseguenza di un minor interesse verso campagne firma e/o dell'introduzione del sistema dei merit che disincentiva la scrittura di inutilità ?  io non penso sia solo quello....


3 possibili spiegazioni:

1) si è già molto discusso di tanti vari aspetti legati a bitcoin, vi sono molte più informazioni disponibili, quindi penso che la maggior parte delle persone legge solo e/o trova le risposte anche da altre parti fuori dal forum.
Bitcoin è sicuramente un sistema affascinante, ma non per questo si può stare qui a parlarne all'infinito!

2) in parte legato a quello che ho scritto sopra, si rende sempre meno necessario da una parte fare richieste qui sul forum perchè le informazioni disponibili sono maggiori (una volta il maggior volume era legato proprio a richiesta di informazioni di base), dall'altra parte certi servizi sono ormai esterni (compravendita bitcoin)

3) in diversi thread diventa sempre più difficile portare qualcosa di nuovo e che possa essere interessante/ non ancora detto: per esempio scrivere anche in questo thread sul prezzo del bitcoin se non segui molto le varie dinamiche che girano intorno al mondo bitcoin (come fa Plutosky ad esempio) diventa veramente inutile, nel senso che si rischia solo di aumentare il rumore di fondo senza aggiungere troppo in termini di informazioni utili. Alla fine pochi scrivono (e di solito scrivono cose molto interessanti) e molti leggono (in silenzio).


745  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 20, 2019, 08:53:10 AM
Preferisco inserire in questo post dedicato tutte le seguenti considerazioni, che si possono considerare un ulteriore approfondimento di questa sezione che ho comunque riveduto e ampliato a sua volta.

In questo post aggiungo qualche dettaglio anche pratico di calcolo sugli elementi di Fp, il campo delle coordinate che può essere visto (come tutti i campi finiti) sia come gruppo additivo che come gruppo moltiplicativo (tolto lo zero).


Poichè nel nostro caso Fp = Zp (campo delle classi dei resti della divisione degli interi per p), si ha che:

a) Fp è un gruppo ciclico di ordine p rispetto all'operazione di addizione
b) Fp - {0} è un gruppo ciclico di ordine p -1 rispetto all'operazione di moltiplicazione (si può dimostrare)

quindi per

a) si ha che a+a+a+a+a+a... = a*p = 0 mod p per ogni a di Fp
b) si ha che a*a*a*a*a ........... = a^(p-1) = 1 mod p per ogni a di Fp - {0}

La seconda relazione è quella che ci interessa.

Già Fermat aveva dimostrato un risultato pressochè equivalente:

per ogni numero primo p è sempre vera la relazione a^p - a = multiplo di k, ovvero a^p = a mod p  (piccolo teorema di Fermat)
 


1) Visto che il campo finito Fp è un gruppo ciclico (rispetto all'operazione di moltiplicazione) di ordine p - 1, si può utilizzare la relazione precedente per calcolare l'inverso di un elemento a diverso da 1:

a^(p-1) = 1   mod p   (a^(ordine) = 1)

quindi

a^(p-1) * a^(-1) = 1 * a^(-1) =  a^(-1) mod p

Quindi a^(p-2) = a^(-1) mod p

Ad esempio per calcolare l'inverso di 4 in F_ 7 basta fare 4^(7-2)  = 2  mod 7  e infatti  4*2 = 1 mod 7 (effettivamente 2 è l'inverso di 4 in F_7).

Sia nella mia prima versione della libreria micro_ecdsa che nella libreria secp256k1 si utilizza questo metodo (ovviamente nella libreria secp256k1 c'è un'ottimizzazione per la quale si è riusciti a minimizzare il numero di moltiplicazioni necessarie per ottenere a^(p-2) ricorrendo agli elevamenti al quadrato, un po' come nel caso della moltiplicazione (addizione ripetuta) per uno scalare si utilizzano i raddoppi dei punti per fare meno addizioni possibili.


2)  E' possibile anche ricavare la radice quadrata di b = a^2.

Infatti se p = 3 mod 4 (come succede effettivamente nella secp256k1), allora p + 1 è un multiplo di 4, e quindi:

a^p = a   mod p
 
a^(p+1) = a^2    mod p

a^((p+1)/4) = a^1/2 = sqrt(a)  mod p

Code:
>>> p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f

>>> p % 4
3


>>> a = 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798

>>> a1 = pow(a, (p+1)/4, p) #sqrt(b)
>>> print(hex(a1))
0xcb6dfbd6cdf31164bbeb3052460c1fa3f827f01d6e7fb5f69580cfb96560c16a

>>> (a1 * a1)-a  % p    #verifica
0

>>> a2 = p-a  #a2 = -a1  trovo l'altra radice
>>> print(hex(a2))
0x34920429320cee9b4414cfadb9f3e05c07d80fe291804a096a7f30459a9f3ac5

>>> (a2 * a2)-a  % p  #verifica
0

Questa è l'implementazione di questa funzione nella libreria secp256k1. In quella libreria quando ci si riferisce a un'operazione definita su un elemento del campo delle coordinate si usa la sillaba 'fe' = field element , quando invece ci si riferisce a un'operazione sui punti della curva si usa la sillaba 'ge' = group element come succede ad esempio qui nell'implementazione della funzione che somma due punti della curva.
746  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 18, 2019, 05:26:04 PM
Avevo letto da qualche parte che la stessa cosa vale per altri tipi di anelli che non sono campi finiti, ad es. definendo:

Z'n = 0 U {a: 0 < a < n, MCD (a, n) = 1}

cioè anche con n che non è primo, se a ed n sono primi fra loro.


Z'p non so neanche se sia corretta come notazione, andavo un po' a memoria.


Trovata, intendevi questo (fonte: https://it.wikipedia.org/wiki/Gruppo_ciclico):

Quote
Gruppo delle unità

Le unità dell'anello Z/nZ  sono i numeri primi con n, ovvero i generatori del gruppo. Formano un gruppo con la moltiplicazione, di φ ( n )  elementi (vedi sopra), indicato generalmente come Zn^* .

Ad esempio, i gruppi Z6^*  = { 1 , 5 }  e Z8^*  = { 1 , 3 , 5 , 7 }  sono isomorfi rispettivamente a Z / 2 Z  e Z / 2 Z × Z / 2 Z.

In generale, Zn^*  è ciclico se e solo se n  è 2, 4 , p^k o 2 p^k  dove p  è un primo dispari e k ≥ 1.

In particolare, il gruppo Zp^* è ciclico con p − 1  elementi per ogni primo p. Più in generale, ogni sottogruppo finito del gruppo moltiplicativo di un campo è ciclico.

Io invece mi sono soffermato nella teoria di questo thread solo sui gruppi di cui si parla nell'ultima riga perchè il campo Fp della secp256k1 è esattamente di quella forma.
747  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: January 18, 2019, 02:03:56 PM


Less than a week now.

Is there a link to these statistics in real time?
748  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 17, 2019, 08:04:47 PM
Ho un'altra domanda... Immagino non sia un caso che il rislutato di "x^3+7 mod 11" siano tutti valori diversi, da cosa dipende?
se ho capito bene la tua domanda è:

perchè la funzione f definita da F_11 a F_11 in questo modo:

    F_11  -->   F_11

f:     x     -->   x^3 + 7

è iniettiva?

Risposta: questa funzione è iniettiva a seconda del valore di p in Fp (lo è nel caso di F_11, non lo è nel caso di Fp della secp256k1)



Una funzione f di A in B si dice iniettiva se

x1 != x2  --> f(x1) != f(x2)  per ogni coppia di valori x1, x2 in A

o equivalentemente se:

f(x1) = f(x2) --> x1 = x2  

Osservazione:

Supponiamo che f(x1) = f(x2), e cioè che  (x1)^3 + 7 = (x2)^3 + 7 mod 11, allora (x1)^3 = (x2)^3 mod 11 (per il primo principio di equivalenza delle equazioni).

Quindi ( x1 / x2 ) ^3 = 1 mod 11

Ora consideriamo l'equazione x^3 = 1 mod 11 (dove x = x1/x2). Quante soluzioni può avere?

Sicuramente ha come possibilità x = 1, ovvero x1 = x2. Quindi se l'equazione x^3 = 1 mod 11 ha come unica soluzione x = 1 allora la funzione f(x) = x^3 + 7 è iniettiva, altrimenti no.

Se infatti esistessero altre radici cubiche dell'unità, che chiameremo beta, ci sarebbero altre possibilità:

tipo beta^3 = 1 mod 11 (con beta diverso da 1) e quindi (x1/x2) = beta -->  x1 = beta * x2 mod 11 ed entrambi i valori x1 e x2 alla terza sarebbero uguali!

Ora si può dimostrare che se il numero primo 'p' di Fp è congruente a 1 mod 3 (ovvero se p = 1 mod 3) allora ci sono ben 3 diversi elementi x che vengono mappati nella stessa y (questa proprietà del campo delle coordinate induce una proprietà particolare nel gruppo dei punti che si costruiscono a partire da queste coordinate, si parla di endomorfismi, un legame particolare tra i punti della curva).

Questo è proprio il caso della p della secp256k1, quindi nel campo delle coordinate della curva utilizzata da Bitcoin esistono 3 numeri: 1, beta1, beta2 che elevati alla terza fanno 1 mod p, questo fa sì che per ogni possibile risultato y = x^3 + 7 mod p vi siano ben 3 valori di x possibili, detta in altri termini

se x --> y
allora anche

beta1*x --> y
beta2*x --> y

quindi i punti della curva secp256k1 si suddividono in gruppi da tre punti che condividono la stessa ordinata:

Code:
(x,y), (beta1*x, y), (beta2*x, y)

dove

beta1 = 0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee #  (beta1^3 = 1 mod p)
beta2 = 0x851695d49a83f8ef919bb86153cbcb16630fb68aed0a766a3ec693d68e6afa40 #  (beta2 = beta1^2, beta2^3 = 1 mod p)

sfruttare questa proprietà della curva accelera enormemente i calcoli (se l'obiettivo è generare il più velocemente possibile i punti della curva).

Nota bene:

11 non è congruente a 1 mod 3 (11 = 2 mod 3), quindi non può avere sottogruppi di ordine 3, e di sicuro non può avere allora un numero a diverso da 1 tale che a^3 = 1 mod 11.  In sostanza un campo di p elementi è un gruppo ciclico rispetto all'operazione di moltiplicazione di ordine p-1 (ha solo p-1 elementi perchè bisogna togliere lo zero), nel nostro caso 10.

Questo vuol dire che i possibili sottogruppi di {1,2,3,4,5,6,7,8,9,10} (guarda qui per il concetto di ordine e di sottogruppo)  possono avere per il teorema di Lagrange solo ordine un divisore di 10, ovvero o 1 o 2 o 5.  In un sottogruppo di ordine 2, deve esistere un elemento a != 1 tale che a^2 = 1 mod 11, in un sottogruppo di ordine 5 (se c'è) ci devono essere degli elementi b != 0 tali che b^5 = 1 mod 11.
Non potendoci essere un sottogruppo di ordine 3 (perchè 3 non divide 10), non ci può essere quindi un elemento beta diverso da 1 tale che beta^3 = 1 mod 11.

Se provi invece con F_7 (o con F_19 o con altri valori di p primo congruenti a 1 mod 3), poichè 7 = 1 mod 3 (ovvero 7-1 è un multiplo di 3) in F_7 può esserci un sottogruppo di ordine 3 e quindi un paio di elementi diversi da 1 di ordine 3 (ci può essere cioè un sottoinsieme di F_7 formato da 3 elementi = {1, beta1, beta2} che elevati alla terza fanno 1).

Infatti (tutti i calcoli sono fatti modulo 7 in F_7):

x     x^3    x^3 + 7    y=sqrt(x^3 + 7)

0      0            0                        0
1     1            1                     1 o 6
2     1            1                     1 o 6
4     1            1                     1 o 6
3      6            6                 non esiste
5      6            6                 non esiste  
6      6            6                 non esiste

quindi l'insieme E(F_7), ovvero la curva (il gruppo) formata da tutti i punti le cui coordinate nel campo F_7 soddisfano l'equazione y^2 = x^3 + 7 mod 7 é

E(F_7) = { (0,0), (1,1), (2,1), (4,1), (1,6), (2,6), (4,6) } U {punto all'infinito}

notare la doppia "simmetria"di questa curva:

1) rispetto all'asse x  (le y vanno a "coppie", 1 e 6 sono come 1 e -1, sono valori simmetrici rispetto all'asse x, questo deriva dal termine y^2)

2) rispetto ai singoli valori di y (le x associate alla stessa y sono terne di x legate tra loro dalle radici cubiche dell'unità, questo deriva dal termine x^3 dell'equazione e dal particolare valore di p)

Ho aggiunto in fondo a questo post il calcolo del numero distinto dei valori assunti dalle coordinate x e dalle coordinate y dei punti della curva, calcolo che si basa proprio su questa doppia simmetria.
749  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 16, 2019, 09:48:58 PM
Addizione tra 2 punti in E(F_11): esempio


Vediamo di costruire come esempio il gruppo E(F_11), cioè il gruppo di elementi della curva di equazione y^2=x^3+7 a coordinate in F_11.

Proviamo tutti i casi possibili:

x   x^3+7   x^3+7 mod 11    Sqrt(x^3+7) mod 11   
0   7                   7      
1   8                   8      
2   15                   4                     2 o 9        2 o -2   --> (2,2), (2,-2)
3   34                   1                    1 o 10      1 o -1  -->  (3,1), (3, -1)
4   71                   5                    4 o 7        4 o -4  -->  (4,4),(4,-4)        
5   132                   0                        0               0      -->  (5,0)
6   223                   3                    5 o 6        5 o -5   -->  (6,5),(6,-5)
7   350                   9                    3 o 8        3 o -3   --> (7,3),(7,-3)
8   519                   2      
9   736                  10      
10   1007                  6      




Mi perdo nel passaggio dalla terza alla quarta colonna, il mod11 viene fatto sul sqrt? Non capisco come vengono estrapolati i valori.

mod 11 viene applicato al risultato della radice quadrata (in generale viene applicato al risultato di qualsiasi operazione quando questo risultato supera 11).

Prendiamo per esempio la riga del 2:

x = 2 --> x^3 = 8 --> x^3 + 7 = 8 + 7 = 15 = 4 mod 11 --> sqrt(4) = 2 o 9 (perchè 2*2 = 4 ma anche 9*9=81 = 4 mod 11) lascia perdere i valori negativi (semplicemente 9 = -2 mod 11, li ho inseriti solo per far vedere che le radici quadrate sono sempre opposte, anche in questi insiemi strani; anche con i numeri normali se ti dico x^2 = 4, chi è x? Tu rispondi: 2 o -2)
750  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 16, 2019, 09:27:58 PM
...
Altra domanda...Qualcuno è così gentile da scrivere i vari passaggi da privkey a pubkey con una privkey reale? grazie
Vedi: https://en.bitcoin.it/wiki/Technical_background_of_Bitcoin_addresses
e anche https://en.bitcoin.it/wiki/Address

Grazie, ma manca proprio il calcolo della chiave pubblica (passaggio da 0 a 1)

L'ho spiegato qui con un codice python applicato a una chiave reale:

https://bitcointalk.org/index.php?topic=5091462.msg48983013#msg48983013

nella libreria micro_ecdsa la funzione che effettua il passaggio dalla chiave privata alla chiave pubblica è la funzione mul che moltiplica il generatore G per una chiave privata d (uno scalare) e restituisce la chiave pubblica corrispondente d*G. Quindi per trovare la chiave pubblica relativa a 'd' basta chiamare la funzione mul(d,Gx, Gy), dove Gx e Gy sono le coordinate del punto G scelto dalla SEC. Ti consiglio di scaricarti lo script pyhton e provare a generare delle chiavi pubbliche a partire dalle chiavi private. Lascia stare gli indirizzi, quelli vengono dopo.

La funzione 'mul' invece di fare banalmente d*G = G+G+G+.... un numero d di volte (essendo d dell'ordine di 2^256 ci impiegherebbe un'eternità) crea tutte le potenze di 2 tipo 2*G, 4*G, 8*G, 16*G, 32*G, ... , 2^255*G e poi somma tra loro quelle che servono. Ho anche fatto un esempio concreto con una chiave piccola tipo 25 = 11001 in base 2. In quel caso basta generare 1G, 2G, 4G, 8G, 16G e poi sommare rispettivamente: 16G + 8G +1G (che corrispondono ai 3 'uno' della sequenza 11001) per ottenere 25G (che è la chiave pubblica relativa alla chiave privata 25).  Nella libreria ci sono anche la formula per l'addizione di due punti e la formula per il raddoppio di un punto che sono i mattoncini base per la funzione mul.

EDIT: altri link utili:

https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication

https://hackernoon.com/what-is-the-math-behind-elliptic-curve-cryptography-f61b25253da3

751  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 11, 2019, 06:39:50 PM
Sono un po OT, ma volevo sapere: partendo da un indirizzo, posso sapere se è stato generato a partire da una pubkey compressa o meno? Grazie

No, non si può sapere. Nel momento in cui passi la stringa '04' + 'X' + 'Y' alla funzione ripemd160(sha256()) il risultato è solo una stringa di 160 bit, lo stesso otterresti se mettessi in input '02' + 'X'.

Di più, la stringa di 160 bit (l'address è sostanzialmente un numero di 160 bit presentato all'essere umano in base 58) potrebbe essere l'impronta di qualsiasi cosa. Ad esempio, se consideri la frase 'Ciao come stai' e la dai in pasto così:  ripemd160(sha256('Ciao come stai')) ottieni un numero di 160 bit, se ora passi la sua codifica in base 58 a qualcuno perchè lui ti paghi su quell'indirizzo, la transazione avverrà con destinazione quell'indirizzo, poichè non è possibile dall'indirizzo stesso ricavare nulla su come sia stato effettivamente generato (se non che la sua codifica in base 58 è stata ottenuta aggiungendo il byte 00 all'inizio della stringa di 160 bit).
Quindi in tal caso nessuno potrebbe smuovere più quei fondi.
752  Local / Discussioni avanzate e sviluppo / Re: ECDSA parte 2: firma di un messaggio e di una transazione bitcoin on: January 04, 2019, 10:26:14 AM
Lavoro interessante e preciso come al solito, grazie Smiley

Appena ho un po di tempo lo provo un pò, stavo cercando di creare un implementazione minimale di una blockchain ( a scopo didattico ), quindi mi tornerà parecchio utile.

Il lavoro non è ancora finito, voglio aggiungere nell'ultimo script anche come passare dalla chiave pubblica all'address e come passare dalla chiave privata in formato esadecimale a quella in formato wif e viceversa.

Ho aggiornato più volte lo script, quindi il consiglio è di non salvare lo script oggi per lavorarci tra 1 mese, ma copiarlo quando ti servirà (perchè nel frattempo lo avrò aggiustato/migliorato). Per esempio l'altro giorno ho aggiornato lo script che avevo pubblicato qui per la generazione degli address, in quanto mi sono accorto che con python2 i numeri in formato esadecimale sotto i 18 caratteri venivano rappresentati con stringhe senza la L finale di long.


Per quanta riguarda il lavoro di questo thread, la maggior parte delle difficoltà l'ho avuta nel continuare a pensare alle conversioni tra i vari formati (e a reperire le informazioni adeguate), in particolar modo le codifiche delle firme (r,s) sono diverse per quanto riguarda

1) le firme dei messaggi: sono sempre 1 byte + 32 byte + 32 byte --> base64

2) le firme delle transazioni: sia r che s possono essere minori di 32 byte, ma anche 33 byte causa la codifica DER che impone che se il primo bit è 1 quel numero è considerato negativo e quindi viene aggiunto il byte 00 all'inizio perchè torni positivo, r e s sono interi quindi con segno a lunghezza variabile; comunque la firma in questo caso viene salvata in formato esadecimale

Quindi penso che aggiungerò uno script su come fare a costruire da zero una transazione e firmarla (non penso mi occuperò dell'invio alla rete).

Un altro progetto futuro sarebbe quello di scrivere un parser per blockchain molto succinto (max 200 righe, mi piacciono i programmi corti).

Trovo molto divertente cercare di capire come funzionano i meccanismi di questo sistema, il tuo progetto didattico è rivolto a degli studenti ?
753  Local / Guide (Italiano) / Re: [GUIDA] Nodo Bitcoin + Lightning Network su Raspberry PI on: January 04, 2019, 09:26:35 AM
Traduzione in Italiano, con qualche adattamento che ho ritenuto opportuno, dell’ottima guida di Stadicus.

https://github.com/Fillippone/NodoBitcoinforDummies

Di seguito posto l’introduzione, che spero chiarisca il mio intento:
Sono ovviamente aperto a suggerimenti/commenti/critiche di qui che su Github.
F1

Una nota generale: molti errori nello scrivere le parole, va bene che non pregiudicano la comprensione del testo ma non rendono giustizia del lavoro svolto.

Le parole in inglese al plurale in italiano si traducono al singolare:

non i files, ma i file, non le directories, ma le directory e così via...

Alcuni esempi tratti dalla tua traduzione:

di avere installate le ultime releases e patch di sicurezza

e, allora vi sono chances che il vostro Hard Disk sia montato

Ora dovreste aver generato tre files.





Altri errori che ho trovato nei primi 7 capitoli:



mentre cercavo di raccapezzarmi tra le varie fonti trovate su internet, github, il forum di butcointalk,

qualche poveretto ha insesirto in blockchain qualche file

di ricerca di Windows10 e selezionate "PRompt dei comandi

possiamo trovare il file .asc (Armoured ASCII file)

Notate che il nome dell network (ssid) e la password devono essere tra doppie virgolette

Avrete bisogno, nel prosieguio di questa guida di molte password

Visto che si tratta di una installazione sever, il file system nativo

quindi formatteremo l'ard disk, cancellando

Uno dei modi più robusti per rendere sicro il login in SSH è quello di disabilitare completamente la passrod e di richiedere per il login un certificato SSH.

UScite dal sistema (exit) ed effettuate

UScite e riloggatevi nuovamente.

nel caso di un attacco DdOS, voi incontrete rapidamente

comunque il passsaggio in testnet prima di avventurarci nella vera rete bitcooin.

Scaricheremo il softare direttamente da bitcoin.org, ne verificheremo la firma per assicurarci di unare una versione ufficiale e non corrotta e la installleremo sul nodo.

Accedete come "admin" e create una cartella di downloadr

Scaricheremo l'ultima versione dei binari di Bitcoin Core (l'applicazionehe) e verificheremo l'hash del file scaricato con la firma del file originale. Questaè una precauzione necessatia per essere sicuri

il file firmato contenente tutte le checksum e controllate ancora l'imporonta in caso di chiave malevoli

ora che sappiamo che le chiavi da bitcoin.org sono validwe, possiamo anceh

la destinazione non deve esssere di colore rosso

# Rimuovete (Commentate) la linea di seguito per passare da testnewt a mainnet

 per controllare che tutto vada bene (potrebbe interrrompersi su "dnsseed thread exit", ma va bene).

UScite dal file di log con Ctrl-C

Una volta che questo valore raggiunge valori prossimi ad 1( es: 0.999…), la blockchain è asggiornata e valòidata.

https://github.com/Fillippone/NodoBitcoinforDummies/blob/master/08.Lightning.md : il link in fondo alla pagina è sbagliato (https://github.com/Fillippone/NodoBitcoinforDummies/blob/master/09.mainnet.md
754  Local / Discussioni avanzate e sviluppo / Re: Visioni di bitcoin on: January 03, 2019, 08:01:12 AM
Bitcoin si trova agli albori di un lungo processo di adozione di massa che potrà avere o non avere successo.

Il suo successo dipende essenzialmente da tre fattori:

1) quanto bitcoin riuscirà a mantenere ed aumentare il suo grado di decentralizzazione che è la prima fonte di tutte le virtù di cui sopra

2)quanto la maggior parte dei soggetti coinvolti (utenti, miners, sviluppatori..) saranno mossi nelle loro azioni di autogoverno e protezione della rete solo da obiettivi capitalistici di massimizzazione del profitto e di ricerca del proprio tornaconto personale, che sono il secondo importantissimo presupposto di tutte le virtù di cui sopra (devono perseguire obiettivi economici e non obiettivi  politici che vanno contro il loro interesse economico, come ho già scritto in post precedenti)

3) quanto il mondo avrà bisogno di una hard-money indipendente dalle strutture umane e con le caratteristiche di immaterialità che ha in più rispetto al vecchio oro.

Acquistare o possedere bitcoin è un atto di fiducia nei confronti di questi 3 punti, tutto il resto sarà una conseguenza.

La buona notizia è che i punti  1 e 2 sono una conseguenza del tasso di adozione. Più aumentano il numero di utenti di bitcoin, più aumenta la sua decentralizzazione e più aumenta l’interesse economico alla sua difesa. E più diventa quindi anche complicato distruggerlo. E’ un processo virtuoso di autoprotezione che è alla base del meccanismo di consenso distribuito. Ed è la sintesi di tutto ciò che di geniale c’è in questa invenzione.

Il punto 3 dipende invece da quanto, quando e come le monete soft continueranno le loro crisi.

Per quanto riguarda il punto 1), uno dei grossi problemi tecnici per il quale al momento non si intravvede soluzione è il tempo di sincronizzazione iniziale della blockchain che sta aumentando più velocemente di quanto faccia il combinato disposto di miglioramento software e miglioramento hardware:

Initial sync is already an enormous problem, and even if you assume computers/bandwidth improve at 18% year over year (which is a big assumption...) any blocksize over ~300kbytes means that the initial sync time will continue to get worse.

Quindi la decentralizzazione, che già ora è a rischio a livello di mining, sarà a rischio anche per quanto riguarda i full node, in quanto con il passare del tempo sarà sempre più difficile entrare da zero e ricostruire dal primo blocco tutta la storia di tutte le transazioni senza fidarsi di nessuno.

Penso proprio che su questo punto prima o poi si dovrà intervenire con qualche cambio di protocollo che inevitabilmente centralizzerà ulteriormente la blockchain, decidendo arbitrariamente per esempio che il punto di partenza comune non è più il famoso blocco "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks" di cui ricorrono oggi i 10 anni, ma sarà invece una fotografia del database degli utxo a un dato istante, fotografia che verrà periodicamente aggiornata.

Sul punto 3) aggiungo che in presenza di una crisi della moneta soft come accade in Venezuela ogni altra moneta soft più decente tipo il dollaro andrebbe bene, basti pensare anche alla stable coin, quindi il fatto che in Venezuela si comprino ultimamente più bitcoin è un indice più dello stato di gravità in cui versa il sistema monetario venezuelano che della bontà di bitcoin come moneta della crisi. Se dai da mangiare un piatto a uno che sta morendo di fame il suo apprezzamento del piatto non è un buon indicatore della bontà della cucina.

Mi domando invece quale possa essere la vera domanda di contante elettronico alla luce del problema della sicurezza personale (vedi https://bitcointalk.org/index.php?topic=2107660.0).

Di solito si usa dire che il contante (almeno in grosse quantità) non è sicuro, infatti nessuno va a ritirare lo stipendio in contanti; se io ricevessi lo stipendio in bitcoin invece sarebbe proprio come se li ricevessi in contanti poichè la chiave per spenderli sta solo nella mia testa, e le chiavi private sono titoli di credito al portatore.

Secondo me al momento questo fatto è largamente sottovalutato per 2 ordini di motivi:

1) dal momento che bitcoin è immateriale/digitale, questo fatto sembra a prima vista conferirgli la sicurezza contro i furti che hanno i conti correnti delle monete fiat ma questo non è vero: bitcoin (forse) può assicurarmi contro il rischio inflazione e il rischio che il governo mi sequestri i soldi ma mi lascia molto più indifeso contro gli attacchi personali

2) bitcoin è talmente poco diffuso che nessuno sa che io possiedo bitcoin, quindi in questo risiede soprattutto la mia attuale sicurezza: ma se domani per assurdo l'80% della popolazione avesse bitcoin al posto delle fiat, sarebbe come se ogni persona che vedo per strada (o che posso andare a minacciare a casa sua) girasse con un portafogli pieno di contanti, ciascuno sarebbe enormemente esposto al pericolo di furto e le rapine sarebbero oltremodo incentivate.

Quindi la domanda finale è: ma c'è davvero tutta questa domanda di contanti nel mondo? Il rischio di furto da parte dello Stato è così superiore al rischio di incolumità personale? Perchè io preferisco di gran lunga il primo al secondo.

L'alternativa è che si continui a utilizzare bitcoin rinunciando però alla massima "essere la banca di se stessi", distribuendo il rischio (e inevitabilmente il controllo delle chiavi quindi) anche a altre persone di propria fiducia.
755  Local / Discussioni avanzate e sviluppo / Re: ECDSA parte 2: firma di un messaggio e di una transazione bitcoin on: January 02, 2019, 05:25:56 PM
Si trovano tante librerie che fanno tutto, ma si fa sempre fatica a trovare una spiegazione dettagliata di questo tipo, con i singoli passaggi, grazie Arulbero. Cool


Prego!  Wink
756  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 01, 2019, 10:26:56 PM
mi sono ricordato che ai miei tempi c'era un corso di Algebra tra quelli opzionali, ma non lo sceglieva quasi nessuno, me compreso...
Avevamo tutti un corso di Geometria al primo anno, con solo una parte di algebra lineare sulle matrici. Devo dire che a volte mi pesa avere di queste lacune.

Non è mai troppo tardi per mettersi a studiare, l'importante è che ti interessi veramente, ormai di materiale in rete ce n'è in abbondanza.
757  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 01, 2019, 10:04:51 PM

ok ti ringrazio, mi mancava quel tassello dell'identità di Bezout!
Z'p non so neanche se sia corretta come notazione, andavo un po' a memoria.

Per curiosità, che corso è quello del testo? Tu insegni questo all'università?

Direi un classico corso di Algebra. Certo era solo un riferimento, visto che mi hai chiesto dei campi finiti ho fatto una rapida ricerca con google.  Smiley

Io insegno matematica al liceo, non all'università.
758  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 01, 2019, 08:08:55 PM
ok ma qui è invertito l'ordine: è appunto la parte in grassetto che non capisco come si dimostra. Come dimostri che per ogni a < p, esiste b < p t.c. a x b = 1?

Infatti ho solo dimostrato che Zn non è un campo quando n non è primo.

Dimostrare che un insieme è un campo è ovviamente più laborioso (dimostrazione completa , da pag. 35 a pag. 46!), devi infatti dimostrare che le operazioni di somma e moltiplicazioni sono ben definite, godono delle proprietà associative e commutative e che tutti gli elementi hanno l'opposto e il reciproco (in sostanza che sono definite implicitamente anche le operazioni di sottrazione e divisione per un numero diverso da zero).

Come hai ben osservato, la parte più interessante è l'ultima, ovvero dimostrare che ogni elemento (a parte lo 0) di Zp ha sempre un inverso.


Premessa:

Identità di Bezout: dati a e b numeri interi relativi diversi da 0 e detto d = MCD(a,b), allora esistono x,y interi tali che

a*x + b*y = d

x e y non sono unici, per trovarne un paio basta applicare l'algoritmo di Euclide per la determinazione del MCD (ce ne sono in realtà  infinite coppie).

Supponiamo vera l'identità di Bezout (vedi pag. 45 del link), vediamo che x e y non sono unici.

Notiamo infatti che a*b + b*(-a) = 0, quindi k * [a*b + b*(-a)] = 0 per ogni k intero

da ciò segue che per ogni k intero, a*(b*k) + b(-a*k) = 0 quindi

0 + a*x + b*y = d ->  a*(b*k) + b(-a*k) + a*x + b*y = d

da cui si ricava che x' = b*k + x    e   y' = -a*k + y possono assumere infiniti valori.



Teorema: se p é primo allora ogni elemento diverso da 0 di Zp ha un inverso in Zp

Sia a un numero diverso da 0 di Zp, con p primo.

Poichè p è primo, MCD(a,p)=1

Per l'identità di Bezout esistono x e y interi tali che:

a*x + p*y = 1

ovvero a*x = 1 -y*p  ovvero a*x  = 1 mod p (a*x = 1 mod p significa che esiste q intero tale che a*x= q*p + 1)

quindi x è l'inverso di a mod p
CVD

Ti consiglio caldamente la lettura delle pagine dalla 42 alla 46, spiegano bene la questione a partire dal concetto di divisore, di MCD, identità di Bezout e teorema su Zp.


Avevo letto da qualche parte che la stessa cosa vale per altri tipi di anelli che non sono campi finiti, ad es. definendo:

Z'n = 0 U {a: 0 < a < n, MCD (a, n) = 1}

cioè anche con n che non è primo, se a ed n sono primi fra loro.

Penso che dalla dimostrazione che ti ho dato ora questo punto sia diventato chiaro.

Ultima osservazione, bisognerebbe stare attenti a come sono definiti gli elementi degli insiemi in algebra, io ho utilizzato una notazione 'leggera' per cui Zp = { 0, 1, 2, ...., n-1} mentre in realtà bisognerebbe scrivere Zp = { [ 0], [1], [2], ...., [n-1]} perchè gli elementi di Zp sono le classi di congruenza modulo n, penso che anche l'insieme Z'n di cui parli tu sia la stessa cosa, altrimenti non è chiaro neanche come è definita l'addizione e la moltiplicazione tra elementi.

Detta in altri termini, Zp = { 0, 1, 2, ...., n-1} NON è un campo con le usuali operazioni di addizioni e moltiplicazione!
Invece Zp = { [ 0], [1], [2], ...., [n-1]} lo è, una volta definite le operazioni + e * sui suoi particolari elementi.

Ad esempio Z'6 = {[ 0], [1], [5]} ( Z'6 ha 3 elementi, è isomorfo quindi a Z3 = {[ 0], [1], [2]} ) (per fare i calcoli basta sostituire [5] con [2])

dove

[ 0]  * [ 0] = [ 0]                [ 0]  +  [ 0] = [ 0]
[ 0]  * [ 1] = [ 0]                [ 0]  +  [ 1] = [ 1]
[ 0]  * [ 5] = [ 0]                [ 0]  +  [ 5] = [ 5]
[ 1]  * [ 0] = [ 0]                [ 1]  +  [ 0] = [ 1]
[ 1]  * [ 1] = [ 1]                [ 1]  +  [ 1] = [ 5]
[ 1]  * [ 5] = [ 5]                [ 1]  +  [ 5] = [ 0]
[ 5]  * [ 0] = [ 0]                [ 5]  +  [ 0] = [ 5]
[ 5]  * [ 1] = [ 5]                [ 5]  +  [ 1] = [ 0]
[ 5]  * [ 5] = [ 1]                [ 5]  +  [ 5] = [ 1]
759  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 01, 2019, 06:18:44 PM
Una cosa però avevo provato a studiarla ma non l'ho mai capita: come fai a dimostrare che l'insieme dei numeri interi non negativi e minori di p (numero primo) sia un campo? Ovvero, come dimostri che per ogni elemento di quell'insieme esiste un inverso, anch'esso nello stesso insieme?

Si può dimostrare che Zn è un campo finito se e solo se n è primo.

Al momento mi ricordo solo come si fa a dimostrare che se n non è primo, allora Zn non è un campo.

Premessa:
in un campo qualsiasi deve valere la legge di annullamento del prodotto, ovvero a x b = 0 implica necessariamente che almeno uno tra a e b sia uguale a 0.

Infatti se per assurdo a x b = 0 con a,b entrambi diversi da 0, posso moltiplicare entrambi i membri per b^-1 (ogni elemento diverso da 0 ha il suo inverso in un campo):

a x b x b^-1 = 0 x b^-1

a x 1 = 0

a = 0 che va contro l'ipotesi che a sia diverso da 0.
 


Tornando a Zn, se n non è primo, allora n = a x b, con a,b diversi da 0.

Ma Zn = {0, 1, 2, ..., n -1} è definito come l'insieme delle classi dei resti modulo n ovvero n = 0 in Zn.

Quindi se n non è primo, è possibile trovare due numeri diversi da 0 il cui prodotto fa 0, ma in un campo la legge di annullamento del prodotto deve valere sempre, quindi si conclude che Zn non è un campo.


EDIT: aggiungo inoltre che ogni campo finito Fq ha necessariamente p^n elementi, dove p è un numero primo. Ogni campo finito contiene un sottocampo finito di p elementi isomorfo a Zp, e tutti i campi finiti di p elementi sono isomorfi a Zp (link)
760  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: December 31, 2018, 03:06:33 PM
Dopo quasi 3 anni mi sono deciso a continuare questo thread, aggiungendo le parti relative alla firma di un messaggio (già fatta) e la firma di una transazione bitcoin (ancora da fare).

Si tratta di una sezione più operativa, con esempi di codice in python funzionanti (tranne casi particolari che non affronterò).

Ricordo comunque che si tratta di materiale a scopo didattico, solo per imparare, non usate questi software per cose serie.

Questo il link al nuovo thread (continuazione di questo):

https://bitcointalk.org/index.php?topic=5091462
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 ... 96 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!