• Aucun résultat trouvé

5 - The RSA algorithm

N/A
N/A
Protected

Academic year: 2022

Partager "5 - The RSA algorithm"

Copied!
5
0
0

Texte intégral

(1)

Concepts in Abstract Mathematics

5 - The RSA algorithm

Jean-Baptiste Campesato

1 Introduction

How can someone send a secret message in a way that only the recipient could read the content even if the message happens to have been intercepted by a third party? There are several ways to do so.

Early cipher algorithms relied on a unique key which had to be used both by the sender to encrypt the message and by the recipient to decrypt it. A very simple example is Caesar’s cipher which consists in shifting letters according to the key.

𝒜 ℬ 𝒞 𝒟

ℰ ℱ

𝒢 ℋ ℐ 𝒥

ℒ 𝒦

ℳ𝒩

𝒫 𝒪

𝒬 ℛ 𝒮

𝒯

𝒰 𝒱

𝒲

𝒳 𝒴 𝒵

𝒜

ℬ𝒞𝒟ℰ ℱ 𝒢 ℋ ℐ𝒥 𝒦ℒ

ℳ 𝒩 𝒫 𝒪

ℛ𝒮 𝒬

𝒱𝒲 𝒯𝒰 𝒴 𝒳

𝒵

6

Figure 1: Caesar ciphering with key=6

A major weakeness of such a system is that the key has to be disclosed to all the participants, increasing the risk for the key to be compromised by a third party.

Asymmetric algorithms allow to reduce this weakeness by using two keys: a public key which is used to encrypt messages and which can be widely shared without compromising the exchanges, and a private key which is kept only by the recipient to decrypt the data. The idea is that anyone can encrypt messages using the public key but only the recipient can decrypt them with his private key. Particularly, the knowledge of the public key should not be enough to decrypt messages.

Message in clear Encrypted message Message in clear

Public key Private key

Asymmetric cryptographic systems were theoretically developed in the mid 70s and the first concrete algorithm of this kind was the RSA algorithm which appeared in 1978 and is named from the initials of its authors (Ron Rivest, Adi Shamir, and Leonard Adleman). Actually, the British secret service developed a similar algorithm as early as 1973 but it was kept confidential until the 90s.

In this chapter, we are going to explain the RSA algorithm which relies on modular arithmetic. The original proof of work used Fermat’s little theorem but the RSA algorithm is actually easier to explain using Euler’s theorem (which is a generalization of Fermat’s little theorem, as you already know).

(2)

The robustness of this cipher relies on the fact that we don’t know yet an efficient algorithm in order to find the prime decomposition of a given positive integer. This last difficult problem will not be addressed in this chapter.

2 Generation of the keys

The recipient, that we will call Alice, picks two distinct prime numbers𝑝and𝑞. She sets𝑛 ≔ 𝑝𝑞and then she chooses𝑒 ∈ ℕsuch that gcd(𝑒, 𝜑(𝑛)) = 1. Then the public key is(𝑛, 𝑒). Alice can publicly provide this key to people willing to send her a crypted message.

Since gcd(𝑒, 𝜑(𝑛)) = 1, 𝑒admits a multiplicative inverse modulo𝜑(𝑛), i.e. there exists𝑑 ∈ ℕsuch that 𝑒𝑑 ≡ 1 (mod 𝜑(𝑛)). Indeed, there exist𝑢, 𝑣 ∈ ℤ such that 𝑒𝑢 + 𝜑(𝑛)𝑣 = 1(and we can easily find such a Bézout’s relation using Euclid’s algorithm). Then we take𝑑 = 𝑢 + 𝑘𝜑(𝑛) for a suitable𝑘 ∈ ℤfor𝑑 to be positive. Then the private key is(𝑛, 𝑑). Alice should not share this key with anyone else.

