Cea mai simplă soluție este:
- codificați fraza secretă în unul sau mai multe numere și
- apoi partajați fiecare dintre acele numere folosind o schemă de partajare secretă.
De fapt, dacă fraza ta secretă este stocată pe un computer, prima parte este deja îngrijită: computerele stochează de obicei date, inclusiv text, ca secvențe de octeți de 8 biți – adică numere de la 0 la 255.
Atâta timp cât nu trebuie să generați mai mult de 255 de partajări ale vreunui secret, puteți trata acești octeți ca elemente ale GF(28) și partajați-le folosind Schema de partajare secretă a lui Shamir (sau orice altă schemă similară de partajare secretă pe care o preferați).
Poți chiar utilizați în siguranță același ID de partajare (adică $x$ coordonate) pentru fiecare octet al frazei partajate, astfel încât partajările dvs. să fie mai lungi cu un octet decât fraza secretă. (Totuși, vor fi date binare aleatorii, așa că poate fi necesar să, de ex. Baza 64 codificați-le pentru transport ca text.) Și împărtășirea secretă a lui Shamir prin GF(28) se poate face foarte rapid, deoarece toate calculele se fac folosind doar un singur octet. Din aceste motive, destul de multe implementări ale partajării secrete a lui Shamir fac exact acest lucru.
Metoda de partajare octet cu octet descrisă mai sus are câteva dezavantaje:
Dezvăluie lungimea octetului frazei secrete. Dacă aceasta este o problemă, expresia ar trebui să fie într-un fel reversibil la o lungime fixă înainte de partajare.
Din motive matematice (adică pentru că fiecare acțiune are nevoie de un element distinct de câmp diferit de zero ca sa $x$ coordona) it nu poate fi folosit pentru a genera mai mult de 255 de acțiuni distincte pentru fiecare secret. Dacă acest lucru nu este suficient, puteți, de ex. împărțiți cota în perechi de octeți și partajați-l folosind schema lui Shamir peste GF(216) pentru până la 65535 de acțiuni sau împărțiți-l în grupuri de patru octeți și partajați-i prin GF(232) pentru până la aproximativ 4 milioane de acțiuni.
(Bineînțeles că ați putea folosi dimensiuni de câmp și mai mari, sau chiar dimensiuni care nu sunt puteri de 2, dacă doriți. Dar, în general, există puține motive pentru a face acest lucru, cel puțin nu atunci când partajați date binare, ceea ce sunt în cele din urmă toate datele stocate pe un computer binar.)
Desigur, dacă nu insistați asupra unei securități perfecte teoretice a informațiilor, o altă opțiune practică este generarea unei chei aleatorii (de ex. 128 sau 256 de biți) pentru o schemă de criptare simetrică precum AES,* criptați secretul dvs. folosind cheia, apoi partajați cheia.
Acest lucru poate fi avantajos dacă secretul dvs. real este foarte lung (să zicem, un fișier video) și dacă puteți publica secretul criptat pe un canal partajat, de atunci singurul lucru pe care va trebui să-l trimiteți separat fiecărui acționar este cota lor de cheia (care va avea doar câțiva octeți).
*) Folosind un securizat mod de operare, desigur. În general, aș recomanda un criptare autentificată mod ca SIV, dar chiar și un mod clasic neautentificat precum CBC sau CTR poate fi suficient pentru nevoile dvs. Doar nu folosi ECB.