{{위키데이터 속성 추적}}
[[암호학]]에서 '''케르크호프스의 원리'''는 19세기 [[오귀스트 케르크호프스]]가 제안한 원리로, [[암호키|키]]를 제외한 시스템의 다른 모든 내용이 알려지더라도 [[암호체계]]는 안전해야 한다는 것이다.

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

==기원==

1883년, [[오귀스트 케르크호프스]]<ref name=Kahn>{{서적 인용
 | 이름 = David | 성 = Kahn
 | 제목 = The Codebreakers: the story of secret writing
 | 연도 = second edition, 1996
 | 출판사 = Scribners}} p.235</ref> 은 ''La Cryptographie Militaire''<ref>{{웹 인용
 | url = http://petitcolas.net/fabien/kerckhoffs/
 | 제목 = electronic version and English translation of "La cryptographie militaire"
 | 이름 = Fabien | 성 = Peticolas
}}</ref>이라는 군사 과학 분야의 저널에 군사용 [[암호]]의 6가지 설계 원칙에 대한 2개의 글을 썼다. 이를 번역한다면 다음과 같다.<ref>Auguste Kerckhoffs, [http://www.petitcolas.net/fabien/kerckhoffs/ "La cryptographie militaire"] ''Journal des sciences militaires'', vol. IX, pp. 5&ndash;83, January 1883, pp. 161&ndash;191, February 1883.</ref>

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

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

== 해설 ==

간단하게 말해, [[암호체계]]의 안전성은 키의 비밀성에만 의존해야한다.<ref name=Massey>{{인용| first = James L | last = Massey | title = Cryptography: Fundamentals and Applications, course notes | year = 1993}} p.2.5</ref> 다르게 말하면, 정보를 비밀스럽게 코딩하고 전송하는 방법은 설령 그것이 어떻게 동작하는지 모든 사람에게 알려지더라도 안전해야한다.

=== 비밀 키의 이점 ===

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

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

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

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

{{인용문|케르크호프스의 원리는 코드나 암호체계 뿐만 아니라 보안 시스템 전반에 적용된다. 즉, 어떤 비밀이든지 잠재적인 실패 지점을 만들어낸다. 다시 말하면, 비밀성은 불안정함의 주요 근원이고 따라서 시스템을 무너지기 쉽게 만드는 것이다. 그 반대로, 개방성은 유연성을 제공한다.<ref name="HomelandInsecurity">{{인용| author = Mann, Charles C. | year = 2002 | month = September | title = Homeland Insecurity | journal = [[The Atlantic Monthly]] | volume = 290 | issue = 2 | url = http://www.theatlantic.com/issues/2002/09/mann.htm | postscript = .}}</ref>}}

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

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

== 참고 문헌 ==
<references />

== 외부 링크 ==
* [http://www.quadibloc.com/crypto/mi0611.htm John Savard article discussing Kerckhoffs's design goals for ciphers]
* [http://petitcolas.net/fabien/kerckhoffs/ Reference to Kerckhoffs's original paper, with scanned original text]

[[분류:암호학]]