Note that in order to find a suitable𝑑, it is necessary to know𝜑(𝑛)and𝑒. Alice knows the prime numbers 𝑝and𝑞that she used to define𝑛so she can easily compute𝜑(𝑛) = (𝑝 − 1)(𝑞 − 1). But the shared information is only the public key(𝑛, 𝑒). Although it is theoretically possible to find𝜑(𝑛), there is no known efficient algorithm to compute𝜑(𝑛)directly from𝑛. Nonetheless, if a third party were able to quickly compute the prime factorization of a positive integer, then it could computes𝜑(𝑛)allowing him to recover(𝑛, 𝑑)from (𝑛, 𝑒).

The prime numbers𝑝 and𝑞 should be chosen wisely so that there is no known efficient algorithm to recover𝑝and𝑞from𝑛using our current computing power. For instance, not only𝑝and𝑞 should be large enough but𝛿 = |𝑝 − 𝑞|should be large too. Indeed, assume that𝑝 < 𝑞then𝑞 = 𝑝 + 𝛿. Thus√𝑛 = 𝑝√1 +𝛿𝑝 ∼ 𝑝 +𝛿2. Hence, according to Proposition 3 of Chapter 3, it is enough to check whether numbers less than√𝑛 divides𝑛, and from the above estimation,𝑝could be obtained after less than 𝛿

2attempts (starting from√𝑛).

3 How to encrypt a message

The sender, that we are going to call Bob, wants to send a secret message to Alice. But he wants to make sure that only her can read the content. First, Bob obtains her public key(𝑛, 𝑒).

A message is going to be an element of𝑚 ∈ {0, 1, … , 𝑛 − 1}(in practice, Alice and Bob need to agree on how to reduce a human readable message into a sequence of natural numbers less than𝑛, that’s the goal of the various protocols used in computer sciences).

Then, there exists a unique𝑐 ∈ {0, 1, … , 𝑛 − 1}such that𝑐 ≡ 𝑚𝑒 (mod𝑛). It is going to be the crypted message. Bob sends𝑐to Alice, and Alice will use her private key in order to recover𝑚from𝑐.

4 How to decrypt a message

Alice just received the secret message 𝑐 from Bob. He told her that it was encrypted using her public key(𝑛, 𝑒). Since she knows her private key(𝑛, 𝑑), Alice can find the unique𝑘 ∈ {0, 1, … , 𝑛 − 1}such that 𝑘 ≡ 𝑐𝑑(mod𝑛).

We claim that𝑚 = 𝑘. Indeed, since𝑒𝑑 = 1 + 𝑙𝜑(𝑛)for some𝑙 ∈ ℕ, we obtain using Euler’s theorem that 𝑘 ≡ 𝑐𝑑 (mod𝑛) ≡ 𝑚𝑒𝑑 (mod𝑛) = 𝑚1+𝑙𝜑(𝑛)(mod𝑛) ≡ 𝑚 × (𝑚𝜑(𝑛))𝑙 (mod𝑛) ≡ 𝑚 × 1𝑙(mod𝑛) ≡ 𝑚 (mod𝑛) We conclude since𝑘has a unique representative in{0, 1, … , 𝑛 − 1}and𝑚, 𝑘 ∈ {0, 1, … , 𝑛 − 1}.

(3)

Note that the above proof doesn’t work when gcd(𝑚, 𝑛) ≠ 1, i.e. when𝑝|𝑚or𝑞|𝑚(because we can’t apply Euler’s theorem). Nonetheless, it is still true that𝑚𝑒𝑑 ≡ 𝑚 (mod𝑛)in this case (you will prove it during next week tutorials).

5 An example

Alice wants to create a pair of keys for the RSA algorithm so that people could send her secret messages.

She picked the prime numbers𝑝 = 13and𝑞 = 17then𝑛 = 221and𝜑(𝑛) = 12 × 16 = 192. Then she picks 𝑒 = 11, which is a suitable choice since gcd(192, 11) = 1.

