Puncte:1

Conexiunea SSL oferă integritate?

drapel us

Sunt nou în criptografie și încerc să implementez o aplicație de chat securizată folosind OpenSSL.

Vreau să mă asigur că mesajele publice (care vor fi afișate tuturor utilizatorilor) nu pot fi modificate în timpul transmiterii.

Utilizarea conexiunii SSL garantează asta?

Dacă nu, utilizarea semnăturilor digitale pentru a semna fiecare mesaj, astfel încât să dovedească identitatea expeditorului ar fi o soluție adecvată?

dave_thompson_085 avatar
drapel cn
Chiar vrei să spui SSL, ale cărui ambele versiuni sunt acum sparte, sau TLS, protocolul folosit și implementat acum de multe lucruri (încă) numite pentru SSL, inclusiv OpenSSL? Ai citit eticheta „tls” pe care ai folosit-o? Treceți mouse-ul peste el pentru a vedea răspunsul la întrebarea dvs.
Gilles 'SO- stop being evil' avatar
drapel cn
@dave_thompson_085 Distingerea dintre SSL și TLS este o pedanterie inutilă. În practică, sunt sinonime. Se întâmplă că versiunile mai vechi (SSL 1, SSL 2, SSL 3) aveau un nume și o schemă de numerotare diferită față de versiunile mai noi (TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3). Multe biblioteci SSL nu mai acceptă SSL 3 și chiar și TLS 1.0 și 1.1 dispar, chiar dacă numele bibliotecii sau funcțiilor includ âSSLâ. Dacă unii întreabă despre âSSLâ și nu este în contextul software-ului moștenit sau al protocoalelor istorice, întrebarea este despre versiunile protocolului care se numesc TLS.
kelalaka avatar
drapel in
[O urmă de pachete SSL oferă o dovadă a autenticității datelor?](https://crypto.stackexchange.com/q/5455/18298)
Puncte:2
drapel cn

Da. O conexiune SSL asigură confidențialitatea și integritatea transmisiei: un adversar (cineva care nu este nici una dintre cele două părți care comunică) nu poate găsi sau verifica ce date au fost transmise și nu poate modifica datele transmise. Adversarul nu poate reda nici datele.

În ceea ce privește confidențialitatea, rețineți că un adversar poate observa ce mașină se conectează la ce mașină când și câte date sunt schimbate. Aceasta înseamnă că, deși adversarul nu poate cunoaște conținutul mesajelor, el poate fi capabil să ghicească cine vorbește cu cine. Confidențialitatea necesită măsuri de precauție suplimentare.

În ceea ce privește integritatea, rețineți că se bazează pe autenticitate. Integritatea garantează că atunci când Alice vorbește cu cineva, nimeni în afară de Alice și că cineva poate modifica datele pe care le schimbă. Dar dacă Alice a vrut să vorbească cu Bob, nu-i folosește de nimic că poate avea o comunicare nemodificată cu o parte neidentificată: trebuie să știe că are o comunicare nemodificată cu Bob. TLS este un protocol client-server și garantează întotdeauna autenticitatea serverului. Optional poate garanta autenticitatea clientului.

Atenție că versiunile TLS până la 1.2 au câteva suite de criptare neobișnuite, cu garanții de securitate reduse.În timp ce configurația implicită a tuturor bibliotecilor TLS majore dezactivează aceste suite de criptare în mod implicit, trebuie să aveți grijă să nu le activați accidental. TLS 1.3 are doar suite de criptare de securitate completă (reținând că autentificarea clientului este încă opțională, deoarece TLS este proiectat să accepte clienți necunoscuți care se conectează la servere cunoscute).

În cele din urmă, rețineți că TLS poate oferi doar garanții de securitate cu privire la transmisie. Este dificil pentru două mașini aleatorii de pe Internet să comunice direct, așa că chatul trece de obicei printr-un server central. Dacă vă bazați doar pe TLS între fiecare client și server, TLS securizează un mesaj în timp ce acesta este în tranzit între clientul 1 și server și atunci când este în tranzit între server și clientul 2. Dar depinde de software-ul serverului să garanteze securitatea mesajului între â de exemplu, că mesajul este direcţionat către destinatarul corect. Există protocoale mai sofisticate care pot garanta securitatea end-to-end a mesajelor, unul popular fiind Semnal. Aplicațiile care folosesc astfel de protocoale pot folosi în continuare TLS între hopuri. Acest lucru poate, de exemplu, ajuta la confidențialitate prin ascunderea informațiilor despre cine vorbește cu cine, sau poate ajuta la cheltuirea resurselor pentru rutarea mesajelor false care altfel ar fi abandonate doar atunci când ajung la destinatarul vizat).

Puncte:2
drapel my

TLS (numele corect pentru ceea ce numiți SSL) oferă garanții de integritate end-to-end; adică receptorul poate ști că ceea ce a primit este exact ceea ce a trimis expeditorul.

Cu toate acestea, este un protocol punct la punct; orice mesaj (recorder) este de la un anumit expeditor și către un anume receptor.

