Today secure storage and transfer of information as well as communication over Internet and mobile networks has become very critical. Cryptographic algorithms have been developed to provide various security services such as confidentiality, user authentication, data origin authentication, data integrity, nonrepudiation, privacy, and so on. Cryptographic algorithms are divided into two categories: symmetric-key or secret-key algorithms and asymmetric-key or public-key algorithms. Symmetric-key cryptography refers to cryptographic mechanisms in which both the sender and receiver share the same key or keys that are related in an easily computable way. In asymmetric-key cryptography, two different but mathematically related keys (not in an easily computable way) called public and private keys are used. A public-key cryptosystem is constructed in such a way that calculation of the private key is computationally infeasible from the public key.