d라이브러리









2. 공개와비밀의 조화, 현대암호의 출현

전자상거래에 필수

일반적으로 ‘암호’ 하면 우리는 스파이들이나 사용하는 특수한 언어라고 생각한다. 그러나 암호는 1976년 ‘공개키’ 암호가 개발된 이래 비밀스런 문장을 만드는 것과 다른 의미의 기능을 갖게 됐다.

고전적인 암호의 경우 암호를 푸는 규약, 즉 키는 하나만 필요했다. 예를 들어 컴퓨터에서 문서를 작성한 후 비밀번호를 기입하는 경우를 생각해보자. 이 문서를 다른 사람에게 통신으로 보냈을 때 받아보는 사람은 같은 비밀번호를 넣어야 문서를 읽을 수 있다.

그러나 현대 사회에 들어서 불특정한 다수를 상대로 커뮤니케이션을 하는 일이 잦아지기 시작하자 상황이 달라졌다. 예를 들어 컴퓨터 통신 상에서 물건을 파는 전자상거래를 생각해보자. 파는 사람은 고객들과 개별적으로 일정한 암호를 정해 물건을 거래할 수 있다. 하지만 이들과 사전에 일일이 직접 만나서 암호를 정하기란 현실적으로 불가능하다. 고객의 수가 무수히 많을 수 있기 때문이다.
 

고전 암호의 개념^암호화시키는 키(암호키)와 이를 푸는 키(복호키)가 같다.


절반은 공개

이 문제를 해결하기 위해 등장한 것이 키를 두개로 만들어 사용한다는 개념이다. 파는 사람은 암호문 모음집을 만들어놓고 새로운 고객이 생길 때마다 암호를 하나씩 제공한다. 이 암호는 컴퓨터 통신 상의 모든 사람들에게 공개되기 때문에 ‘공개키’라고 부른다. 동시에 별도의 ‘비밀키’를 고객에게 제공한다. 암호의 일부는 공개하고 나머지는 비밀로 남겨놓는 방식이다.

고객의 입장에서 볼 때 자신의 공개키를 통해 거래처로부터 암호문을 받을 수 있다. 그러나 이를 풀 수 있는 것은 '비밀키'를 가진 자신뿐이다.
공개키와 비밀키는 어떻게 만들어질까. 1976년 미국 스탠포드 대학에서 ‘공개키시스템’이 만들어졌는데, 이를 RSA 방식이라 부른다. 여기서는 RSA 방식의 예를 통해 공개키와 비밀키가 만들어지는 과정을 간략하게 이해해보자. RSA 방식은 크게 세가지 단계로 구분된다.
 

현대암호의 개념^암호화시키는 키와 이를 푸는 키가 다르다. 암호키는 공개하고 복호키는 자신만이 가진다.


단계 1

임의의 소수(1과 자신 외에는 약수를 갖지 않는 수)를 두가지 선정한다. 예를 들어 p = 11, q = 3이라 하자.

단계 2

공개키를 선정하는 과정이다. 두 솟수를 곱한 값(n)과 (p-1)×(q-1)의 값을 구한다. 즉 n = pq = 33; (p-1)×(q-1) = (11-1)×(3-1) = 20이다. 이때 숫자 ‘20’과 1 이외에는 공약수를 갖지 않는 정수 중에서 임의로 한 수(e)를 택한다. 예를 들어 e = 3을 선택하자. 여기서 n과 e를 공개키로 정한다.

단계 3

비밀키(d)를 선정하는 과정이다. q에 d를 곱한 값을 (p-1)×(q-1)로 나누었을 때 나머지가 ‘1’이 되도록 d를 설정한다. 여기서는 3×7 = 1(mod 20), 즉 비밀키(d) = 7이다(1(mod 20)이란 어떤 수를 20으로 나누었을 때 나머지가 1이란 뜻이다).

