2011-07-20 8 views
5

Używam implementacji JavaScript RSA from this webpage i wygenerowałem tam mój klucz. Jako taki, mam p, q, publiczny wykładnik, publiczne modulo, prywatny wykładnik i prywatną odwrotność.Odszyfrowywanie danych RSA w .NET z tylko kilkoma wartościami

Jak korzystać z .NET? RSACryptoServiceProvider do odszyfrowania tekstu zaszyfrowanego za pomocą tylko tych wartości? Dokumenty .NET zawierają trzy inne pola; DP, DQ i InverseQ których nie jestem pewien, jak dostarczyć.

Odpowiedz

5

Istnieją dwie reprezentacje klucza prywatnego RSA (patrz PKCS#1).

Pierwsza reprezentacja składa się z pary (n, d), druga reprezentacja składa się z pięciokrotnego (p, q, dP, dQ, qInv). Klucz publiczny jest reprezentowany jako (n, e).

  • n jest moduł publicznego
  • p i q są obydwa bodźce
  • d jest wykładnik prywatny
  • e oznacza wykładnik publiczny
  • DP chińskiego współczynnik pozostająca Twierdzenie wartości p (E · dP ≡ 1 (mod (P - 1)))
  • dQ jest współczynnik CRT Q. (e · dQ ≡ 1 (mod (P - 1)))
  • qInv jest współczynnikiem CRT dodatnią liczbą całkowitą mniejszą od P, taki th w q · qInv ≡ 1 (mod p)

Każda z dwóch prywatnych reprezentacji kluczem jest „kompletna”, tzn wystarczy tylko jeden z nich, aby móc wykonać obliczeń RSA. Ponieważ jesteś w posiadaniu wszystkiego, co jest niezbędne do pierwszej reprezentacji, wystarczy ustawić te parametry (np. N, p, q, e, d) na instancji RSAParameters i pominąć resztę.

+0

Generator klucza Javascript tworzy tablicę 28-bitowych liczb całkowitych. Czy poprawne jest rozszerzenie ich do 32 bitów i przedstawienie ich jako małych endianów przy konwersji ich na tablicę bajtów? –

+0

Aby być po bezpiecznej stronie, użyłbym BigInteger # Parse (String)? – emboss

1

This Wikipedia page wydaje się zawierać instrukcje dotyczące sposobu obliczania tych parametrów, a mianowicie

Wartości DP, DQ i qInv, które są częścią klucza prywatnego obliczane są w następujący sposób:

dp = d mod (p − 1) 
dq = d mod (q − 1) 
qInv = q^−1 mod p 
Powiązane problemy