본문 바로가기

알아야 산다/IT 최신 정보

[IT 최신 정보] '알.쓸.굳.IT' 제5화 - 복잡하고 머리 아픈 암호화 이야기(1)



'정보'하면 컴퓨터나 인터넷이 자동으로 떠오르지요? 거의 모든 정보는 컴퓨터로 처리한다고 봐도 무방할 것 같은데요, 그래서인지 '정보보안'과 '암호화' 이슈가 끊이지 않습니다. 하루가 멀다 하고 시끌시끌합니다. 오늘은 듣기만 해도 머리에 쥐가 날 것 같은 암호화에 대해 이야기를 풀어보겠습니다. 


※ '알.쓸.굳.IT(알아봤자 쓸데없고 굳이 누가 알려주지 않는 IT 이야기)' 시리즈는 컴퓨터에 대해 관심이 없으시거나 상식이 거의 없다고 볼 수 있는 컴알못 분들을 대상으로 작성했답니다. '컴퓨터에 대해 아는 것은 별로 없지만 대강 어떻게 돌아간다 정도는 알고 싶다' or '그런 분들에게 설명해야 하는 곤란한 상황에 처해있다'는 분들을 생각하며 준비한 내용이기 때문에, 쉬운 이해를 위한 비유 및 약간의 과장, 과감한 단순화 과정이 있을 수 있다는 점 양해해주세요! 



  '암호화'가 무엇인지 암호 해독 좀 해주시지요


아무래도 암호화 이야기는 사전적 정의부터 시작하는 것이 좋겠어요. 암호화를 인터넷 백과사전 위키피디아에서 검색하면 아래와 같은 글이 나옵니다.


암호화(暗號化) 또는 엔크립션(encryption)은 특별한 지식을 소유한 사람들을 제외하고는 누구든지 읽어볼 수 없도록 알고리즘을 이용하여 정보(평문을 가리킴)를 전달하는 과정이다. 이러한 과정을 통해 암호화된 정보(암호문)를 낳는다. 이에 역행하는 과정을 해독 또는 디크립션(decryption)이라고 하며 이로써 암호화된 정보를 다시 읽을 수 있다.


암호화는 군사와 정부의 은밀한 대화를 위하여 오랫동안 이용되어 왔다. 암호화는 수많은 종류의 시민 체계의 정보를 보호하는 데 흔히 쓰이고 있다. 이를테면 CSI(Computer Security Institute)의 2007년 보고에 따르면 71%의 기업이 일부 데이터 전달을 위하여 암호화를 이용하며 53%가 일부 데이터 저장을 위해 암호화를 이용하는 것으로 조사되었다.