Using Euclid’s algorithm, Alice obtains the Bézout relation192 × (−2) + 11 × (35) = 1. Therefore, she sets𝑑 = 35so that𝑒𝑑 ≡ 1 (mod192). Finally, she shares the public key(𝑛, 𝑒) = (221, 11)on her website and preciously keeps the private key(𝑛, 𝑑) = (221, 35)for herself only.

Later, Bob wants to send the private message 𝑚 = 149 ∈ {0, 1, 2, … , 220} to Alice. He finds on her website her public key and computes𝑚𝑒 = 14911 ≡ 89 (mod221). So the encrypted message is𝑐 = 89 ∈ {0, 1, 2, … , 220}. He sends it to Alice by e-mail.

After receiving the e-mail, Alice computes𝑐𝑑 = 8935 ≡ 149 (mod 221) and she recovers the original message𝑚 = 149.

6 In practice

It is not difficult to find a Bézout relation using Euclid’s algorithm. But two other things seem not to be very practical in the above example:

1. How to generate the prime numbers𝑝and𝑞?

2. The computations seem to involve very large numbers which are not suitable to computers (14911 is already a very large number).

The first problem is a little bit tricky. In practice we generate a random odd number 𝑘of the wanted order of magnitude and we check whether it is prime or not. If not, we take the next odd number and we repeat the process. According to the prime number theorem1we could expect a prime number before ln(𝑘)2 attempts.

Nonetheless, we don’t know efficient algorithms to check whether a number is prime or not. Instead, we usually use probabilistic primality tests (so they can fail, but with a very low probability).

Some algorithms rely on Fermat’s little theorem: if𝑝is prime then∀𝑎 ∈ ℤ, 𝑎𝑝 ≡ 𝑎 (mod𝑝).

Therefore, since24221 ≡ 176 (mod221), we know that221is not prime.

Nonetheless, it is possible for such a congruence to hold even for a non-prime number𝑎, for instance we have2341≡ 2 (mod341)although341 = 11 × 31.

The second problem has easy workarounds. First, note that we don’t need to actually compute 𝑚𝑒. Indeed, we only need a representative modulo𝑛. More precisely, given 𝑚, 𝑒, 𝑛 ∈ ℕ, we want to find (the unique)𝑐 ∈ {0, 1, … , 𝑛 − 1}such that𝑚𝑒 ≡ 𝑐 (mod𝑛). One naive way to avoid very large numbers consists in iteratively multiplying by𝑐and to reduce to a representative in{0, … , 𝑛}before the next step.

For instance, in order to compute14911(mod221), we would do:

1. 1491 ≡ 149 (mod221)

2. 1492 = 149 × 149 = 22201 ≡ 101 (mod221) 3. 1493 = 101 × 149 = 15049 ≡ 21 (mod221) 4. 1494 = 21 × 149 = 3129 ≡ 35 (mod221) 5. 1495 = 35 × 149 = 5215 ≡ 132 (mod221) 6. 1496 = 132 × 149 = 19668 ≡ 220 (mod221)

7. 1497= 220 × 149 = 32780 ≡ 72 (mod221) 8. 1498= 72 × 149 = 10728 ≡ 120 (mod221) 9. 1499= 120 × 149 = 17880 ≡ 200 (mod221) 10. 14910= 200 × 149 = 29800 ≡ 186 (mod221) 11. 14911= 186 × 149 = 27714 ≡ 89 (mod221)

Note that no involved number exceeded32780whereas14911= 803616698647447868139149(actually149 × 220 = 32780is the largest number we could have obtained).

1For𝑘large enough, there areaboutln(𝑘)𝑘 prime numbers less than or equal to𝑘.

(4)

We even have even far more efficient algorithms.

First, write the exponent in binary𝑒 = 𝑎𝑟𝑎𝑟−1… 𝑎1𝑎02 =

𝑟

𝑖=0

𝑎𝑖2𝑖where𝑎𝑖 ∈ {0, 1}. Then

𝑚𝑒 = 𝑚∑ 𝑎𝑖2𝑖 =

𝑟