이제 공개키와 비밀키를 이용해 암호화된 문장을 만들어보자. 한 회사에서 신상품을 개발해 고객에게 소개하는 경우를 생각하자. 이때 수신자나 송신자의 컴퓨터 프로그램에는 일정한 단어나 문장이 숫자로 (또는 역으로) 교환되는 장치가 내장돼 있다. 예를 들어 “신상품을 소개한다”라는 문장이 숫자 ‘5’로 약속돼 있다고 하자.

우선 회사에서는 이 문장을 암호화시켜 고객에게 보내려 할 것이다. 이때 사용되는 것이 공개키인 n과 e다.

암호문 = ${5}^{3}$= 125 = 26(mod 33)

즉 e(=3)는 암호화되기 전 문장 ‘5’를 몇제곱시킬 것인가를 결정하고, n(=33)은 그 결과값(125)을 얼마로 나눌 것인지를 결정한다. 이때 나머지 값인 ‘26’이 완성된 암호문이다.

고객은 어떻게 이 암호문을 풀까. 자신의 비밀키(d = 7)만을 알고 있으면 된다. 암호문이 도착했을 때 고객이 ‘7’을 입력시키면 컴퓨터는 다음과 같이 암호문을 해독한다.

평문 =${26}^{7}$ = 8031810176 = 5(mod 33)

즉 암호문 ‘26’을 n(=33)으로 나눈 나머지 값 ‘5’로 계산해낸다. 물론 컴퓨터 화면에는 “신상품을 소개한다”는 문장의 형태로 암호문이 해독돼 나타난다.

홈쇼핑에 필수

신상품 소개문을 모두 읽은 고객이 회사에 상품을 주문할 경우를 생각해보자. 산드라 블럭이 주연한 영화 ‘네트’를 보면 주인공이 피자 가게에 가지 않고 컴퓨터 통신을 통해 자신이 원하는 피자를 주문하는 것을 볼 수 있다. 이런 일은 이제 영화 속에서만 이루어지는 일이 아니다. 실제로 우리는 친구의 생일이나 기념일에 하이텔이나 천리안과 같은 통신을 이용해 꽃과 케이크 배달을 주문할 수 있고, 또 전세계를 연결하고 있는 커다란 네트워크인 인터넷을 통해 국내에 아직 보급되지 않은 세계 각국의 최신 정보와 제품을 살 수 있다.

예를 들어 인터넷에서 ‘http://www. marketkorea.com/ shopping.html’에 접속해보자. 책이나 잡지, 음반, 꽃 등을 판매하는 곳과 종합 쇼핑몰이 보일 것이다. 종합 쇼핑몰로 들어가면 백화점에 가야 살 수 있는 여러 물건들의 가격이 나타난다. 마음에 드는 상품을 고른 후 주문을 하고 대금을 치르면 물건이 며칠 내로 집으로 배달된다.

현실 세계에서는 가게에 가서 자신이 원하는 물건을 산 후, 그에 대한 대가로 현금을 지불하고 거스름돈을 받는 일이 자연스럽게 이루어진다. 마찬가지로 전자상거래에서도 물건에 대한 대금을 치러야 한다. 일반적으로 물건을 주문할 때 항상 접하는 것이 신용카드 번호를 입력하라는 메시지일 것이다.

그러나 자신의 신용카드 번호가 누구나 볼 수 있는 형태로 전송된다면 생각만 해도 끔직한 일이 벌어질 것이다. 그것을 본 사람은 누구나 그 정보를 이용해 인터넷에서 마음대로 쇼핑을 즐길 것이다. 실제로 국내에서 얼마 전까지 남의 신용카드 번호를 알아내 사용한 사건들이 심심찮게 벌어지고 있다.

따라서 전자상거래 소프트웨어는 고객이 신용카드 번호를 입력하면 자동으로 암호화된 문장으로 바뀌어 전송돼야 한다(인터넷을 통한 해외의 전자상거래는 대부분 이런 작업이 실용화되고 있다). 이 과정의 한 사례가 앞에서 설명한 RSA 방식이다. 예를 들어 ‘신상품을 사겠다’는 문장에 해당하는 문장 번호와 신용카드 번호를 입력하고 이를 회사의 공개키를 통해 암호화시킨 후 전송하는 방식이다.
 

