Schema di divisione del segreto di Shamir

Consideriamo uno scenario in cui è necessario garantire la sicurezza di un magazzino bancario. Questo è considerato assolutamente inaccessibile senza la chiave, che ti viene rilasciata il primo giorno di lavoro. Il tuo obiettivo è mantenere la chiave al sicuro.

Supponiamo che tu abbia deciso di tenere sempre la chiave con te, fornendo accesso al magazzino quando necessario. Ma presto ti renderai conto che questa soluzione non scala bene in pratica, perché ogni volta per aprire il magazzino è necessaria la tua presenza fisica. E riguardo alle vacanze che ti hanno promesso? Inoltre, c'è un'ulteriore domanda preoccupante: e se perdi l'unica chiave?

Con il pensiero alle vacanze, hai deciso di fare una copia della chiave e affidarala a un altro dipendente. Tuttavia, capisci che anche questa non è una soluzione ideale. Raddoppiando il numero di chiavi, hai anche raddoppiato le possibilità di furto della chiave.

Disperato, distruggi il duplicato e decidi di dividere la chiave originale in due parti. Ora, pensi, due persone di fiducia con frammenti di chiave devono essere fisicamente presenti per riunire la chiave e aprire il magazzino. Questo significa che il ladro deve rubare due frammenti, il che è il doppio più difficile rispetto al furto di una chiave. Tuttavia, presto ti rendi conto che questo schema non è affatto migliore di una singola chiave, perché se qualcuno perde metà della chiave, la chiave completa non può essere ripristinata.

Il problema può essere risolto con una serie di chiavi e serrature aggiuntive, ma con questo approccio ben presto serviranno molte chiavi e serrature. Decidi che in uno schema ideale bisognerebbe dividere la chiave, in modo che la sicurezza non dipenda completamente da una sola persona. Concludi anche che deve esserci una certa soglia di numero di frammenti, in modo che la perdita di un frammento (o se una persona va in vacanza) non comprometta il funzionamento dell'intera chiave.

Come dividere un segreto

Questo tipo di schema di gestione delle chiavi è stato pensato da Adi Shamir nel 1979, quando pubblicò il suo lavoro «Come dividere un segreto». Nell'articolo viene brevemente spiegato il cosiddetto Schema di divisione del segreto di Shamir schema di soglia per la divisione efficace di un valore segreto (ad esempio, una chiave crittografica) in Schema di divisione del segreto di Shamir parti. Poi, quando e solo quando almeno Schema di divisione del segreto di Shamir da Schema di divisione del segreto di Shamir parti sono raccolte, è possibile ripristinare facilmente il segreto Schema di divisione del segreto di Shamir.

Dal punto di vista della sicurezza, una proprietà importante di questo schema è che un malintenzionato non deve sapere assolutamente nulla se non ha almeno Schema di divisione del segreto di Shamir parti. Anche la presenza di Schema di divisione del segreto di Shamir parti non deve fornire alcuna informazione. Chiamiamo questa proprietà sicurezza semantica.

Interpolazione polinomiale

Lo schema di Shamir Schema di divisione del segreto di Shamir è costruito attorno al concetto di interpolazione polinomiale. Se non sei familiare con questo concetto, in realtà è piuttosto semplice. In effetti, se hai mai tracciato punti su un grafico e poi li hai uniti con linee o curve, allora l'hai già utilizzato!

Schema di divisione del segreto di Shamir
Tra due punti possono passare un numero illimitato di polinomi di grado 2. Per scegliere uno di essi sarà necessaria un terza punto. Illustrazione: Wikipedia

Consideriamo un polinomio di primo grado, Schema di divisione del segreto di Shamir. Se desideri rappresentare questa funzione su un grafico, quante punti ti servono? Beh, sappiamo che si tratta di una funzione lineare, che forma una linea, quindi servono almeno due punti. Consideriamo ora una funzione polinomiale di secondo grado, Schema di divisione del segreto di Shamir. Questa è una funzione quadratica, quindi per rappresentare il grafico servono almeno tre punti. E per un polinomio di terzo grado? Almeno quattro punti. E così via.

