 The University of Sydney School of Mathematics and Statistics

Assignment 2 MATH2088/2988: Number Theory and Cryptography

Semester 2, 2019

Web Page: http://www.maths.usyd.edu.au/MATH2088/

Copyright °c 2019 The University of Sydney

1

Non-computer part: Write or type complete answers to the two questions appropriate to the level of unit you are enrolled in, showing all working. 1. This question is for students enrolled in the mainstream unit MATH2088 only. Do not answer this if you are in the advanced unit MATH2988. (a)

Suppose that you are an Elgamal user with public key (107, 2, 15) and private key 11. Note that this is consistent, because 211 ≡ 15 (mod 107). If you receive the ciphertext h3, [79, 34]i, what is the decrypted message?

(b) Find a primitive root modulo 31. Justify your answer. 2. This question is for all students. (a) Find an integer x ∈ {0, . . . , 196} which solves the equation x157 ≡ 8

(mod 197). √

(b) Assume that some algorithm requires more than 22 k bit operations to compute an answer for a k-bit input. Show that it is not a polynomial time algorithm. You may use the result from analysis: for any c > 1 and b > 0, lim

k→∞

ck = ∞. kb

(c) How many iterations of the Pollard Rho method with parameters t0 = 1 and tl+1 ≡ t2 l+ 1 (mod n) are needed to ﬁnd a factor 151 of n? 3. This question is for students enrolled in the advanced unit MATH2988 only. Do not answer this if you are in the mainstream unit MATH2088. (a) Let n = pq where p and q are distinct primes. Show that n is not a Carmichael number. [Hint: consider a primitive root modulo the bigger prime factor of n] (b) Let k ∈ Z+ and n be a k-bit integer number, such that n ≡ 1 (mod 5). Show that there exists an integer m such that m2 − n is divisible by 5k. Provide a polynomial time algorithm which computes m. Note: You need to show that your algorithm always gives a correct answer and explain why it is polynomial time. You do not have to provide a rigorous computer code for it, “human” description will suﬃce. (However, if you are able to write MAGMA code for the algorithm, you could of course then test actual large numbers to see whether it works and whether the growth rate of the time appears to be as expected.) Also, you do not have to produce as quick algorithm as possible. Any polynomial time algorithm will suﬃce.

2