Question: Implement RSA encryption and decryption using BigInteger class. m = plaintext message c = ciphertext message d = private key e= public key n =
Implement RSA encryption and decryption using BigInteger class.
m = plaintext message
c = ciphertext message
d = private key
e= public key
n = a large special number
At the sender's end the program should do encryption and print the ciphertext. At the receiver's end the program should perform decryption and print the plaintext.
Generate your own RSA keys. i.e., generate values of n, d, and e using the key generator (sample code below):
Random rg = new SecureRandom();
BigInteger p = BigInteger.probablePrime(bitSize, rg);
BigInteger q = BigInteger.probablePrime(bitSize, rg);
BigInteger n = p.multiply(q); //p*q
BigInteger phi_n = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE)); //(p-1) * (q-1)
BigInteger e = new BigInteger("65537"); //BigInteger(phi_n.bitLength(), rg); //generate public key
//while (e.compareTo(BigInteger.ONE) <= 0 || //e.compareTo(phi_n) >= 0)
// if (e.gcd(phi_n).equals(BigInteger.ONE))
// break;
// else
// e = new BigInteger(phi_n.bitLength(), rg); //got an e with gcd(e, phi_n) == 1
BigInteger d = e.modInverse(phi_n); //generate d
(Uncomment the code if you want to generate a random e)
Part B: Crypt Analysis
For cryptanalysis, the ciphertext intercepted was:
c=52977484004674107084596166554939773238427226218717904047100839999329454670292979362436972593366221243824465482808700243230128076848263437296917733264673144604061137520761508560363250742367421862553744961532855896929526313416123115257362920850341863295446400912663756417652062898456596149710403153779485739044
e=89489425009274444368228545921773093919669586065884257445497854456487674839629818390934941973262879616797970608917283679875499331574161113854088813275488110588247193077582527278437906504015680623423550067240042466665654232383502922215493623289472138866445818789127946123407807725702626644091036502372545139713 n=145906768007583323230186939349070635292401872375357164399581871019873438799005358938369571402670149802121818086292467422828157022922076746906543401224889672472407926969987100581290103199317858753663710862357656510507883714297115637342788911463535102712032765166518411726859837988672111837205085526346618740053
Research various methods for cryptanalysis RSA encryption. Explain and implement a method to cryptanalysis and print the plaintext.
Part C: Choosing RSA keys
In the above (Part B) scenario where you were able to perform the brute force cryptanalysis (starting with d=1), why was it computationally easy? What could have made the process harder? Explain.
Besides java code, you may attach a separate document (PDF, text, Word) for your written answers. Please add references as necessary.
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
