Cryptography is the study of sending and receiving secret messages. The aim of cryptography is to send messages across a channel so that only the intended recipient of the message can read it. In addition, when a message is received, the recipient usually requires some assurance that the message is authentic; that is, that it has not been sent by someone who is trying to deceive the recipient. Modern cryptography is heavily dependent on abstract algebra and number theory.
The message to be sent is called the plaintext message. The disguised message is called the ciphertext. The plaintext and the ciphertext are both written in an alphabet, consisting of letters or characters. Characters can include not only the familiar alphabetic characters A, \(\ldots\), Z and a, \(\ldots\), z but also digits, punctuation marks, and blanks. A cryptosystem, or cipher, has two parts: encryption, the process of transforming a plaintext message to a ciphertext message, and decryption, the reverse transformation of changing a ciphertext message into a plaintext message.
There are many different families of cryptosystems, each distinguished by a particular encryption algorithm. Cryptosystems in a specified cryptographic family are distinguished from one another by a parameter to the encryption function called a key. A classical cryptosystem has a single key, which must be kept secret, known only to the sender and the receiver of the message. If person \(A\) wishes to send secret messages to two different people \(B\) and \(C\), and does not wish to have \(B\) understand \(C\)'s messages or vice versa, \(A\) must use two separate keys, so one cryptosystem is used for exchanging messages with \(B\), and another is used for exchanging messages with \(C\).
Systems that use two separate keys, one for encoding and another for decoding, are called public key cryptosystems. Since knowledge of the encoding key does not allow anyone to guess at the decoding key, the encoding key can be made public. A public key cryptosystem allows \(A\) and \(B\) to send messages to \(C\) using the same encoding key. Anyone is capable of encoding a message to be sent to \(C\), but only \(C\) knows how to decode such a message.