ve secret messages (for which they usually cannot care less) as to prove to history that they have been able to "crack" a previously reputed "invulnerable" or "unbreakable" cipher. Code cracking may be viewed as a noble academic attempt to explore the limits of cryptosystem security, with a view to improve the algorithms, or just as an engineering challenge to test security and standards. For fascinating accounts of cryptology, from ancient to modern times, see, for instance: D. Kahn, The Code Breakers (New York: Scribner, 1967); S. Singh, The Code Book (New York: Anchor Books, 1999); S. Levy, Crypto, (New York: Penguin Books, 2001). Classical and quantum cryptography on the principle of alphabetic substitution. 3 We may simplistically view any alphabetic- substitution code as representing a one-to-one table correspondence between plaintext and ciphertext letter symbols. There exist 26! possible permutations between the 26 letters, namely 26! 2 3 X 25 X 26 = 4.0 1026. Assuming that each code possibility could be checked every second, breaking the code would take some 13 billion billion years, i.e., about one billion times the age of our Universe! And with a rate of one billion checks per second, we still have the age of the Universe. Hence brute-force attack is not a code-breaking solution. Older cryptanalysis would, rather, attempt to guess which table, square, or grid algorithm and keys were used, based on the fact that human beings at the time needed to keep the encryption and decryption process simple and practical (as done by paper and pencil!), and the secret keys easy to memorize. No matter how sophisticated, however, with mainframe computer power, such alphabetic-substitution codes may now be broken in milliseconds or seconds. This is because all possible algorithms and table, square, or grid combinations of past history can be systematically explored, and also mainly because the keyword sizes remain relatively small. Overall, cryptanalysis is facilitated by the detection of frequencies, the repeated occu