암호(문) cipher text는 비밀 유지를 위해 이해 당사자들끼리만 알 수 있도록 만든 약속 기호입니다. 암호의 반대말은 평문 plain text이라고 하며 지금 보시는 글 처럼 일반적인 구문을 의미합니다.
평문을 암호로 변경하는 것을 암호화 encryption이라고 하고, 암호문을 평문으로 바꾸는 것을 복호화 decryption이라고 합니다. 암호화/복호화를 수행할 때 양쪽이 알고있어야 하는 변경 수단을 암호화 알고리즘이라하고 약속된 규칙을 암호화 키 encryption key라고 합니다.
대칭 암호화는 암호화와 복호화에 동일한 하나의 키를 사용하는 방식입니다.
강력한 암호화 수준을 가진 암호화 알고리즘을 만들기 위해서는 혼돈 confusion과 확산 diffusion 성질을 이용합니다.
혼돈은 암호문의 통계적 성질과 평문의 통계적 성질의 관계를 난해하게 만드는 것을 말하며, 확산은 각가의 평문 비트와 키 비트가 암호문의 모든 비트에 영향을 주는 성질을 말합니다. 현대의 대칭 암호화 기술들은 혼돈과 확산을 대폭 강화하여 이용하고 있습니다.
DES (Data Encryption Standard) 알고리즘은 1972년 미국 상부무 NBS가 정보 보호를 목적으로 공모한 암호화 알고리즘입니다.
DES 알고리즘은 64비트의 블록 암호화 알고리즘으로 56비트 크기의 암호화 키로 암호화합니다.
DES 알고리즘으로 생성가능한 암호화 키는 최대
2^56가지 입니다.

하나의 블록인 64비트를 각각 32비트 크기인 Left, Right로 나눈 뒤, Right을 암호화 키로 생성한 S-BOX를 통해 f 함수를 만들어 나온 결과를 Left과 논리합한 뒤, Left와 Right의 위치를 바꾸며 암호화됩니다. (복호화는 반대로 수행)
이와 같은 암호화 과정 한 단계를 라운드 Round라고 합니다. DES 알고리즘은 하나의 블록에 대해 이 과정을 16회 수행하므로 16라운드 알고리즘이기도 합니다.
여기서 S-Box란 무엇이고 어떻게 동작하는 지 알아보겠습니다.
현대 암호화에는 컴퓨터가 사용되므로 모든 데이터가 1과 0로 표현됩니다. 호화 키에 의해 변환된 값이 1011 1100 0111라고 할 때 다음과 같은 확장 과정을 거칩니다.
| 1011 | 1100 | 0111 |
|---|---|---|
| 1 1011 1 | 1 1100 0 | 0 0111 1 |
각 자리에서 이전 숫자의 끝자리가 앞에 오고, 다음 숫자의 첫 자리가 뒤에 붙어 확장됩니다.
110111 111000 001111이렇게 확장된 값 가지고 다음과 같은 S-Box를 준비했다고 가정합니다.