O modalitate de a-l privi este ca și cum ar fi o „țeavă” sigură; o parte poate pune ceva în țeavă, iar cealaltă parte îl poate scoate - nimeni altcineva nu se poate uita la ce a intrat în țeavă (în afară de faptul că a intrat ceva în țeavă) și nimeni altcineva nu poate modifica ceea ce este în țeavă (fără fiind detectat). Cu toate acestea, TLS nu oferă nicio garanție cu privire la ceea ce se întâmplă cu datele înainte ca acestea să intre în conductă sau ce se întâmplă cu ele odată ce părăsesc conducta.

Declari că ai mesaje publice; cum ajunge mesajul la mai mulți receptori? TLS vă oferă doar conexiuni punct la punct (conducte); cum transformi asta într-un sistem de difuzare? Expeditorul trimite mesajul către fiecare receptor folosind conexiuni TLS independente? Receptorul inițial transmite mesajul către ceilalți receptori? Expeditorul plasează mesajul într-o zonă comună care poate fi citită de diverșii receptori?

În primul caz, TLS ar oferi integritate de la capăt la capăt (presupunând că expeditorul poate fi de încredere că va trimite exact același mesaj - TLS nu face nimic pentru a verifica acest lucru).

În al doilea caz (mesajul este redirecționat), nimic nu împiedică receptorul inițial să modifice mesajul pe care îl redirecționează - dacă se poate avea încredere în el că nu va face asta, este în siguranță. Dacă nu se poate avea încredere în el, ar fi necesară o anumită protecție în afara TLS (cum ar fi o semnătură cu cheia publică a expeditorului).

În al treilea caz (mesajul plasat într-o zonă comună), TLS nu oferă nicio protecție - ai avea nevoie de ceva de genul unei semnături.

Puncte:1
drapel in

Da, TLS poate oferi criptare end-to-end, integritatea și autenticitatea mesajelor pentru transport - nu se numește Transport Layer Security fără un motiv.

Totuși, trebuie să stabiliți încredere ambelor părți: dacă nu puteți identifica clienții, atunci adversarul se poate masca drept una și probabil va primi și mesajul. În general, cu PKIX, oricum trebuie să aveți încredere în server (la fel ca și browserele), dar dacă nu o faceți, atunci un adversar se poate prezenta ca un server și poate trimite mesaje clienților; acest lucru nu va afecta confidențialitatea sau integritatea mesajelor în sine după configurarea sesiunii, dar nu este ceea ce vrei tu.

Autentificarea clientului este opțională pentru TLS, ceva care este de obicei omis pentru conexiunile browser-server. Pentru ex. magazine online aceasta nu este o problemă: vă autentificați folosind o parolă (care poate să nu fie foarte sigură), dar dacă plătiți, vă autentificați la banca dumneavoastră. Cu toate acestea, pentru o aplicație de chat este posibil să doriți să autentificați și clientul folosind un certificat de client. Dacă un astfel de PKI este imposibil, o puteți face în același mod ca în browser: mai întâi conectați-vă la un server și apoi autentificați clientul folosind conexiunea, pentru care serverul este deja autentificat.

De asemenea, aveți grijă că, dacă sfârșitul conexiunii nu este la server sau client, aveți, practic, criptare punct la punct; ar trebui să aveți încredere și în părțile intermediare/conexiunile nesecurizate.


Note:

  • Poate fi o idee bună să priviți de ex. protocolul Signal, care este mai orientat către obiectivul aplicațiilor de chat;
  • Aș recomanda cu tărie TLS 1.3 dacă optați pentru TLS;
  • Atenție că puține sau deloc protocoale criptografice sunt protejate împotriva computerelor cuantice, așa că, dacă doriți să păstrați secretele mai mult de 10 ani, trebuie să căutați mai profund.
Maarten Bodewes avatar
drapel in
Hmm, cumva acea „integritate” s-a tradus în „confidențialitate” când scriam asta... Ciudat cum mintea umană uneori (nu funcționează).
Puncte:0
drapel bd

Și eu sunt nou în domeniul criptografiei, dar recent lucrez la un proiect SSL. Iată mai multe detalii în instrucțiunile despre un proces de strângere de mână SSL (TLS 1.2 și TLS 1.3)

Procesul de strângere de mână SSL generează o cheie de simetrie utilizând criptarea asimetrică.

Înainte de pasul de schimb de chei, clientul sau serverul (sau ambele) va verifica identitatea celuilalt, care este definită în tls_process_cert_verify(). Și serverul va trimite clientului o semnătură a tamponului de strângere de mână.

După pasul de schimb de chei, ei obțin secretul lor principal pentru a genera cheia principală (cheia de simetrie), care este folosită pentru a proteja datele aplicației.

Deci, iată proprietatea CIA:
confidențialitate: cheia principală criptează datele aplicației.
Integritateï¼ Hash de tampon de strângere de mână
Autenticitate: verificarea certificării și semnătura tamponului de strângere de mână.

Puteți urmări funcția SSL_Handshake() pentru a afla toate lucrurile care s-au întâmplat în timpul generării cheii principale.

Când strângerea de mână este făcută. Stratul de înregistrare TLS utilizează hmac pentru a proteja integritatea sesiunii.

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.