2.5 KiB
RSA
-
p * q = n
-
Coprime Phi is calculated either by Euler Totient or greatest common divisor via euclidean algorithm
-
\(1 <
\phi
< n \) -
There is also
\phi
= (p-1) * (q-1) -
Encryption, public key
e
is a prime between 2 and phi --> \( 2 < e <\phi
\)
possible_e = []
for i in range (2, phi):
if gcd(n, i) == 1 and gcd(phi, i) == 1:
possible_e.append()
- Decryption, private key
d
--> \( d * e mod\phi
= 1 \)
possible_d = []
for i in range (phi + 1, phi + foo):
if i * e mod phi == 1 :
possible_d.append()
- \( Cipher = msg ** d mod
\phi
\) - \( Cleartext = cipher ** e mod
\phi
)
Euklid
Just a short excourse:
A greatest common divisior out of an example a = 32 and b = 14 would be the groups of the following divisors
a = 32, b = 24
a = {1, 2, 4, 8, 16}
b = {1, 2, 3, 8, 12}
gcd(a,b) = 8
Greatest Common Divisor (GCD)
Two values are prime and have themselves and only 1
as a divisor are called coprime.
To check if a and b have a greatest common divisor do the euclidean algorithm.
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
Extended GCD
#TODO
Fermat's Little Theorem
If modulus p
is a prime and and modulus n
is not a prime, p defines a finite field (ring).
n \in F_{p} \{0,1,...,p-1\}
The field consists of elements n
which have an inverse m
resulting in n + m = 0
and n * m = 1
.
So , n^p - n
is a multiple of p then n^p \equiv n\ mod\ p
and therefore n = n^p\ mod\ p
. An example
4 = 4^{31}\ mod\ 31
Further, p
while still a prime results in 1 = n^{p-1} mod\ p
. An example
1 = 5^{11-1}\ mod\ 11
Modular Inverse
Coming back to the modular inverse n
, it can be found in the following way
n^{p-1} \equiv 1\ mod\ p
n^{p-1} * n^{-1} \equiv n^{-1}\ mod\ p
n^{p-2} * n * n^-1 \equiv n^{-1}\ mod\ p
n^{p-2} * 1 \equiv n^{-1}\ mod\ p
n^{p-2} \equiv n^{-1}\ mod\ p
Quadratic Residue
m
is a quadratic residue when \pm n^2 = m\ mod\ p
with two solutions.
Otherwise it is a quadratic non residue.