110111만 암호화해보면, 110111이 S-Box를 통과할 때 앞뒤 1 비트인 1과 1을 떼어 2비트 숫자 11로 만들어주고 나머지 부분인 1011을 분리합니다.
이후 11인 3 그리고 나머지 부분인 1011인 11을 표에서 찾사오면 14라는 결과를 얻을 수 있습니다.
이러한 과정을 DES에서는 총 16라운드를 반복하며 각 라운드마다 S-Box는 변경됩니다.
트리플 DES 알고리즘은 기존의 DES 알고리즘의 복호화가 가능해지고 AES 알고리즘이라는 방안이 등장하기 전까지 임시로 사용된 알고리즘입니다.
DES와 방식을 동일하지만 암호화 과정에서 키를 세 개(또는 두 개) 사용합니다.
AES (Advanced Encryption Standard) 알고리즘은 DES의 암호화 강도가 컴퓨터의 발전 속도에 따라가지 못해 복호화가 쉽게 된다는 점을 보완하기 위해 개발된 알고리즘입니다.
암호화 블록 단위를 128비트까지 확장했고, 가변 키 길이(128/192/256 비트)를 통한 라운드 수를 선택할 수 있게 하여 강력한 미국의 표준 대칭 암호화 방식이 되었습니다.
ARIA 알고리즘은 대한민국의 표준 암호화 알고리즘으로 AES 알고리즘과 동일하게 128비트 블록 단위, 가변 키 길이를 채택하여 사용하고 있습니다.
대칭 암호화 방식의 가장 큰 약점은 암호화와 복호화에 동일한 키를 사용하므로 키를 전달해야한다는 문제점이 있었습니다. 암호문을 만들게 되면 복호화를 하는 측에 암호화 키를 전달해야 한다는 문제가 그것으로 수많은 대상이 암호화된 통신을 사용하는 경우 암호화 키를 전달하는 것이 매우 어렵습니다.
기본적인 비대칭 키의 원리는 다음과 같습니다.
K^Xa = 3^5)K^Xb = 3^7)A: (K^Xb)^Xa, B: (K^Xa)^Xb)현대에 가장 많이 사용되는 표준 비대칭 암호화 방식은 RSA 알고리즘 입니다.
RSA 알고리즘은 모든 사람이 고유한 값 N (이때 N은 두 소수의 곱)을 갖습니다.
A가 두 소수 p와 q값을 정하고, 이 둘의 곱인 N을 결정하면 A의 공개 키로 N값이 모두에게 공개됩니다. A에게 메시지를 보내고자 하는 사람들은 공개 키인 N값을 이용해 어떤 알고리즘을 이용해서 암호화한 뒤 A에게 보내는 식으로 암호화 통신이 이루어집니다.
실제로 사용되는 N값은 250자리 수이므로 무차별 대입 공격, 소인수 분해를 하게되는 경우 매우 오랜 시간이 걸리게 됩니다.
초기 비대칭 암호화 알고리즘의 원리와 RSA 알고리즘의 등장으로 비대칭 암호화 알고리즘들은 개인이 공개 키와 개인 키를 소유하는 구조로 정립되었습니다. A는 B의 공개 키를, B는 A의 공개 키를 얻을 수 있지만 개인 키를 얻을 수 없는 구조입니다.
또한 비대칭 암호화에서는 암호화와 복호화가 동일한 키로 이루어지지 않는다라는 점도 있습니다. 한 쌍의 [공개 키 - 개인 키]를 이용하기 때문에 개인 키로 암호화된 메시지는 오직 공개 키를 통해서만 복호화가 됩니다. (또는 반대로 공개 키로 암호화 하면 개인 키로만 복호화 가능)
비대칭 암호화는 다음과 같은 두 가지 기능을 제공합니다.
기밀성 confidentiality
대칭 암호화도 기밀성을 제공하지만, 비대칭 암호화는 더 강력한 기밀성을 제공합니다.
A가 B의 공개 키를 통해 암호화된 메시지를 보내면, B는 자신의 개인 키로 복호화하여 읽을 수 있습니다. 이때 C가 메시지를 중간에 가로채더라도 본인의 공개/개인 키로는 복호화할 수 없습니다.
위에서 말한대로 B의 공개 키로 암호화된 메시지는 B의 개인 키로만 복호화 할 수 있기 때문입니다.
부인 방지 non-repudiation
비대칭 암호화는 대칭 암호화 방식에서 제공하지 않는 부인 방지 기능도 제공합니다.
A가 B에게 암호화된 메시지를 보낼 때, A의 개인 키로 암호화 해서 보냈다고 가정합니다. 이때 B가 A의 공개 키로 풀었을 때 복호화가 된다면 A가 보낸 메시지라고 확신할 수 있게 됩니다. 이 개념이 부인 방지입니다.
만약, A의 개인 키로 암호화 했다고 하는 메시지가 도착했으나 A의 공개 키로 복호화 되지 않는다면 A가 보낸 것이 아님을 알 수 있기도 합니다.
해시 Hash는 하나의 문자열을 이를 상징하는 더 짧은 길이의 키 또는 값으로 변환하는 것을 의미합니다. 엄밀히는 해시와 암호화는 조금 다른 개념을 갖습니다. 암호가 정보를 숨기기 위한 목적이라면 해시는 정보의 위/변조를 확인하기 위한 것(무결성 확인)입니다.
해시는 평문의 길이와 상관없이 해시 알고리즘을 거치고 나면 길이가 모두 같고, 평문이 아주 조금만 달라져도 결과값이 추측하기 어려울 정도로 다르게 나타납니다.
해시는 데이터베이스의 탐색을 효과적으로 구현하기 위해 만들어졌으나, 보안에서도 사용되기도 합니다. 보안 측면에서 해시는 완전히 동일한 데이터만 해시 값이 동일하고 조금만 달라져도 결과가 완전히 다르다는 점을 이용해 데이터 무결성을 확인하기 위한 도구로 사용합니다.
대표적인 해시 알고리즘은 다음과 같은 두 종류가 있습니다.
MD
MD (Message Digest function) 알고리즘은 공개 키 기반 구조를 만들기 위해 RSA 알고리즘과 함께 개발된 알고리즘 입니다. 현재는 MD5로 개량되어 사용되고 있습니다.
SHA
SHA (Secure Hash Algorithm)은 160비트의 값을 생성하는 해시 함수로, MD4의 발전된 형태입니다.