𝑖=0(𝑚2

𝑖

)

𝑎𝑖

So we just need to compute successive squares:𝑚2𝑖+1 = (𝑚2𝑖)

2

(actually we only need it modulo𝑛).

Implementation in Julia:

1 function fastpowmod(m,e,n::Integer) 2 n > 0 || error("n must be positive") 3 e >= 0 || error("e must be non-negative") 4 r = 1

5 while e > 0

6 if (e & 1) > 0

7 r = (r*m)%n

8 end

9 e >>= 1 10 m = (m^2)%n

11 end

12 return r>0 ? r : r+n 13 end

Output:

julia> fastpowmod(149,11,221) 89

(5)

7 A simple implementation in Julia

Source:

1 using Primes 2

3 struct PublicKey 4 n::Integer 5 e::Integer 6 end

7

8 struct PrivateKey 9 n::Integer 10 d::Integer 11 end

12

13 function gen_keys(p::Integer, q::Integer, e::Integer) 14 isprime(p) || error("p must be a prime number") 15 isprime(q) || error("q must be a prime number") 16 e>0 || error("e must be positive")

17 phi = (p-1)*(q-1) 18 (g,u,v) = gcdx(e,phi)

19 g == 1 || error("phi(n) and e must be coprime") 20 u<0 ? d=(u%phi)+phi : d=u%phi

21 n = p*q

22 return PublicKey(n,e),PrivateKey(n,d) 23 end

24

25 function encrypt(m::Integer, k::PublicKey) 26 0 <= m || error("m must be non-negative") 27 m < k.n || error("m is too large")

28 return powermod(m,k.e,k.n) 29 end

30

31 function decrypt(c::Integer, k::PrivateKey) 32 0 <= c || error("c must be non-negative") 33 c < k.n || error("c is too large")

34 return powermod(c,k.d,k.n) 35 end

36

37 (pbk,pvk) = gen_keys(13,17,11)

38 println("The public key is (n,e)=($(pbk.n),$(pbk.e)), give it to people willing to send you a secret message!")

39 println("The private key is (n,d)=($(pvk.n),$(pvk.d)), don't share it!") 40 m = 149

41 println("Original message: $m") 42 c = encrypt(m, pbk)

43 println("Encrypted message: $c")

44 println("Decrypted message: $(decrypt(c,pvk))")

Output:

[mat246@Pavilion mat246]$ julia rsa.j

The public key is (n,e)=(221,11), give it to people willing to send you a secret message!

The private key is (n,d)=(221,35), don't share it!

Original message: 149 Encrypted message: 89 Decrypted message: 149

Références

Documents relatifs

La prime d’activité est conçue sur le même modèle que le RSA-activité : – il s’agit d’une allocation différentielle, qui se déclenche au premier euro de revenu du travail

Start with the smallest number that divides exactly, repeat as many times as necessary with the same prime number, then try the next prime number in the same way, and stop when you

The mathematical objects that appear in this paper were performed by three leg- endary mathematicians, Artur Jasinski, Reinhard Zumkeller and Mario Veluc- chi, from the rst we have

A given configuration represents a unique natural number with an even number of prime factors, since, in spite of permutation, its factor- ization (configuration) is unique.. One

Remarks 1) Item (i) of Lemma 1 provides a linear lower bound of values of f −1 when difference of arguments is the parameter d of the considered class.. Item (ii) of the same

As an example, suppose that we start with two pro- cesses, with values equal to { 1, 5 } (values of the “quasi- prime” numbers) in the second wheel). As we can see, the variable N

Unite´ de recherche INRIA Rocquencourt, Domaine de Voluceau, Rocquencourt, BP 105, 78153 LE CHESNAY Cedex Unite´ de recherche INRIA Sophia-Antipolis, 2004 route des Lucioles, BP

We further computed lower bounds for the sets of weak moduli -that is, moduli made of at least one or two weak prime respectively- in the interval [2 2n , 2 2(n+1) ] and showed