전자상거래 구성도^소비자가 은행으로부터 신용카드를 발급받은 뒤(①), 컴퓨터 통신상에서 상점과 거래한다(②,③,④). 상점은 은행에 입금 여부를 확인한 뒤(⑤,⑥), 상품을 소비자에게 보낸다(⑦).


발뺌 못하게 본인 확인

이제 고객은 안전하게 신용카드를 이용해 전자상거래를 즐길 수 있다. 그러나 회사의 입장에서 볼 때 문제가 남아있다. 만일 고객이 물건을 주문한 후 나중에 ‘주문한 적이 없다’고 발뺌을 한다면 낭패이기 때문이다. 이런 일을 미연에 방지하려고 개발된 것이 ‘전자서명’이다.

전자서명이란 현재 사용하고 있는 사인이나 도장을 컴퓨터상에서 실현시킨 형태를 말한다. 일반적으로 서명은 자신만이 할 수 있고, 자신의 것을 누구든지 확인할 수 있어야 하며, 일단 서명한 내용은 변조할 수 없어야 한다.

만일 이런 조건을 갖춘 서명이 전자상거래에서 이루어진다면 회사는 ‘안심하고’ 고객의 주문을 받아들일 수 있을 것이다. 일단 서명을 한 이상 고객은 나중에 다른 말을 할 수 없기 때문이다. 이 전자서명을 만드는 일 역시 ‘암호화’ 과정을 통해 이루어진다. RSA 방식을 이용한 사례를 살펴보자.

먼저 고객은 자신의 비밀키(d = 7)로 다음의 계산을 통해 나온 서명문과 메시지(신상품을 사겠다 = 6)를 전송한다.

서명문 =${6}^{7}$= 279936 = 30(mod 33)

회사는 서명자의 공개키(n = 33, e = 3)를 이용해 다음의 계산으로부터 나온 값(A)과 서명자로부터 수신한 메시지 ‘6’을 비교한다. 이 값들이 같으면 유효한 서명으로 간주하고 그렇지 않으면 그 서명을 인정하지 않는다.

A =${30}^{3}$= 27000 = 6(mod 33)

여기서 서명자로부터 수신한 값(6)과 계산 결과 나온 값(6)이 같으므로 회사는 이를 유효한 서명으로 인정한다.
 

전자서명 개념도^소비자가 전자문서를 작성한 뒤 '비밀키'를 이용해 본인임을 알리는 서명을 하면, 그 내용은 전자서명 생성 알고리즘을 통해 암호화된다. 회사는 '공개키'를 이용해 암호문을 해독함으로써 서명이 진짜인지를 확인한다.


화폐 지불을 서명만으로

현재 우리나라에서는 전자서명이 부분적으로 사용되고 있을뿐이다. 그나마 외국의 기술을 도입해 사용하고 있는 실정이다. 과연 외국의 기술이 안전한지, 그리고 우리의 실정에 맞는지 장담하기 어렵다. 이런 문제들을 해결하기 위해 한국정보보호센터는 올해 안에 국내 전자서명의 표준화작업을 실현시키는 일을 추진하고 있다.

현대 사회에서 암호는 우리의 일상생활에 깊숙이 파고들고 있다. 전자서명에 이어 돈을 직접 내지 않고 서명만으로 돈을 지불하는 ‘전자화폐’가 보편화될 날도 멀지 않았다. 앞으로는 대통령을 뽑을 때 투표장에 나가지 않고 컴퓨터 단말기 앞에 앉아 ‘전자선거’를 할지도 모른다.
선진 각국은 암호기술을 국가전략사업으로 추진하면서 많은 투자를 하고 있다. 우리나라도 암호기술에 대해 국가적인 관심이 필요할 때다.
 

이 기사의 내용이 궁금하신가요?

기사 전문을 보시려면500(500원)이 필요합니다.

1997년 06월 과학동아 정보

  • 박성준

🎓️ 진로 추천

  • 컴퓨터공학
  • 정보·통신공학
  • 수학
이 기사를 읽은 분이 본
다른 인기기사는?