Puncte:0

Ce informații sunt necesare pentru a fi stocate pentru cheia privată RSA pentru decriptare

drapel mx

eu folosesc rsa modul în Python. Folosesc următoarea linie pentru a genera cheia publică și privată:

(cheie_publică, cheie_privată) = rsa.newkeys(2048)

Și apoi criptez un mesaj folosind:

encrypted_msg = rsa.encrypt(the_msg, public_key)

Acum să presupunem că vreau să dau cuiva cheia privată, împreună cu mesajul criptat. Ce informații vor fi incluse în cheia privată pe care o dau celeilalte persoane? Dacă mă uit la cheie privată structura în codul Python, văd asta, de exemplu cheie_privată are următoarele câmpuri:

blindfac, blinffac_inverse, coef, d, e, exp1, exp2, mutex, n, p, q.

Trebuie să salvez și să transmit toate aceste date celeilalte persoane, astfel încât ea să poată decripta mesajul? Care sunt toate aceste variabile?

drapel ma
În RSA brut, cheia publică este (n, e) și cheia privată este (n, d). Toate celelalte variabile nu sunt necesare pentru matematică. Dar o anumită implementare de software ar putea folosi intens celelalte variabile pentru viteză, funcții suplimentare și alte motive.
user9278661 avatar
drapel mx
@Nayuki mulțumesc pentru răspuns. Este variabila `n` aceeași pentru cheile publice și private? Dacă este, atunci trebuie doar să treceți `d` ca cheie privată? De asemenea, care sunt celelalte variabile pe care le-am menționat în întrebare? Există vreo referință care explică aceste variabile?
drapel ma
(n = p * q) este într-adevăr partajat atât pentru cheile publice, cât și pentru cele private. Din nou, am spus că celelalte variabile sunt specifice implementării și trebuie să vă citiți singur.
SAI Peregrinus avatar
drapel si
„Acum să presupunem că vreau să dau cuiva cheia privată, împreună cu mesajul criptat.” DE CE… NU partajați NICIODATĂ o cheie privată, asta învinge scopul utilizării RSA. Rugați-i pe cealaltă persoană să genereze o pereche de chei și să vă dea cheia publică. Sau, mai bine, utilizați [age](https://age-encryption.org) pentru a obține câteva beneficii majore de securitate față de criptarea mesajelor cu RSA (este aproape întotdeauna o idee proastă să faceți asta).
Puncte:1
drapel in

În RSA, există diverse numere care sunt (un fel de) echivalente cu cheia privată, dar nu sunt cheia privată în sine. Acestea sunt numere pe care, dacă le cunoașteți, puteți calcula rapid restul cheii private. Unele dintre aceste numere îmbunătățesc viteza de semnare/decriptare a cheii private dacă le cunoașteți, astfel încât implementările RSA le păstrează adesea cu cheia privată pentru viteză.

Am căutat această implementare și am găsit următorul sens:

  • n este modulul, numărul modulo pe care se efectuează operațiile cu cheile.
  • e este exponent public, puterea la care este luat un mesaj pentru a-l cripta (sau a-i valida semnătura).
  • d este exponent privat. Luând un număr la putere d (modulo n) este operația inversă luării unui număr la putere e. Acest lucru se datorează faptului că în RSA, pentru orice $m$ in raza de actiune, $(m^e)^d \equiv (m^d)^e \equiv m \pmod n$.
  • p este factor mai mare de n.
  • q este factor mai mic de n. Faptul că este mai mic este important pentru sensul lui coef.
  • exp1 este $d \mod (p-1)$.
  • exp2 este $d \mod (q-1)$.
  • coef este $q^{-1} \mod p$. Este coeficient pentru tehnica de accelerare a CRT.
  • blindfac este un număr aleatoriu ales în timpul decriptării sau semnării. Este folosit în timpul acestor operațiuni pentru a ascunde valoarea numerelor private de atacurile de sincronizare și putere: pentru a „oarbe” atacuri de sincronizare.
  • blindfac_inverse este inversul lui blindfac modulo n, folosit pentru procesul de orbire.
  • mutex este intern implementării și nu este un număr. Se pare că este folosit pentru siguranța firelor de implementare.

Cheia publică este formată din numere n și e.

Cheia privată este formată din numere n și d; e este de obicei inclus pentru comoditate. Puteți face toate operațiunile cu doar d și cheia publică, dar este posibil să nu aibă performanțe optime.

p, q, exp1, exp2, și coef sunt suplimentare privat numere care, atunci când sunt furnizate, accelerează operațiunile de decriptare și semnare RSA. Vrei să păstrezi aceste numere dacă poți, dar nu sunt necesar. Pentru mai multe informații despre ceea ce fac acestea: Teorema chineză a restului și RSA

blindfac și blindfac_inverse sunt numere temporare generate de ORB() funcția în acea implementare Python RSA. Nu salvați aceste numere.

user9278661 avatar
drapel mx
Mulțumesc, acesta este un răspuns grozav. Puteți adăuga câteva referințe pentru a fi complet? Unde ai găsit explicația pentru acești parametri?
Myria avatar
drapel in
@user9278661 Hmm. Știam doar cum au fost folosite, iar linkul „CRT și RSA” este o referință pentru numerele suplimentare. Toate acestea sunt lucruri RSA foarte generice și nu sunt specifice pentru python-rsa. Pentru a înțelege anumite nume de variabile, am căutat codul sursă python-rsa: https://github.com/sybrenstuvel/python-rsa/blob/main/rsa/key.py

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.