0Pricing
Cryptology Academy · Lezione

Condivisione dei segreti di Shamir: matematica dei polinomi

Costruisca polinomi su campi finiti per dividere e recuperare i segreti.

Condivisione dei segreti di Shamir: matematica dei polinomi è una lezione Cryptology Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cryptology Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cryptology Academy include 4 lezioni in totale.

Concetto chiave

Shamir's Secret Sharing (1979) codifica il segreto come intercetta sull'asse y (f(0)) di un polinomio casuale di grado (k-1) su un campo finito. Qualsiasi k punti determina univocamente il polinomio (interpolazione di Lagrange); meno di k punti non rivelano nulla.

Costruzione del polinomio

Per condividere il segreto S con soglia k tra n parti: scegliere un primo p > S e n. Scegliere coefficienti casuali a_1, ..., a_{k-1}. Definire f(x) = S + a_1*x + a_2*x^2 + ... + a_{k-1}*x^{k-1} (mod p). La parte i riceve la quota (i, f(i)).

Esempio: schema 2-di-3

Secret S=7, p=17, k=2 (polinomio lineare). Scegliere a_1=3. f(x)=7+3x mod 17. Quote: (1,10), (2,13), (3,16). Due punti qualsiasi determinano la retta. f(0)=7. Un solo punto: infinite rette possibili, nessuna informazione su S.

Interpolazione di Lagrange

Dati k punti (x_1,y_1),...,(x_k,y_k), ricostruire f(0) usando Lagrange: S = sum_i y_i * prod_{j≠i} (0-x_j)/(x_i-x_j) mod p. Tutte le operazioni sono modulari. Nessun calcolo in virgola mobile: ricostruzione esatta sul campo finito.

Implementazione in Python

from functools import reduce def lagrange(shares, p): xs = [s[0] for s in shares] ys = [s[1] for s in shares] result = 0 for i, (xi, yi) in enumerate(shares): num = reduce(lambda a,b: a*b%p, [(-xj)%p for j,xj in enumerate(xs) if j!=i], 1) den = reduce(lambda a,b: a*b%p, [(xi-xj)%p for j,xj in enumerate(xs) if j!=i], 1) result = (result + yi * num * pow(den, p-2, p)) % p return result

Abbozzo della dimostrazione della sicurezza perfetta

Per k-1 condivisioni, per ogni possibile valore del segreto S esiste esattamente un polinomio di grado k-1 che passa per quei k-1 punti. Pertanto, conoscendo k-1 condivisioni, ogni valore di S nell'intervallo [0, p-1] è equiprobabile: non viene rivelata alcuna informazione.

Scelta del primo

p deve essere maggiore del segreto e di n. Una scelta comune è p = 2^127-1 (primo di Mersenne) per segreti di 128 bit. In questo modo tutte le condivisioni possono essere rappresentate in 128 bit e i calcoli sono efficienti. In alternativa, si può usare p = 2^521-1 per segreti di 512 bit.

Verifica delle condivisioni

La SSS di base non garantisce l'integrità delle condivisioni: un partecipante malevolo può fornire una condivisione falsa, causando una ricostruzione errata del segreto. Feldman VSS (condivisione verificabile del segreto) pubblica i commitment g^{a_i} mod p, consentendo di verificare le condivisioni senza rivelare il polinomio.

Condivisione proattiva del segreto

Le condivisioni possono essere aggiornate periodicamente: si genera un nuovo polinomio con lo stesso segreto S e si distribuiscono nuove condivisioni; quelle vecchie non sono più valide. Un attaccante che compromette un partecipante dopo l'aggiornamento ottiene una vecchia condivisione inutile. Questa tecnica viene usata nei sistemi di gestione delle chiavi a lunga durata.

Implementazioni

ssss (riga di comando Linux), python-secret-sharing, hashicorp/vault utilizza la SSS per il meccanismo di sigillatura, mentre il portafoglio hardware Trezor usa la SSS per il backup del seed del portafoglio (SLIP-39). Tutte operano su campi primi di grandi dimensioni.

Limitazioni

La SSS richiede un dealer fidato che generi e distribuisca le condivisioni (il dealer conosce il segreto). In assenza di un dealer è necessaria la DKG (generazione distribuita delle chiavi). La ricostruzione rivela il segreto a chiunque disponga di k condivisioni; questo problema viene eliminato dalla MPC e dalle firme a soglia.

Verifica rapida

Nella condivisione del segreto (3,5) di Shamir, qual è il numero minimo di condivisioni necessarie per ricostruire il segreto?

Riepilogo

La SSS di Shamir codifica i segreti come intercette sull'asse y dei polinomi. L'interpolazione di Lagrange recupera il segreto da k condivisioni. Offre una sicurezza perfetta e informazionalmente teorica con meno di k condivisioni. Prossimo argomento: condivisione visiva e additiva del segreto.

Domande Frequenti

La lezione «Condivisione dei segreti di Shamir: matematica dei polinomi» è gratuita?

Sì — il testo completo di «Condivisione dei segreti di Shamir: matematica dei polinomi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cryptology Academy, passa a CoddyKit PRO. Il corso Cryptology Academy include 4 lezioni in totale.

Cosa imparerò in «Condivisione dei segreti di Shamir: matematica dei polinomi»?

Costruisca polinomi su campi finiti per dividere e recuperare i segreti. Eserciti Cryptology Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Cryptology Academy?

Non è richiesta alcuna esperienza precedente. Cryptology Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Condivisione dei segreti di Shamir: matematica dei polinomi»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Cryptology Academy?

Sì. Ogni lezione Cryptology Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Il problema della condivisione dei segreti
  2. Condivisione dei segreti di Shamir: matematica dei polinomi
  3. Condivisione visiva dei segreti e schemi additivi
  4. Firme a soglia e casi d'uso reali
← Torna a Cryptology Academy