Shamir's Secret Sharing è un buon algoritmo per dividere un valore segreto in più parti e consentire il recupero con una soglia ; significa che dividi (per esempio) il segreto in dieci condivisioni , in modo tale che tre parti siano sufficienti per ricostruire il segreto.
Questo richiede due commenti:
-
Il vantaggio principale dell'algoritmo è il suo meccanismo di soglia; non ha molto senso se sono necessarie tutte le condivisioni per ricostruire il segreto. Nello scenario descritto, con le chiavi SSH, non è chiaro cosa significherebbe questo meccanismo di soglia. C'è è uno scenario in cui vuoi qualcosa di simile (l'ho visto distribuito in produzione, vedi sotto) ma coinvolge diversi proprietari di chiavi.
-
Sebbene le condivisioni siano separate, il processo di ricostruzione deve avvenire, per necessità, su una singola macchina che ottiene, a un certo punto, il segreto stesso. In particolare, se si esegue il riassemblaggio su una macchina che è malvagia (ovvero che è sotto il controllo di un utente malintenzionato attraverso malware subdolo), l'utente malintenzionato viene a conoscenza della chiave privata SSH e si perde.
Lo scenario in cui il meccanismo di soglia con SSH ha senso è il seguente: c'è un server molto sensibile da qualche parte (una Certification Authority ), che non deve mai essere amministrato da un singolo amministratore senza alcun testimone. Tuttavia, il server è remoto e alcune amministrazioni remote devono ancora essere eseguite. Quindi l'idea è di avere una chiave privata speciale, autorizzata per l'accesso root (la chiave pubblica è in /root/.ssh/authorized_keys
). La chiave privata corrispondente dovrebbe essere accessibile solo su una macchina che si presume sicura (una macchina dedicata per l'attività e tenuta al sicuro attraverso il normale meccanismo - in tal caso, un sistema Linux con procedure sysadmin sane). Quando deve essere eseguita l'amministrazione remota, un quorum del proprietario chiave collabora, inserisce le loro "condivisioni" sulla macchina e quindi sblocca la chiave privata. Mantengono il sysadmin sotto controllo visivo per l'intera durata della procedura di amministrazione.
In tale scenario, uno schema di condivisione segreta avrebbe senso. Tuttavia, le "condivisioni" sono grandi valori numerici, che devono essere memorizzati su dispositivi fisici, non nel cervello umano; questo era scomodo Inoltre, il normale software client SSH non consente il collegamento di sistemi di condivisione segreta arbitrari (non facilmente almeno). Quindi la soluzione pratica era la seguente: la chiave privata era memorizzata più volte, ogni volta protetta da una password divisa in due metà; ogni umano conosceva solo la metà. Se ci sono proprietari di condivisioni n , la chiave privata deve essere crittografata con password n (n-1) / 2 volte (quindi con n = 5 , questo significa 10 copie della chiave privata, criptate ciascuna con una combinazione di due metà della password). Quando è necessario eseguire l'amministrazione remota, due proprietari di chiavi selezionano il corrispondente file di chiave privata crittografato; ogni proprietario digita la sua password a metà e la connessione si verifica.
Il sistema funziona in pratica. Non scala bene (con i proprietari di chiavi n e il quorum di t , richiede O (n t ) file crittografati, per tutte le combinazioni), ma per valori piccoli è perfettamente funzionante.