※ 출처: 위키피디아(바로 가기


대충 훑어만 봤을 뿐인데, 암호고 뭐고 그냥 다시 덮어버리고 싶네요. 자, 암호화는 특정한 사람만 읽어 볼 수 있도록 내용을 변경하는 것이고, 복호화는 그걸 아무나 볼 수 있는 내용으로 다시 바꾸는 과정입니다. 암호화를 왜 할까요? 특정한 누군가만 알아볼 수 있도록 내용을 '전달'하거나, 이 정보를 그 누구도 알아채지 못하게 하기 위해서겠지요? 그래서 아주 오래전부터 정부 기관이나 군대 등에서 열과 성을 다해 연구한 분야이기도 합니다. '연구를 많이 했다'는 것은 즉, 수많은 학자들이 대단한 결과물을 많이 만들었다는 것이겠지요. 그리고 슬프게도 그 한가운데는 수학이 있습니다. 저는 수포자이기 때문에 수학적인 부분은 최대한 배제하고 설명해 드릴게요. 그러니 너무 겁먹지 마시고, 언제나 그랬듯 그냥 이런 게 있는가보다 정도로 생각해주세요~



 그래도 이 정도는 알아 둬야 이해가 됩니다!



암호 관련 내용은 온갖 수학 용어와 한자어, 영어가 난무해서 읽으면서도 무슨 말인지 물음표만 둥둥 떠다녀요. 그래서 이 글에서는 꼭 알아야 할 가장 기본적인 용어는 설명해드리되, 최대한 풀어서 혹은 일반적으로 우리가 쓰는 표현으로 바꾸어보겠습니다! 으랏차차!


*평문: 암호화되기 이전의 상태입니다.

*암호화(인크립션): 일반적인 내용(평문)을 암호화된 내용(암호문)으로 만드는 과정입니다. 

*복호화(디크립션): 암호화된 내용(암호문)을 일반 내용(평문)으로 만드는 과정입니다. 

*암호화 키(키): 암호화하거나 복호화를 할 때 사용하는 열쇠 같은 것입니다. 자물쇠의 모양에 따라 열쇠가 필요 없는 경우도 있듯이, 키가 없어도 암호화할 수 있는 방식도 있습니다. 하지만 일반적인 암호화 과정에는 키가 필요하다고 볼 수 있어요.



 암호화하는 방법과 종류를 알아봅시다!


암호화를 하는 방법은 다양하지만, 크게 아래의 두 가지로 나눌 수 있습니다.


*복호화를 할 수 없는 암호화: 말 그대로 복호화 자체가 불가능한 암호화 방법입니다.

*복호화를 할 수 있는 암호화: 암호화된 내용(암호문)을 복호화하면 우리가 원하는 평문이 나오는 암호화 방법입니다. 보통 양방향 암호라고 합니다.


'복호화할 수 없는 암호화'의 경우, 엄밀히 따지면 암호화라고 하기에 살~짝 범위가 다르긴 합니다. 그래도 일반적으로 같이 취급하기 때문에 암호화 방법에 넣었어요. 이 암호화 방법은 '단방향 암호화'라고도 해요. 암호화된 내용은 그 이전으로 다시 돌아갈 수 없기 때문에 한번 암호화하면 끝이랍니다.  




이런 방식은 언제 사용될까요? 사이트에서 로그인할 때 암호 등의 내용을 저장하는 방식으로 많이 사용합니다. 사이트에 로그인 정보를 입력하면, 그 내용을 정해진 방식으로 암호화하고 그 결과가 미리 저장해 놓았던 값과 일치하는지 비교해봐요. 이런 식이라면 굳이 원래의 평문을 몰라도 사용하는 데 크게 지장이 없겠지요? 그리고 개인 정보가 유출되어도 암호화되어 있어서 안전하다고 하는 것 역시 복호화가 불가능한 암호화를 했기 때문이랍니다. 즉, 이 방식은 암호화된 내용이 유출되어도 비교적 안전하고 속도도 빠른 편이에요.  


'복호화할 수 있는 암호화'는 우리가 일반적으로 생각하는 바로 그 암호화입니다! 요건 '양방향 암호화'라고 하지요. 이 방식은 또다시 두 가지로 나눌 수 있습니다. '암호화 할 때랑 복호화 할 때 사용하는 키가 같은 방식'과 '암호화할 때와 복호화할 때 다른 키를 사용하는 방식'이 있어요. 전자는 자물쇠를 잠그는 열쇠와 여는 열쇠가 같은 것! 후자는 잠글 때 사용하는 전용 열쇠 따로, 열 때 사용하는 전용 열쇠 따로라고 생각하시면 편하겠어요. 여기서 양쪽 키가 같은 방식을 '대칭키 암호화', 양쪽 키가 다른 방식을 '비대칭키 암호화'라고 합니다. 


여기까진 잘 따라오고 계시지요? 그럼 이제 대칭키 암호화와 비대칭키 암호화를 더 파고들어 볼게요. 대칭키 암호화는 일반 평문에 암호와 키와 특정 방식을 적용해 암호화를 하면 암호문이 나오고, 암호문을 암호화 키와 특정 방식을 적용해 복호화하면 평문이 나오는 방식입니다. 복호화를 하면 원문의 내용을 확인할 수 있기 때문에 유출 위험성이 있겠지요? 가장 큰 문제점은 암호문과 관련된 모든 사람이 키를 공유하거나, 암호문과 함께 키를 전송한다는 것입니다. 같은 키를 지니고 있는 사람이 많을수록 유출될 가능성이 매우 높아지며, 암호문과 키를 통신상에 함께 전송하는 것 역시 금고를 보내면서 금고 옆에 열쇠를 같이 붙여 보내는 것과 같은 상황이에요. 


그리하여 탄생한 것이 비대칭키 암호화 기술입니다. 정확한 원리는 수학적으로 이래저래 복잡하지만 최대한 단순하게 설명 드려 볼게요! 



 

- 서로 다른 두 개의 키가 있음

- 하나의 키로 암호화한 것은 또 다른 키로만 복호화 됨(암호화한 키로 복호화를 시도해도 복호화가 되지 않음)


이 방식을 이용하면, 두 개의 키 중 하나는 사람들이 모두 볼 수 있도록 공개하고 다른 하나는 통신상에 전송하거나 본인만 가지고 있으면서 암/복호화를 하는 방식으로 사용할 수 있습니다. 만일 누군가가 내게 암호화된 내용을 전송하고 싶다면, 내가 공개한 암호화 키를 이용해 평문을 암호화한 후 내게 전달합니다. 그럼 나만 소유하고 있는 키를 이용해 그 암호문을 복호화해서 볼 수 있겠지요? 반대로 나 역시 누군가에게 암호문을 보내고 싶을 때, 나만의 키를 이용해 암호화해서 보내주면 암호문을 받은 사람은 내가 공개한 키를 사용해 암호를 복호화할 수 있습니다. 


 

사람들에게 공개된 나의 암호화 키를 '공개키'라고 하고, 나만 가지고 있는 키를 '개인키' 혹은 '비밀키'라고 표현합니다. 사실 이 방법은 문제가 좀 있어요. 다른 사람이 내게 비밀 메시지를 보내는 것은 괜찮지만 내가 누군가에게 비밀 메시지를 보내는 것은 별 의미가 없어요. 복호화할 수 있는 키가 이미 공개되어 있기 때문에 누구나 내용을 확인할 수 있는 것이지요. 


※ 참고로 아주 살짝~ 수학적인 내용을 소환해보겠습니다. 아주 커다란 소수(Prime Number, 1과 자기 자신으로만 나누어 지는 수: 2, 3, 5, 7, 11, 13 등) 두 개가 있다고 해봅시다. 이 두 개의 숫자가 무엇인지를 알면 두 숫자를 곱했을 때 값은 쉽게 알 수 있는 반면, 그 반대로 곱한 값을 보고 두 개의 소수가 무엇이었는지를 찾기는 어렵지요. 바로 여기서 착안한 방식이 비대칭키 암호화 기술이랍니다. 예를 들어, 2와 7을 곱하면 14라는 것은 아주 쉽지만 14만 보고 어떤 소수 두 개를 곱한 값인지 찾아내는 것은 좀 시간이 걸려요. 물론 이것은 이해를 돕기 위해 작은 숫자를 예로 든 것이고 실제로는 아주아주 큰 숫자를 사용하기 때문에 컴퓨터로도 찾아내기가 힘들다고 합니다. 




다른 사람은 나에게 암호화된 글을 보낼 수 있지만 나는 다른 사람들에게 암호화된 글을 보내는 것이 의미 없다는데, 그렇다면 대체 이 방식은 언제, 왜 쓰는 것인가 싶으실 거예요. 잘 생각해보면 내 공개키로 암호화가 해제되는 암호문을 만들 수 있는 사람은 너무도 당연하게 '오직 나 하나뿐'이겠지요? 좀 더 자세히!! 자, 내 공개키로 복호화된 문장을 만들 수 있도록 암호화하려면 나만 가지고 있는 개인키로 밖에 할 수 없어요. 그래서 통신상 어떤 내용을 받았을 때, 내 공개키로 복호화가 가능하다면 그 내용은 내가 보낸 메시지임을 보장할 수 있단 말이지요. 이는 금융거래 시 매우 중요한 포인트가 된답니다. 다른 사람이 해킹해서 금융거래를 한 것이 아니라, 나만의 개인키로 내가 거래를 시도한 것이라고 증명할 수 있어요. 금융거래뿐만 아니라 법적인 부분도 상당히 중요하기 때문에 비대칭키 암호화 방식이 많이 사용돼요. 


여기까지 복잡한 내용 따라오시느라 수고 많으셨어요. 아직 조금 아리송하시지요? 2편에서는 좀 더 재미있는 사례를 들어 찰떡같이 적용해보겠습니다! 다음 편 꼭 기대해주세요~