Kerckhoffs's principle (also called Kerckhoffs's desideratum, assumption, axiom, doctrine or law) of cryptography was stated by Dutch-born cryptographer Auguste Kerckhoffs in the 19th century. The principle holds that a cryptosystem should be secure, even if everything about the system, except the key, is public knowledge. This concept is widely embraced by cryptographers, in contrast to security through obscurity, which is not.

Kerckhoffs's principle was phrased by American mathematician Claude Shannon as "the enemy knows the system", i.e., "one ought to design systems under the assumption that the enemy will immediately gain full familiarity with them".  In that form, it is called Shannon's maxim.

Another formulation by American researcher and professor Steven M. Bellovin is:
In other words — design your system assuming that your opponents know it in detail. (A former official at NSA's National Computer Security Center told me that the standard assumption there was that serial number 1 of any new device was delivered to the Kremlin.)

Origins
Auguste Kerckhoffs was a professor of German language at Ecole des Hautes Etudes Commerciales (HEC) in Paris. In early 1883, Kerckhoffs' article, La Cryptographie Militaire, was published in two parts in the Journal of Military Science, in which he stated six design rules for military ciphers. Translated from French, they are:

 The system must be practically, if not mathematically, indecipherable;
 It should not require secrecy, and it should not be a problem if it falls into enemy hands;
 It must be possible to communicate and remember the key without using written notes, and correspondents must be able to change or modify it at will;
 It must be applicable to telegraph communications;
 It must be portable, and should not require several persons to handle or operate;
 Lastly, given the circumstances in which it is to be used, the system must be easy to use and should not be stressful to use or require its users to know and comply with a long list of rules.

Some are no longer relevant given the ability of computers to perform complex encryption. The second rule, now known as Kerckhoffs's principle, is still critically important.

Explanation of the principle
Kerckhoffs viewed cryptography as a rival to, and a better alternative than, steganographic encoding, which was common in the nineteenth century for hiding the meaning of military messages. One problem with encoding schemes is that they rely on humanly-held secrets such as "dictionaries" which disclose for example, the secret meaning of words. Steganographic-like dictionaries, once revealed, permanently compromise a corresponding encoding system. Another problem is that the risk of exposure increases as the number of users holding the secrets increases.

Nineteenth century cryptography, in contrast, used simple tables which provided for the transposition of alphanumeric characters, generally given row-column intersections which could be modified by keys which were generally short, numeric, and could be committed to human memory. The system was considered "indecipherable" because tables and keys do not convey meaning by themselves. Secret messages can be compromised only if a matching set of table, key, and message falls into enemy hands in a relevant time frame. Kerckhoffs viewed tactical messages as only having a few hours of relevance. Systems are not necessarily compromised, because their components (i.e. alphanumeric character tables and keys) can be easily changed.

Advantage of secret keys 
Using secure cryptography is supposed to replace the difficult problem of keeping messages secure with a much more manageable one, keeping relatively small keys secure. A system that requires long-term secrecy for something as large and complex as the whole design of a cryptographic system obviously cannot achieve that goal. It only replaces one hard problem with another. However, if a system is secure even when the enemy knows everything except the key, then all that is needed is to manage keeping the keys secret.

There are a large number of ways the internal details of a widely used system could be discovered. The most obvious is that someone could bribe, blackmail, or otherwise threaten staff or customers into explaining the system. In war, for example, one side will probably capture some equipment and people from the other side. Each side will also use spies to gather information.

If a method involves software, someone could do memory dumps or run the software under the control of a debugger in order to understand the method. If hardware is being used, someone could buy or steal some of the hardware and build whatever programs or gadgets needed to test it. Hardware can also be dismantled so that the chip details can be examined under the microscope.

Maintaining security 
A generalization some make from Kerckhoffs's principle is: "The fewer and simpler the secrets that one must keep to ensure system security, the easier it is to maintain system security." Bruce Schneier ties it in with a belief that all security systems must be designed to fail as gracefully as possible:

Any security system depends crucially on keeping some things secret. However, Kerckhoffs's principle points out that the things kept secret ought to be those least costly to change if inadvertently disclosed.

For example, a cryptographic algorithm may be implemented by hardware and software that is widely distributed among users. If security depends on keeping that secret, then disclosure leads to major logistic difficulties in developing, testing, and distributing implementations of a new algorithm – it is "brittle". On the other hand, if keeping the algorithm secret is not important, but only the keys used with the algorithm must be secret, then disclosure of the keys simply requires the simpler, less costly process of generating and distributing new keys.

Applications
In accordance with Kerckhoffs's principle, the majority of civilian cryptography makes use of publicly known algorithms. By contrast, ciphers used to protect classified government or military information are often kept secret (see Type 1 encryption). However, it should not be assumed that government/military ciphers must be kept secret to maintain security. It is possible that they are intended to be as cryptographically sound as public algorithms, and the decision to keep them secret is in keeping with a layered security posture.

Security through obscurity

It is moderately common for companies, and sometimes even standards bodies as in the case of the CSS encryption on DVDs, to keep the inner workings of a system secret. Some argue this "security by obscurity" makes the product safer and less vulnerable to attack. A counter-argument is that keeping the innards secret may improve security in the short term, but in the long run, only systems that have been published and analyzed should be trusted.

Steven Bellovin and Randy Bush commented:

References

Notes

External links 
 Reference to Kerckhoffs's original paper, with scanned original text
 

Computer architecture statements
Cryptography
암호학에서 케르크호프스의 원리는 19세기 오귀스트 케르크호프스가 제안한 원리로, 키를 제외한 시스템의 다른 모든 내용이 알려지더라도 암호체계는 안전해야 한다는 것이다.

클로드 섀넌은 케르크호프스의 원리를 "적은 시스템을 알고 있다 (The enemy knows the system)"라는 말로 표현했는데, 암호체계는 그 시스템이 적에게 파악되는 것을 가정하고 설계해야한다는 말이다. 섀넌의 격언이라고 불리는 이 생각은 "모호함에 의한 보안"에 대비되어, 암호 전문가들에 의해 널리 수용되고 있다.

기원

1883년, 오귀스트 케르크호프스 은 La Cryptographie Militaire이라는 군사 과학 분야의 저널에 군사용 암호의 6가지 설계 원칙에 대한 2개의 글을 썼다. 이를 번역한다면 다음과 같다.

 암호체계는 수학적으로는 해독불가능하지 않다고 하더라도, 실질적으로 그래야한다.
 암호체계는 비밀에 부쳐질 필요가 없어야만 하며, 적의 손에 떨어지더라도 문제가 없어야 한다.
 키는 글로 쓰여지지 않더라도 교환 혹은 보관할 수 있어야 한다. 당사자들의 의지에 의해서 바뀌거나 수정될 수 있어야 한다.
 전신에 적용할 수 있어야 한다.
 이동이 가능해야하며, 암호 체계의 사용과 기능을 위해 여러 사람의 협력을 필요로 하지 않아야 한다.
 마지막으로, 시스템의 활용을 요구하는 여러 상황들이 주어졌을 때, 암호 체계는 이용이 쉬워야 하며, 정신적인 압박감이나 여러 규칙들의 관찰을 필요로 하지 않아야 한다.

몇가지 항목들은 복잡한 암호화를 수행할 수 있는 컴퓨터의 존재로 인해 더이상 의미가 없어졌지만, 2번째 항목은 이제 케르크호프스의 원리로 알려지게 되었으며, 아직까지도 매우 중요한 의미를 가지고 있다.

해설 

간단하게 말해, 암호체계의 안전성은 키의 비밀성에만 의존해야한다. 다르게 말하면, 정보를 비밀스럽게 코딩하고 전송하는 방법은 설령 그것이 어떻게 동작하는지 모든 사람에게 알려지더라도 안전해야한다.

비밀 키의 이점 

안전한 암호체계를 사용하는 것은 메시지를 안전하게 한다는 어려운 문제를 좀 더 쉬운 문제, 즉, 메시지에 비해 상대적으로 작은 키를 안전하게 유지하는 문제로 치환하는 것으로 볼 수 있다. 암호 체계와 같이 크고 복잡한 시스템 전체를 장기적으로 비밀스럽게 유지하는 것은 매우 어려운 일이다. 하지만, 어떤 시스템이 키를 제외한 모든 사항이 알려지더라도 안전하다면, 키들을 안전하게 관리하는 문제만 고민하면 된다.

널리 사용되는 시스템의 내부적인 상세사항을 알아내는데에는 수많은 방법들이 있다. 가장 확실한 것은 누군가 스태프나 고객에게 뇌물을 주거나 협박해서 시스템을 설명하도록 하는 것이다. 예를 들어서, 전쟁 중에는 한 편은 다른 편의 장비나 사람들을 잡을 것이다. 각 편은 정보를 모으기 위한 스파이도 사용할 것이다.

어떤 방법이 소프트웨어를 포함한다면, 누군가는 메모리 덤프를 하거나 디버거를 이용해 그 방법을 이해하려고 할 수 있다. 하드웨어가 사용된다면 하드웨어를 사거나 훔쳐서 그것을 테스트하기 위한 프로그램이나 장비를 만들 수 있다. 하드웨어는 또한 분해될 수도 있고, 회로의 상세사항을 현미경으로 볼 수도 있다.

보안성의 유지 
케르크호프스의 원리로부터 얻을 수 있는 일반화 중 하나는, "시스템의 보안성을 보장하기 위해 유지해야하는 비밀이 적고 단순할 수록, 시스템의 안전성을 유지하기가 쉽다."는 것이다. 브루스 슈나이어는 이것을 모든 보안 시스템은 우아하게 실패해야 한다는 생각과 연결짓고 있다.

어떤 보안 시스템이더라도 무엇인가를 비밀로 유지하는 것에 결정적으로 의존한다. 그러나, 케르크호프스의 원리는 비밀로 유지되는 것들이 만약 의도치 않게 드러나게 되더라도 이를 변경하는 비용이 가장 적게 들어야만 한다는 사실을 지적하고 있다.

예를 들어, 어떤 암호화 알고리즘은 사용자들에게 널리 배포되어 있는 하드웨어와 소프트웨어로 구현될 수 있다. 만약 보안성이 그러한 것들을 비밀로 하는 것에 의존하고 있다면, 그 비밀이 공개되어버릴 경우, 새로운 알고리즘을 개발하고, 테스트하고, 배포하는 과정에 있어서 커다란 문제들을 야기한다. 다시 말해, 알고리즘을 비밀로 유지하는 것은 별로 중요하지 않고, 알고리즘에 사용되는 키들만을 비밀로 유지해야한다면, 키들이 공개되더라도 새로운 키들을 생성하고 배포하는 정도의 과정은 더욱 단순할 뿐만 아니라 비용도 적게 든다.

참고 문헌

외부 링크 
 John Savard article discussing Kerckhoffs's design goals for ciphers
 Reference to Kerckhoffs's original paper, with scanned original text

암호학