====== 암호 알고리즘 ====== Cipher. [[평문]]으로부터 [[암호문]]을 만들어 내는 모든 종류의 [[알고리즘]]. 그냥 **암호**라고 부를 때도 있으나 이럴 때는 암호문과 구분하기 어려우니 여기서는 용어를 분명히 한다. 수학적으로 얘기하자면, 암호문 $$c$$은 평문 $$m$$을 적절한 함수 $$E$$로 암호화한 결과이다($$c = E(m)$$). 암호화 함수 $$E$$는 복호화 함수 $$D = E^{-1}$$를 가져야 하므로 [[전단사함수]]여야 하고, [[암호학]]적으로 쓸모가 있으려면 $$c$$로부터 $$E$$와 $$D$$를 추측해내는 것 역시 어려워야 한다. 현대의 암호에서 $$E$$와 $$D$$는 실제로는 적절한 알고리즘을 [[키]] $$k$$로 매개변수화하여 만드는데(즉 $$E = E_k$$, $$D = D_k$$) 마찬가지로 알고리즘을 알고 있어도 $$c$$로부터 $$k$$를 추측해내는 것이 어려워야 한다.((아예 알고리즘도 알 수 없도록 하는 것이 도움이 될 수도 있는데, 대부분의 경우 쓸만한 암호 알고리즘의 갯수는 한계가 있어서 큰 도움이 되지는 않는다.)) ===== 고전 암호 ===== [[고전암호]]는 일반적으로 수학적으로 그 강도를 [[증명]]하지 않은 채 설계한 알고리즘들을 의미한다. 따라서 고전 암호는 대부분 충분한 평문과 암호문 쌍이 주어지면 공통된 키를 찾아낼 수 있으며, 일부 간단한 고전 암호는 평문과 암호문 쌍이 적거나 아예 평문이 알려져 있지 않더라도 [[빈도분석]]과 같은 방법으로 풀 수 있다. 사실 고전 암호로 암호화된 암호문 중 지금까지도 풀리지 않은 것은 순전히 한 키를 한 암호문에만 사용했기 때문이다. 대부분의 고전 암호는 [[치환암호]], [[복자치환암호]], [[전치암호]]의 조합으로 이루어져 있다. 사실 어떻게 보면 이들이 현대 암호의 [[혼돈과확산]](confusion and diffusion) 개념에 영향을 끼쳤다고 할 수는 있겠으나, 고전 암호는 그 암호가 "어떻게" 정보를 혼돈시키고 확산시키는지에 대한 이해가 없이 만들어졌기 때문에 한계가 명확하다. 게다가 대부분의 경우 키도 충분히 크지 않기 때문에 그냥 단순히 [[전수검색]]만으로도 풀리는 경우가 많다(...). ===== 현대 암호 ===== [[현대암호]]는 수학적인 방법으로 그 강도를 증명하거나 적어도 추정하여 설계된 알고리즘들을 의미하며, 그 시초는 보통 [[1940년대]] 후반 [[Claude Shannon]]의 연구로 친다.((사실 앞에서 말한 혼돈과 확산이라는 개념 자체가 Shannon이 처음 기초를 닦은 것이다.)) 고전 암호와는 달리 현대 암호는 평문과 암호문 쌍이 아무리 주어져도 그 키를 찾기 어렵도록 설계되어 있으며, 근래 들어 다양한 [[암호공격]](cryptanalysis) 방법이 알려짐에 따라 이들에 대한 대비도 함께 고려하여 만들어진다. 현대 암호는 [[컴퓨터]]의 발달로 인해 일반적인 목적으로 매우 널리 쓰이게 되었으며, [[전자상거래]]와 같이 한 산업 분야를 완전히 떠받치고 있기까지 하다. 현대 암호는 암호화에 사용되는 키 $$k_1$$와 복호화에 사용되는 키 $$k_2$$가 같은가 다른가에 따라 [[대칭암호]]와 [[비대칭암호]]로 크게 나눌 수 있다. 좀 더 수학적으로 말하면, 비대칭 암호는 키 $$k = (k_1, k_2)$$이어서 $$E_k$$에서는 $$k_1$$만 사용하고 $$D_k$$에서는 $$k_2$$만 사용하는 구조라 말할 수 있다. {{tag>암호학}}