*See Royal New Zealand Returned Services' Association if you were looking for the Returned Services' Association (RSA) - a veterans organisation or chartered club in New Zealand*

''See South Africa if you were looking for the Republic of South Africa.

Clifford Cocks, a British mathematician working for GCHQ, described an equivalent system in an internal document in 1973. His discovery, however, was not revealed until 1997 due to its top-secret classification.

The security of the RSA system relies on the difficulty of factoring very large numbers. New fast algorithms in this field could render RSA insecure, but this is generally considered unlikely.

The algorithm was patented by MIT in 1983 in the United States of America. The patent expired 21 September 2000. Since the algorithm had been published prior to the patent application, it could not be patented in other countries.

Table of contents |

2 Security 3 Practical considerations
3.5 Key generation
4 Related Articles3.6 Speed 3.7 Key distribution 3.8 Timing attacks 3.9 Adaptive Chosen Ciphertext Attacks |

- Choose two large prime numbers
*p*≠*q*randomly and independently of each other. Compute*N*=*p q*. - Choose an integer 1 <
*d*<*N*which is coprime to (*p*-1)(*q*-1). - Compute
*e*such that*d e*≡ 1 (mod (*p*-1)(*q*-1)). - Destroy all records of
*p*and*q*.

- (Steps 2 and 3 can be performed with the extended Euclidean algorithm; see modular arithmetic.)

Suppose Bob wishes to send a message *m* to Alice. He knows *N* and *e*, which Alice has announced. He turns *m* into a number *n* < *N*, using some previously agreed-upon reversible protocol. For example, each character in a plaintext message could be converted to its ASCII code, and the codes concatenated into a single number. If necessary, he can break *m* into pieces and encrypt each piece separately. He then computes the ciphertext *c*:

The decryption procedure works because

- and

RSA can also be used to sign a message. Suppose Alice wishes to send a signed message to Bob. She produces a hash value of the message, encrypts it with her secret key, and attaches it as a "signature" to the message. This signature can only be decrypted with her public key. When Bob receives the signed message, he decrypts the signature with Alice's public key, and compares the resulting hash value with the message's actual hash value. If the two agree, he knows that the author of the message was in possession of Alice's secret key, and that the message has not been tampered with since.

Suppose Eve, an eavesdropper, intercepts the public key *N* and *e*, and the ciphertext *c*. However, she is unable to directly obtain *d*, which Alice keeps secret. The most obvious way for Eve to deduce *n* from *c* is to factor *N* into *p* and *q*, in order to compute (*p*-1)(*q*-1) which allows the determination of *d* from *e*. No polynomial-time method for factoring large integers on a classical computer has yet been found, but it has not been proven that none exists. See integer factorization for a discussion of this problem.

It has not been proven that factoring *N* is the only way of deducing *n* from *c*, but no easier method has been discovered (at least to public knowledge.)

Therefore, it is generally assumed that Eve is defeated if *N* is sufficiently large.

If *N* is 256 bits or shorter, it can be factored in a few hours on a personal computer, using software freely available on the Internet. If *N* is 512 bits or shorter, it can be factored by several hundred computers as of 1999. It is currently recommended that *N* be at least 1024 bits long.

In 1993, Peter Shor showed that a quantum computer could in principle perform the factorization in polynomial time. If (or when) quantum computers become a practical technology, Shor's algorithm will make RSA and related algorithms obsolete.

Should an efficient classical factorization code be discovered or a practical quantum computer constructed, using still larger key lengths would provide a stopgap measure. However, any such security break in RSA would be *retroactive*. An eavesdropper can record the key and the ciphertext, and wait until it becomes practical to decipher the message. Therefore, it is inherently unsafe to exchange long-term secrets with RSA.

One should not employ a prime search method which gives any information about the primes to the attacker. In particular, a strong random number generator for the start value needs to be employed. If the attacker can guess half of the digits of *p* or *q*, they can quickly compute the other half, as was shown by Coppersmith in 1997.

It is important that the secret key *d* be large enough.
Wiener showed in 1990 that if *p* is between *q* and 2*q* (which is quite typical) and *d* < *N*^{1/4}/3, then *d* can be computed efficiently from *N* and *e*.
The encryption key *e* = 2 should also not be used.

RSA is much slower than DES and other symmetric cryptosystems. In practice, Bob typically encrypts a secret message with a symmetric algorithm, encrypts the (comparatively short) symmetric key with RSA, and transmits both the RSA-encrypted symmetric key and the symmetrically-encypted message to Alice.

This procedure raises additional security issues. For instance, it is of utmost importance to use a strong random number generator for the symmetric key, because otherwise Eve could bypass RSA by guessing the symmetric key.

As with all ciphers, it is important how RSA public keys are distributed. Key distribution must be secured against a man-in-the-middle attack. Suppose Eve has some way to give Bob arbitrary keys and make him believe they belong to Alice. Suppose further that Eve can *intercept* transmissions between Alice and Bob. Eve sends Bob her own public key, which Bob believes to be Alice's. Eve can then intercept any ciphertext sent by Bob, decrypt it with her own secret key, keep a copy of the message, encrypt the message with Alice's public key, and send the new ciphertext to Alice. In principle, neither Alice nor Bob would be able to detect Eve's presence. Defenses against such attacks are often based on digital certificates or other components of a public key infrastructure.

Kocher described an ingenious unexpected new attack on RSA in 1995: if the attacker Eve knows the hardware of Alice and is able to measure the decryption times for several known cyphertexts, she can deduce the decryption key *d* quickly. To thwart this attack, the decryption code should decrypt in constant time. This is known as **RSA blinding**.

In 1998, Daniel Bleichenbacher described the first practical adaptive chosen ciphertext attack, against RSA-encrypted messages using the PKCS #1 v1 redundancy function (a redundancy function adds structure to an RSA-encrypted message, so it is possible to determine whether a decrypted message is valid.) Due to flaws with the PKCS #1 scheme, Bleichenbacher was able to mount a practical attack against RSA implementations of the Secure Socket Layer protocol, and potentially reveal session keys. As a result of this work, cryptographers now recommend the use of provably secure redundancy checks such as OAEP, and RSA Laboratories has released new versions of PKCS #1 that are not vulnerable to these attacks.

cryptography, digital signature, computational complexity theory