La cosa davvero interessante di questa proprietà è che, conoscendo il grado della funzione polinomiale e almeno Schema di divisione del segreto di Shamir punti, possiamo derivare ulteriori punti per questa funzione polinomiale. L'estrazione di questi punti aggiuntivi la chiamiamo interpolazione polinomiale.

Costruzione del segreto

Forse hai già capito che qui entra in gioco il geniale schema di Shamir. Supponiamo che il nostro segreto Schema di divisione del segreto di Shamir è Schema di divisione del segreto di Shamir. Possiamo trasformare Schema di divisione del segreto di Shamir in un punto su un grafico Schema di divisione del segreto di Shamir e creare una funzione polinomiale di grado Schema di divisione del segreto di Shamir, che soddisfi questo punto. Ricordiamo che Schema di divisione del segreto di Shamir sarà la nostra soglia di frammenti richiesti, quindi se fissiamo la soglia a tre frammenti, dovremmo scegliere una funzione polinomiale di grado due.

Il nostro polinomio avrà la forma di Schema di divisione del segreto di Shamir, dove Schema di divisione del segreto di Shamir e Schema di divisione del segreto di Shamir — numeri interi positivi scelti casualmente. Stiamo semplicemente costruendo un polinomio di grado Schema di divisione del segreto di Shamir, dove il termine indipendente Schema di divisione del segreto di Shamir è il nostro segreto Schema di divisione del segreto di Shamir, e ciascuno dei successivi Schema di divisione del segreto di Shamir un membro ha un coefficiente positivo scelto casualmente. Se torniamo all'esempio originale e supponiamo che Schema di divisione del segreto di Shamir, allora otterremo una funzione Schema di divisione del segreto di Shamir.

A questo punto possiamo generare frammenti, connettendo Schema di divisione del segreto di Shamir numeri interi unici in Schema di divisione del segreto di Shamir, dove Schema di divisione del segreto di Shamir (perché è il nostro segreto). In questo esempio vogliamo distribuire quattro frammenti con una soglia di tre, quindi generiamo punti casualmente Schema di divisione del segreto di Shamir e ne inviamo uno a ciascuna delle quattro persone fidate, i custodi della chiave. Informiamo anche le persone che Schema di divisione del segreto di Shamir, poiché si tratta di un'informazione pubblica e necessaria per il recupero Schema di divisione del segreto di Shamir.

Recupero del segreto

Abbiamo già discusso il concetto di interpolazione polinomiale e del fatto che essa è alla base dello schema di Shamir Schema di divisione del segreto di Shamir. Quando tre delle quattro persone fidate vogliono recuperare Schema di divisione del segreto di Shamir, devono solo interpolare Schema di divisione del segreto di Shamir con i loro punti unici. Per farlo, possono definire i loro punti Schema di divisione del segreto di Shamir e calcolare il polinomio di interpolazione di Lagrange utilizzando la seguente formula. Se la programmazione ti è più chiara della matematica, allora pi è sostanzialmente un operatore per, che moltiplica tutti i risultati, e sigma è per, che somma tutto.

Schema di divisione del segreto di Shamir

Schema di divisione del segreto di Shamir

Durante Schema di divisione del segreto di Shamir possiamo risolvere in questo modo e restituire la nostra funzione polinomiale originale:

Schema di divisione del segreto di Shamir

Poiché sappiamo che Schema di divisione del segreto di Shamir, il recupero Schema di divisione del segreto di Shamir avviene in modo semplice:

Schema di divisione del segreto di Shamir

Utilizzo di aritmetica intera non sicura

