Puncte:0

Cum pot folosi o schemă de partajare a secretelor când secretul nu este un număr, ci o declarație?

drapel ua

Vreau să folosesc o schemă de partajare secretă, în care fiecare jucător $i\în N$ trebuie să împărtășească o pereche de secrete $(l_i,\nu_{l_i})$, Unde $l_i$ este un cod unic (întreg pozitiv) pentru fiecare jucător, dar $\nu_{l_i}$ este un secret ca o declarație. De exemplu, când jucător $i$ raportează celorlalți jucători $\nu_{l_i}$ este ca și cum ai face o declarație de forma „Numele meu este $i$ si stiu informatia $\nu_i$."

Gândurile mele inițiale au fost că am nevoie de o funcție polinomială de grad $k-1$ pentru fiecare jucător $i$ pentru a partaja codul $l_i$ cu orice alt jucător $j=-i$, dar știind l_i trebuie să implice că un alt jucător va învăța și el $\nu_{l_i}$ după reconstruirea codului $l_i$. Cum aș putea face asta să funcționeze cu partajarea secretă?

Hunger Learn avatar
drapel ua
Ei bine, o idee, deși nu știu cum s-ar putea aplica acest lucru, este de a defini matematic un cifr care poate traduce fiecare cuvânt al declarației dvs. într-un număr. Deci, atunci cred că veți avea un cod de divizare și un mesaj codificat.
drapel ar
Strâns legat de: [Partajarea secretă a lui Shamir pentru vectori](https://crypto.stackexchange.com/questions/70024/shamirs-secret-sharing-for-vectors)
Puncte:1
drapel ar

Cea mai simplă soluție este:

  1. codificați fraza secretă în unul sau mai multe numere și
  2. 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:

  1. 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.

  2. 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.

Hunger Learn avatar
drapel ua
deci vrei să spui că această afirmație care are 10 cuvinte, am putea avea 10 spații pentru fiecare secret, spune $S=\times_{i=1}S_i^{10}$ și folosim 10 funcții polinomiale pentru fiecare dintre ele?
Hunger Learn avatar
drapel ua
Ei bine, habar n-am cum să modelez asta matematic... schema de autentificare și cum să definesc modul de operare... Am nevoie de structura matematică....
drapel ar
Ar fi de ajutor să știți cu care dintre cei doi pași din răspunsul meu de mai sus aveți probleme. Sunt pași complet separați: pasul 1 nu implică partajarea secretelor (și, prin urmare, polinoame etc.), în timp ce pasul 2 implică doar un număr secret (sau, mai degrabă, îl aplicați separat fiecăruia dintre numerele pe care le-ați obținut la pasul 1) . Probabil că este mai simplu decât crezi.
Puncte:0
drapel ua

Soluţie $1$: Fiecare cuvânt este tradus într-un număr cu ajutorul unui cifr. Spune asta $C$ este o astfel de mapare care ia un cuvânt și îl traduce într-un număr, și anume $C:A\la\mathbb{N}$, Unde $A$ este un alfabet. În declarația ta „Numele meu este $i$ si stiu informatia $\nu_i$." Tu ai $10$ cuvinte și anume 10 coduri $x_1,...,x_{10}$. Apoi fiecare jucător ar putea trimite 10 acțiuni diferite $(a_{j,k},b_{j,k})_{k=1}^{10}$ oricărui alt jucător $j$ unde fiecare pereche este un punct al unei anumite funcții polinomiale de grad $t-1$, $(f_{i,k})_{k=1}^{10}$. Dacă jucătorii colaborează și își împărtășesc părțile din fiecare funcție polinomială, ei vor reconstrui $10$ funcţiile de $i$. Apoi va învăța $10$ numere care pot reconstrui afirmația. Utilizați o schemă de decriptare pentru fiecare dintre $10$ numere și vei lua ce vrei.

Soluţie $2$: O altă idee care are sens din perspectivă matematică. Spune asta $E_i(k_i,\nu_{l_i})=l_i$ este funcția de criptare astfel încât

$$E_i:K_i\times N_{L_i}\la L_i$$

și fiecare pereche $(k_i,l_i)$ este asociat doar cu unul $\nu_{l_i}$, și anume bijectiv $E_i$. În plus, funcția de decriptare este $$D_i:K_i\times L_i\to N_{L_i}$$

și, prin urmare $D(k_i,l_i)=D(k_i,E_i(k_i,\nu_{l_i}))=\nu_{l_i}$

Pentru cod puteți folosi o aplicație simplă a schemei Shamir, așa cum ați spus. Mai întâi jucătorii vor învăța $(x_i,y_i)$ care sunt puncte ale funcției polinomiale de grad $t-1$ si codul $k_i$, aceasta este, de asemenea, o cheie și, prin urmare, după ce colaborează pentru a calcula secretul $l_i$ acest $l_i$ este util pentru decriptare $\nu_{l_i}$. Așa l-ai putea calcula pe unul din celălalt. În partea pe care o spui, că $l_i$ este un cod și $\nu_{l_i}$ o declarație, rețineți că fiecare cuvânt al declarației este tradus în acest cod. Prin urmare prin învățare $l_i$, aceasta înseamnă că întreaga declarație este decriptată.

Hunger Learn avatar
drapel ua
Nu știu dacă ceva din ceea ce spun are sens. Dar, cred că există o explicație logică în gândurile mele. Vă rog, orice critică este binevenită. Mă va ajuta și pe mine să înțeleg dacă am dreptate sau greșit.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.