History teaches us some very valuable lessons about cryptography. I have extracted some of the basic concepts in a distilled form below. Designing a system based on these principles will make successful cryptanalysis more difficult.
1. Every system that is practical is breakable.
2. Sending the same message encrypted and in plaintext provides an invaluable reference to the cryptanalyst. Sending the same message using different keys or systems can also aid cryptanalysis.
3. The amount of information encrypted with a given key is inversely porportional to it's security.
4. The use of common or repeated words or phrases allows intelligent guesses to make inroads to a solution.
5. Information that is not sensitive or is already public should not be encrypted.
6. A public system has it's weaknesses exposed for all to see. A private system's weaknesses may be exploited before the cryptographer knows they exist.
7. A complex system is not by definition a secure one. But a simple system is by definition unsecure.
8. A good system will not require the operator to be a cryptographer.
9. A good system will allow keys to be changed quickly and easily.
10. A good infrasctucture will allow an entire system to be replaced quickly and easily.
11. Messages of varying sensitivity should be protected by systems and keys with porportional security. (Save the strongest systems and keys for the most sensitive traffic.)
12. Good cryptanalysis is based on the exploitation of weaknesses in the system, not brute force attacks.
13. A good system will allow for mistakes in coding, decoding or transmission.