Puncte:3

Criptați/Cifrați și Decriptați/Decifrați un șir cu un secret

drapel cn

În dezvoltarea unei aplicații, am un caz de utilizare simplu în care vreau să criptez/cifrez un șir (ar putea fi, de asemenea, câțiva octeți, deoarece este în esență doar o adresă IP). La ieșire cred că cel mai bine ar fi să aveți un șir hexadecimal (ne gândim la vechile hash-uri md5). Nimeni care nu are cheia privată nu ar trebui să poată decripta/descifra adresa IP.

Fluxul este următorul: am un șir (adresă IP de la o rețea VPN) și îl criptez cu o cheie privată (ar trebui să existe o singură cheie privată, nicio cheie publică sau altceva). Un utilizator primește șirul criptat, se conectează la aplicația mea și mi-l trimite înapoi, astfel încât să pot asocia utilizatorul cu adresa IP. Adresele IP ar trebui să rămână private și doar în mâna mea.

Știe cineva dintre voi familiarizat cu criptografie cum să efectueze acest tip de criptare/cifrare sau care metodă funcționează bine aici? Sunt dispus să depun un efort pentru a citi despre cum să îndeplinesc această sarcină, dar aș aprecia dacă cineva m-ar putea ghida puțin cu cunoștințele sale în ce direcție ar trebui să merg în acest domeniu confuz.

Salutări calde

Maarten Bodewes avatar
drapel in
Se pare că doriți doar să utilizați un cifru simetric, probabil folosind un mod autentificat precum AES-GCM. Apropo, se pare că doriți ca cheia dvs. să fie prezentă în timpul criptării și decriptării: de obicei numim o cheie **secretă**, nu o cheie **privată**, deoarece v-ați aștepta la o cheie privată doar într-o singură locație .
Maarten Bodewes avatar
drapel in
Rețineți că rezultatul cifrurilor moderne este format din binari, de obicei octeți. Acei octeți pot fi reprezentați sau codificați ca text folosind - de exemplu - hexazecimale sau base64url. Cu toate acestea, codificarea/decodificarea nu este considerată parte a algoritmilor criptografici (deși, desigur, ar putea face parte dintr-un protocol care implică criptografie). De exemplu, ieșirea algoritmului MD5 învechit este de 128 de biți / 16 octeți, dar rezultatul instrumentului de linie de comandă `md5sum` constă din hexazecimale și o indicație de fișier.
poncho avatar
drapel my
Utilizatorul introduce manual șirul? Dacă da, este important să fie scurt. Pe de altă parte, dacă adresa IP despre care vorbim este o adresă IPv6, aceasta are deja 128 de biți și, prin urmare, a face șirul „scurt” poate fi imposibil cu această abordare - o abordare alternativă ar putea fi abordarea „tinyURL” - cereți serverului să păstreze o bază de date cu „etichete” și „adrese IP” și să distribuie etichetele pentru utilizator.
fonzane avatar
drapel cn
Utilizatorul nu introduce manual șirul. Îl codez într-un QR-Code. Soluția mea acum este să folosesc modulele cripto încorporate nodejs createCipheriv cu un algoritm aes256. Singura mea îndoială cu această abordare acum este că șirul de ieșire este atât de lung, s-ar putea să nu vreau să îl pun într-o adresă URL...
Maarten Bodewes avatar
drapel in
Din păcate, a oferi un răspuns bun ar include o analiză completă a situației dvs. Cu toate acestea, pot spune că `createCipheriv` folosește doar CBC, care nu este atât de eficient din cauza umpluturii. De asemenea, ar trebui să vedeți cum să codificați textul simplu în numărul minim de octeți. De exemplu. o adresă IPv4 ar putea dura doar 4 octeți (și chiar mai puțin dacă este întotdeauna pe LAN 10.x.x.x, bineînțeles, deoarece ai putea omite cei 10).

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.