Puncte:1

Design de chat criptat de la capăt la capăt

drapel au

Sunt în curs de a crea o aplicație flutter care va include mesagerie directă. Puteți trimite mesaje unei persoane sau unui grup de persoane. Vreau ca toate acestea să fie criptate pentru confidențialitate.

Metoda la care mă gândeam este să fac un sistem hibrid RSA, AES. La înregistrare, o pereche de chei RSA va fi generată și cheia publică va fi trimisă la baza de date pentru stocare. Apoi, atunci când utilizatorul dorește să trimită un mesaj cuiva, va solicita celorlalte persoane cheia publică și va crea o cheie AES-256 pentru criptarea oricăror mesaje. Apoi, atunci când utilizatorul dorește să trimită mesajul acesta va fi criptat cu AES și cheia AES va fi criptată cu RSA, astfel încât receptorul să poată decripta mesajul.

Problema cu care mă confrunt este că vreau ca utilizatorul să poată sincroniza mesajele pe toate dispozitivele. Am avut ideea de a genera cheile publice și private dintr-o frază mnemonică și apoi să o folosesc pentru recuperare.

Cu toate acestea, acest lucru nu rezolvă problema recuperării AES.Nu sunt sigur dacă stocarea cheii AES în baza de date pentru fiecare cameră de chat este sigură, chiar dacă este criptată cu RSA. Ar trebui stocată o cheie AES criptată pentru fiecare persoană implicată în chat.

Daca cineva are recomandari sau sfaturi va rog sa-mi spuneti.

fgrieu avatar
drapel ng
Te gândești la criptarea hibridă. De obicei, cheia AES este extrasă aleatoriu pentru fiecare mesaj și nu este stocată în clar nicăieri: este stocată de-a lungul sau lângă mesajul criptat AES și criptată folosind cheia publică a fiecărui destinatar, inclusiv cheia (cheile) publică autorul postului. Printre dificultățile a ceea ce plănuiți este distribuirea sigură a cheilor. „Generarea cheilor publice și private dintr-o frază mnemonică” se poate face, dar utilizatorii aleg parole/fraze de acces slabe, astfel încât, la minimum, doriți ca întinderea cheii să încerce să compenseze asta. Există și alte opțiuni.
Maarten Bodewes avatar
drapel in
Acest lucru poate fi „rezolvat” în numeroase moduri. Am pus „rezolvat” între ghilimele pentru că întotdeauna există un anumit nivel de încredere cerut față de prezentarea serviciului. Generarea perechii de chei RSA dintr-o „sămânță” este de ex. acoperit [aici](https://crypto.stackexchange.com/a/30216/1172) și notează cea mai eficientă opțiune [în celălalt răspuns](https://crypto.stackexchange.com/a/30228/1172) . Pentru a crea sămânța, ați folosi un PBKDF pentru a oferi întinderea menționată mai sus.
Matrix avatar
drapel au
@fgrieu Dacă stochez cheia AES individuală a fiecărei persoane, criptată de propria cheie publică, dacă cineva este capabil să spargă acea criptare, atunci toate mesajele ar cădea indiferent dacă folosesc o cheie AES pentru mesaje sau una nouă pentru fiecare dintre ele. problema mea. Motivul pentru care mă gândeam să stochez cheile AES în baza de date este astfel încât utilizatorul să poată accesa cu ușurință mesajele pe un dispozitiv nou, doar importând mnemonicul lor. De asemenea, pentru mnemonicul folosesc bip39, astfel încât utilizatorii nu generează mnemonicul.
crypt avatar
drapel cn
puteți utiliza algoritmul dublu clichet de la Signal pentru a oferi criptare de la capăt la capăt. Implementarea Java a protocolului Signal este la https://github.com/signalapp/libsignal-protocol-java

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.