인터넷: 암호화와 공개 키
안녕하세요, 저는 미아 길에프너에요. 저는 UC 버클리에서 컴퓨터 과학을 전공했고
지금은 국방부에서 일하고 있어요. 여기서 저는 정보를 안전하게 지키는 업무를 맡고 있죠.
인터넷은 공개되어 있고 공용 시스템이에요. 우리는 공유된 선과 연결을 통해 정보를 주고 받죠.
하지만 공개된 시스템이라고 하더라도 비공개로 교환하는 데이터가 많죠.
예를 들어 신용카드번호, 은행 정보, 암호, 이메일 같은거요.
그러면 어떻게 해야 비공개 정보를 안전하게 지킬까요? 모든 종류의 데이터는 암호화, 스크램블링 또는
원래의 텍스트를 숨기는 메시지 변경 등의 프로세스를 통해 비밀이 유지됩니다.
여기서 해독은 메시지를 읽을 수 있도록 언스크램블링하는 프로세스이죠.
이것은 간단한 아이디어이고, 인류는 수 세기 동안 이렇게 해왔어요. 잘 알려진
최초의 방법은 시저의 암호였죠. 로마의 장군인 줄리우스 시저의 이름을 딴거죠.
시저는 군대의 명령을 암호화하여 중간에서 적이 가로채더라도
읽을 수 없게 만들었죠. 시저의 암호는 메시지의 각 글자를
알파벳에 매칭되는 특정 숫자로 대체하는 알고리즘이에요.
만약 숫자를 보내는 사람과 받는 사람만 안다면, 이것을 키라고 부르죠.
이렇게 되면 읽는 사람이 비밀 메시지를 해독할 수 있죠.
예를 들어, 오리지널 메시지가 'HELLO'라고 하고, 시저의 암호에서 5를 사용하면,
암호화된 메시지는 이것이 되죠... 이 메시지를 해독하려면, 수신자는
키를 사용하여 간단히 거꾸로 돌릴 수 있죠. 하지만 여기에는 큰 문제가 있어요.
가능한 키를 모두 시도해보면, 누구라도 쉽게 암호화된 메시지를 풀 수 있어요.
영어 알파벳은 26자 밖에 없으므로, 26개의 키만 시도해보면 메시지를 해독할 수 있죠.
26개의 가능한 키를 시도해 보는 것은 어렵지 않아요. 기껏해야 1-2시간이면 되죠.
그래서 좀 더 어렵게 해보자면, 모든 글자를 똑같은 수로 이동하는 대신에,
각 글자를 다른 숫자만큼 돌리는 거에요. 이 예에서, 10자리 키로 각 글자의 포지션을
바꾸어 더 긴 메시지를 암호화할 수 있습니다.
이 키가 얼마나 어려울까요. 10자리를 암호화하면 답이 100억개가 될 수 있어요.
분명 이것은 인간의 한계를 넘는 것이죠. 몇 백년이 걸릴 거에요.
하지만 오늘날 보통의 컴퓨터라면, 100억 개의 가능성을 시도하는 데 몇 초면 됩니다.
따라서 현대의 세계에서는 나쁜 사람들이 연필 대신에 컴퓨터로 무장하고 있죠.
나쁜 사람들이 암호를 풀 수 없게 만들려면 얼마나 어렵게 암호화해야 할까요?
너무 어렵다는 말은 일정 시간 안에 계산해야 할 가능성이 너무 많다는 의미입니다.
오늘날 보안통신은 256비트 키를 사용합니다. 나쁜 사람들의 컴퓨터가 메시지를 가로채면
키를 찾고 메시지를 해독할 때까지 엄청나게 많은 가능성을 시도해봐야 되는거죠.
100,000대의 슈퍼 컴퓨터가 있고 각 컴퓨터가 초당 몇 천조의 키를
시도할 수 있다고 하더라도 모든 옵션을 시도하여
256비트 암호로 보호된 메시지를 해독하는 데 몇 백억년이 걸릴 것입니다.
물론 컴퓨터 칩이 매년 2배 더 빨라지고 크기는 절반으로 줄어들고 있죠.
이러한 기하급수적인 발전이 계속된다면, 오늘날의 불가능한 문제도
수 백년 후면 해결될 겁니다. 256비트도 안전해지지 않게 되겠죠.
사실 이미 표준 키 길이를 늘려서 컴퓨터 발전 속도를 따라 잡고 있습니다.
좋은 소식은 더 긴 키를 사용해도 암호화하는게 더 어려워지지는 않습니다.
하지만 암호를 풀기 위해 시도해야 하는 추측의 수는 기하급수적으로 증가하죠.
보내는 사람과 받는 사람이 동일한 키를 공유하여 메시지를 변환하고 해석하는 것을
대칭 암호화하고 합니다. 시저의 암호같은 대칭 암호화를 사용하려면,
미리 양쪽이 비밀리에 비밀 키에 동의해야 합니다. 그래서 사람끼리 만나는 경우에는 좋지만,
하지만 인터넷은 공개되어 있기 때문에, 두 컴퓨터가 비밀리에 "만나" 비밀 키를
공유할 수 없습니다. 그래서 컴퓨터는 비대칭 암호화 즉, 누구와도 교환할 수 있는 공개 키와
공유되지 않는 비공개 키를 사용합니다. 공개 키는 데이터를 암호화하는 데
사용되고 누구라도 이것으로 비밀 메시지를 만들 수 있습니다. 하지만, 비밀은 비공개 키로
액세스할 수 있는 컴퓨터로만 암호화할 수 있습니다. 이 방법은 우리가 지금 당장 볼 수 없는
수학으로 이루어집니다. 이렇게 생각해보죠. 지금 개인 우편함이 있다고 상상해봐요.
누구나 거기에 우편물을 넣을 수 있지만, 열쇠가 필요해요. 이제 내가 그 열쇠를
복사해서 친구에게 주거나 아니면 일반에게 공개할 수도 있죠.
친구나 심지어 모르는 사람도 공개 열쇠를 사용해서 우편함을 열어 메시지를 넣을 수 있지만,
우편함을 열고 받은 비밀 메시지를 보려면 비공개 열쇠가 있어야 되요.
그리고 반대로 비밀 메시지를 친구에게 보내려면 공개 열쇠로
친구의 우편함에 넣을 수 있어요. 이런 식으로 비공개 키에 대한 합의 없이도
비밀 메시지를 교환할 수 있지요. 공개 키 암호 방식은 공개된 인터넷에서 사용하는 보안 메시징의 기초입니다.
SSL 및 TLS로 알려진 보안 프로토콜을 포함하여
이 방식으로 웹을 탐색하는 사용자를 보호합니다. 오늘날 컴퓨터는 이 방식을 사용하죠.
브라우저의 주소창에 조그만 자물쇠나 https라는 글자가 그것을 나타내죠.
이는 곧 컴퓨터가 공개 키 암호화로 교환되는 데이터를 보호함을 의미합니다.
점점 더 많은 사람들이 인터넷을 이용함에 따라, 더 많은 비공개 데이터가 전송됩니다.
그리고 데이터 보호에 대한 필요성이 점점 더 중요해지죠.
그리고 컴퓨터가 더욱 더 빨라짐에 따라 컴퓨터가 해독하기 어려운
새로운 방법의 암호화를 개발해야 합니다. 이것이 저의 업무이지만 계속해서 변하고 있어요.