Anche se abbiamo applicato con successo l'idea di base di Shamir Schema di divisione del segreto di Shamir, rimane un problema che abbiamo ignorato fino ad ora. La nostra funzione polinomiale utilizza aritmetica intera non sicura. Tieni presente che per ogni punto aggiuntivo che un aggressore ottiene sul grafico della nostra funzione, ci sono meno possibilità per altri punti. Puoi vederlo con i tuoi occhi quando costruisci un grafico aumentando il numero di punti per la funzione polinomiale utilizzando aritmetica intera. Questo è controproducente per il nostro obiettivo dichiarato di sicurezza, perché un malevolo non deve assolutamente sapere nulla finché non ha almeno Schema di divisione del segreto di Shamir frammenti.

Per dimostrare quanto sia debole lo schema con aritmetica intera, consideriamo uno scenario in cui un aggressore ha ottenuto due punti Schema di divisione del segreto di Shamir e conosce l'informazione pubblica che Schema di divisione del segreto di Shamir. Questa informazione può portare Schema di divisione del segreto di Shamir, pari a due, e collegare nella formula valori noti Schema di divisione del segreto di Shamir e Schema di divisione del segreto di Shamir.

Schema di divisione del segreto di Shamir

Successivamente, l'attaccante può trovare Schema di divisione del segreto di Shamir, calcolando Schema di divisione del segreto di Shamir:

Schema di divisione del segreto di Shamir

Poiché abbiamo definito Schema di divisione del segreto di Shamir come numeri interi positivi scelti casualmente, ci sono un numero limitato di possibili Schema di divisione del segreto di Shamir. Con queste informazioni, l'attaccante può dedurre Schema di divisione del segreto di Shamir, poiché tutto ciò che è maggiore di 5 renderà Schema di divisione del segreto di Shamir negativo. Questo risulta essere vero, poiché abbiamo definito Schema di divisione del segreto di Shamir

Successivamente, l'attaccante può calcolare i valori possibili Schema di divisione del segreto di Shamir, sostituendo Schema di divisione del segreto di Shamir in Schema di divisione del segreto di Shamir:

Schema di divisione del segreto di Shamir

Con un insieme limitato di opzioni per Schema di divisione del segreto di Shamir diventa chiaro quanto sia facile scegliere e verificare i valori Schema di divisione del segreto di Shamir. Qui ci sono solo cinque opzioni.

Risolvere il problema dell'aritmetica intera insicura

Per rimuovere questa vulnerabilità, Shamir suggerisce di utilizzare l'aritmetica modulare, sostituendo Schema di divisione del segreto di Shamir in Schema di divisione del segreto di Shamir, dove Schema di divisione del segreto di Shamir e Schema di divisione del segreto di Shamir — l'insieme di tutti i numeri primi.

Ricordiamo rapidamente come funziona l'aritmetica modulare. L'orologio con lancette è un concetto già noto. Utilizza un orologio che è Schema di divisione del segreto di Shamir. Non appena la lancetta dell'ora passa oltre le dodici, torna a uno. Una proprietà interessante di questo sistema è che guardando semplicemente l'orologio, non possiamo dedurre quante volte ha ruotato la lancetta dell'ora. Tuttavia, se sappiamo che la lancetta ha passato 12 quattro volte, possiamo determinare completamente il numero di ore passate utilizzando una semplice formula Schema di divisione del segreto di Shamir, dove Schema di divisione del segreto di Shamir — questo è il nostro divisore (qui Schema di divisione del segreto di Shamir), Schema di divisione del segreto di Shamir — è il coefficiente (quante volte il divisore si inserisce nell’originale senza resto, qui Schema di divisione del segreto di Shamir), e Schema di divisione del segreto di Shamir — è il resto, che generalmente restituisce la chiamata dell'operatore modulo (qui Schema di divisione del segreto di Shamir). Conoscere tutti questi valori ci consente di risolvere l'equazione per Schema di divisione del segreto di Shamir, ma se saltiamo il coefficiente, non saremo mai in grado di ripristinare il valore originale.

