어떻게 같은 열쇠로 잠그고 푸는 대칭키
집 현관문을 떠올려 보자. 나갈 때 열쇠로 잠그고, 들어올 때 같은 열쇠로 연다. 열쇠 하나가 잠그기와 열기를 모두 맡는 셈이에요. 대칭키 암호도 이렇게 잠글 때와 풀 때 같은 열쇠를 쓴다. 단순하고 빠르지만 골치 아픈 문제가 하나 숨어 있다. 멀리 있는 친구가 잠긴 편지를 풀려면 친구에게도 같은 열쇠가 있어야 하는데, 그 열쇠를 어떻게 안전하게 건넬까?
하나의 열쇠로 잠그고 풀어요
앞 레슨에서 암호화는 내용을 열쇠로 잠가 두고 맞는 열쇠로만 다시 풀게 하는 일이라고 했다. 대칭키라는 이름은 잠그는 열쇠와 푸는 열쇠가 똑같은 하나라는 데서 왔어요.
편지를 그 열쇠로 잠그면 아무도 읽을 수 없는 상태가 되고, 같은 열쇠를 대면 원래 내용으로 돌아온다. 잠그는 쪽과 푸는 쪽이 같은 열쇠를 나눠 쓰기 때문에 대칭이라고 부른다.
잠그기와 풀기를 차례로 눌러 보자. 잠그면 읽을 수 없게 되고, 같은 열쇠로 풀면 원래 글이 돌아와요.
잠그자 글자가 뒤죽박죽이 됐고, 같은 열쇠를 대자 다시 깔끔하게 읽혔다. 현관 열쇠 하나로 문을 잠그기도 열기도 하는 것과 같아요.
구조가 이렇게 단순하다 보니 큰 장점이 따라온다. 아주 빠르다는 점이다.
빠르고 간단해요
대칭키 암호는 계산이 비교적 단순하고 가벼워서 작은 쪽지든 큰 파일이든 순식간에 잠그고 푼다. 휴대폰 사진, 영상, 저장 장치 전체처럼 덩치 큰 데이터도 빠르게 처리해요. 요즘 컴퓨터와 휴대폰에는 이 계산을 전담하는 회로까지 들어 있다.
오늘날 가장 널리 쓰이는 대칭키 암호는 AES라는 방식이다. 와이파이, 메신저, 기기 저장소 암호화의 대부분이 이런 대칭키 암호로 데이터를 잠근다.
작은 데이터와 큰 데이터를 골라 잠가 보자. 덩치가 커도 같은 열쇠로 금방 잠기고 풀려요.
데이터가 커져도 잠그기가 금방 끝났다. 이 빠름 덕분에 대칭키 암호는 실제로 아주 널리 쓰여요. 그런데 여기서 생각해 볼 것이 있다.
내 파일을 나 혼자 잠그고 푼다면 열쇠를 나만 가지고 있으면 된다. 하지만 멀리 있는 사람에게 잠긴 편지를 보내 풀게 하려면, 그 사람도 같은 열쇠를 가지고 있어야 한다.
그 열쇠를 어떻게 건넬까
잠긴 편지만 보내면 친구는 풀 수 없다. 그래서 열쇠도 보내야 하는데, 열쇠가 지나갈 길을 생각하면 불안해져요. 그 길에 누가 끼어 있다면 지나가는 열쇠를 몰래 베낄 수 있다.
열쇠가 새는 순간 잠금은 아무 의미가 없어진다. 베낀 사람도 똑같이 풀 수 있기 때문이다. 그렇다고 열쇠까지 암호화해서 보내려면 그 암호를 풀 또 다른 열쇠가 필요하니 문제가 끝없이 되풀이돼요.
열쇠 보내기를 눌러 보자. 길에 누가 끼어 있으면 지나가는 열쇠가 복사될 수 있다는 것이 드러나요.
길에 누가 있자 열쇠가 그대로 복사됐다. 복사된 열쇠는 우리 잠금을 똑같이 풀어요. 그렇다고 열쇠를 아예 보내지 않으면 친구는 편지를 영영 풀 수 없다.
보내자니 복사가 걱정되고 안 보내자니 쓸 수가 없다. 직접 만나서 건네면 되겠지만, 인터넷에서 처음 만나는 수많은 상대와 일일이 그렇게 할 수는 없다.
보내도 막히고 안 보내도 막혀요
두 갈래 길을 나란히 놓아 보자. 첫째는 열쇠를 보내는 길이다. 빠르고 편하지만 중간에서 복사되면 잠금이 무너진다. 둘째는 열쇠를 보내지 않는 길이다. 복사될 걱정은 없지만 상대가 편지를 풀 방법이 없어요.
한쪽은 위험해서 막히고 다른 쪽은 쓸모가 없어서 막힌다. 게다가 사람이 늘어날수록 짝마다 따로 열쇠가 필요해서 나눠야 할 열쇠의 수도 빠르게 불어나요.
두 선택지를 하나씩 눌러 견줘 보자. 보내면 복사될 위험이 있고 안 보내면 풀 수 없어서, 어느 길도 막혀 있어요.
어느 쪽을 골라도 막다른 길이었다. 이것이 유명한 키 배송 문제다. 대칭키가 빠르고 좋아도, 둘이 나누는 비밀이 되는 순간 열쇠를 안전하게 건넬 방법이 필요해요. 사람들은 오랫동안 이 지점에서 막혀 있었다.
그러다 전혀 다른 발상이 나타났다. 잠그는 열쇠와 푸는 열쇠를 아예 둘로 나누는 공개키 암호다. 실제 인터넷에서는 공개키로 대칭키를 안전하게 건넨 다음, 빠른 대칭키로 데이터를 주고받는 식으로 둘을 함께 쓴다.
정리
정리하면 이렇다. 대칭키 암호는 잠글 때와 풀 때 같은 열쇠 하나를 쓴다. 그래서 단순하고, 큰 데이터도 아주 빠르게 처리한다. 하지만 떨어진 상대와 쓰려면 같은 열쇠를 건네야 하는데, 보내자니 복사가 걱정이고 안 보내자니 상대가 풀 수 없어요.
이 막다른 상황이 키 배송 문제다. 빠름은 그대로 살리면서 이 문제를 푸는 길이 다음 레슨의 공개키다.
핵심을 차례로 눌러 되짚어 보자. (같은 열쇠로 잠그고 풀기 → 빠르고 간단함 → 열쇠를 어떻게 건넬까 → 보내도 안 보내도 막힘) 다음 레슨의 공개키가 이 막다른 길을 풀어요.
이제 대칭키 암호의 빛과 그늘을 모두 봤다. 같은 열쇠 하나로 빠르게 잠그고 푸는 분명한 장점, 그리고 그 열쇠를 어떻게 나누느냐는 어려운 숙제다. 좋은 도구일수록 약점을 알아야 제대로 쓸 수 있어요.
다음 레슨에서는 잠그는 열쇠와 푸는 열쇠를 둘로 나누는 공개키 암호가 이 숙제를 어떻게 푸는지 살펴본다.