Si può dimostrare come questo miglioramenti la sicurezza del nostro schema applicando lo schema al nostro esempio precedente e utilizzando Schema di divisione del segreto di Shamir. La nostra nuova funzione polinomiale Schema di divisione del segreto di Shamir, e i nuovi punti Schema di divisione del segreto di Shamir. Ora i custodi della chiave possono utilizzare di nuovo l'interpolazione polinomiale per ripristinare la nostra funzione, solo questa volta le operazioni di somma e moltiplicazione devono essere accompagnate dalla riduzione modulo Schema di divisione del segreto di Shamir (e.g. Schema di divisione del segreto di Shamir).

Supponiamo che in questo nuovo esempio, l'attaccante abbia scoperto due di questi nuovi punti, Schema di divisione del segreto di Shamir, e le informazioni pubbliche Schema di divisione del segreto di Shamir. In questa occasione, l'attaccante, basandosi su tutte le informazioni in suo possesso, deduce le seguenti funzioni, dove Schema di divisione del segreto di Shamir — l'insieme di tutti i numeri interi positivi, e Schema di divisione del segreto di Shamir rappresenta il coefficiente del modulo Schema di divisione del segreto di Shamir.

Schema di divisione del segreto di Shamir

Ora il nostro aggressore trova di nuovo Schema di divisione del segreto di Shamir, calcolando Schema di divisione del segreto di Shamir:

Schema di divisione del segreto di Shamir

Poi cerca di nuovo di dedurre Schema di divisione del segreto di Shamir, sostituendo Schema di divisione del segreto di Shamir in Schema di divisione del segreto di Shamir:

Schema di divisione del segreto di Shamir

Questa volta ha un problema serio. La formula manca di valori Schema di divisione del segreto di Shamir, Schema di divisione del segreto di Shamir e Schema di divisione del segreto di Shamir. Poiché ci sono infinite combinazioni di queste variabili, non può ottenere ulteriori informazioni.

Ragioni di sicurezza

Lo schema di divisione del segreto di Shamir offre sicurezza dal punto di vista della teoria dell'informazione. Questo significa che la matematica è robusta anche contro un aggressore con potenza di calcolo illimitata. Tuttavia, lo schema presenta ancora alcuni problemi noti.

Ad esempio, lo schema di Shamir non crea frammenti verificabili, cioè le persone possono liberamente presentare frammenti falsi e ostacolare il recupero del segreto corretto. Un custode ostile dei frammenti con informazioni sufficienti può persino generare un altro frammento, modificando Schema di divisione del segreto di Shamir a proprio piacimento. Questo problema viene risolto tramite schemi di divisione del segreto verificabili, come lo schema di Feldman.

Un altro problema è che la lunghezza di ogni frammento corrisponde alla lunghezza del segreto corrispondente, quindi la lunghezza del segreto è facilmente determinabile. Questo problema viene risolto con una semplice riempimento del segreto con numeri arbitrari fino a una lunghezza fissa.

Infine, è importante notare che le nostre preoccupazioni per la sicurezza possono andare oltre lo schema stesso. Per le applicazioni crittografiche reali, esiste spesso la minaccia di attacchi tramite canali laterali, in cui un aggressore cerca di estrarre informazioni utili dal tempo di esecuzione dell'applicazione, dalla memorizzazione nella cache, dai crash, ecc. Se questo è motivo di preoccupazione, durante lo sviluppo dovrebbe essere attentamente considerato l'uso di misure protettive, come funzioni e ricerca con tempo di esecuzione costante, per evitare di salvare la memoria su disco, e riflettere su una serie di altre questioni che vanno oltre questo articolo.

Demo

A su questa pagina c'è una dimostrazione interattiva dello schema di divisione del segreto di Shamir. La dimostrazione è realizzata sulla base della libreria ssss-js, che è essa stessa un porting JavaScript del popolare programma ssss. Si prega di notare che il calcolo di valori elevati Schema di divisione del segreto di Shamir, Schema di divisione del segreto di Shamir e Schema di divisione del segreto di Shamir può richiedere del tempo.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster