2018년 3월 27일 화요일

완벽한 암호는 있을까?

최초의 암호문은 스파르타 시대의 스키테일(scytale) 암호
⊙ 오늘날 널리 쓰이는 암호방식인 RSA 알고리즘은 소인수분해 방식 활용한 것
⊙ 패턴 암호, 홍채인식 암호 등 다양한 방식 등장
고대 스파르타인들이 사용했던 스키테일 암호.
  AM 7:00 아침에 눈을 뜨자마자 스마트폰에 지문을 올려 잠금을 풀고 알람을 끈다.
 
  AM 9:00 출근하여 PC의 암호를 입력하고 업무를 시작한다.
 
  AM 11:00 인터넷으로 사무용품을 주문하기 위해 공인인증서 비밀번호를 입력하여 결제한다.
 
  PM 1:00 점심값을 내기 위해 ATM기에 카드를 넣고 비밀번호 네 자리를 입력하여 현금을 찾는다.
 
  PM 3:00 메일로 업무 관련 파일을 전송하기 위해 메일 계정 아이디와 비밀번호를 입력한다.
 
  PM 7:00 퇴근하고 집에 들어가면서 현관문 비밀번호를 누른다.
 
  평범한 직장인이 단 하루 동안 사용한 암호(비밀번호)들이다. 단 하루라도 암호를 사용하지 않는 날이 있을까? 우리는 암호를 언제부터 사용했고, 암호를 사용하는 이유는 무엇일까?
 
  이번 연재에서는 이 단순한 궁금증에 대한 이야기를 하고자 한다.
 
 
  비밀 메시지를 전달하기 위해
 
  암호의 어원은 그리스어의 비밀이란 뜻을 가진 크립토스(kryptos)로 알려져 있다. 사전적 정의는 통신문의 내용을 제3자가 판독할 수 없도록 글자, 숫자, 부호 등으로 변경시킨 것이다. 이렇게 암호는 중요한 정보를 다른 사람이 보지 못하게 하기 위해 사용한다. 그렇다면 비밀스럽게 정보를 전달해야 할 때는 언제일까? 또한, 비밀 메시지를 전달하는 방법은 어떻게 발전되어 왔을까?
 
  아주 옛날에는 비밀을 유지하기 위해 기록을 하지 않고 직접 말로 전하는 방법을 사용했다. 또한 사자와 같은 동물의 털을 깎아 메시지를 쓰고, 털을 길러 보내면 받는 사람이 털을 깎아 메시지를 확인하는 방법도 이용했다.
 
  원시적인 방법을 벗어나 조금 더 과학적인 방법은 고대시대 전쟁을 배경으로 한 영화에서 찾아볼 수 있다. 아군에게 작전을 전달할 때 빈 종이처럼 보이지만 암호를 받은 사람이 종이를 불빛에 가져다 대면 메시지가 나타나는 장면을 본 적이 있을 것이다. 이는 불빛에 반응하는 약품으로 메시지를 적어 불빛과 반응할 때만 메시지를 볼 수 있도록 한 것이다. 이러한 암호 전달 방법을 스테가노그래피(Steganography)라고 하는데 이 암호 방식을 알고 있는 사람들에겐 비밀을 유지하기 어렵다는 한계가 있다.
 
  이렇게 작은 노력들을 시작으로 가장 안전한 암호를 만들기 위한 노력은 계속되어 왔다.
 
 
  본격적으로 시작된 암호화
 
  최초의 암호문은 스파르타 시대의 스키테일(scytale) 암호이다. 기원전 450년 경 당시 그리스 도시국가에서 전쟁터에 나가 있는 군대에 메시지를 보낼 때 사용한 암호로, 아래와 같은 방법으로 암호화했다.
 
  1. 암호를 공유하는 사람들끼리 같은 굵기의 원통형 막대를 가진다. 이 원통형 막대의 이름이 스키테일이다.
 
  2. 암호를 보내는 사람은 스키테일에 일정한 굵기의 종이를 나선으로 말아 가로로 전달할 메시지를 쓴다.
 
  3. 막대에 감았던 종이를 풀어 글자 순서가 섞인 상태로 전달한다.
 
  4. 암호를 받는 사람은 사전에 함께 나눠 가진 같은 굵기의 스키테일에 종이를 감아 원래 메시지가 무엇이었는지 확인한다.
 
  그러나 스키테일 암호는 원통의 굵기를 아는 모든 사람이 해독할 수 있기 때문에 보안에는 취약했다.
 
 
  다른 문자로 치환하라- 시저 암호
 
줄리어스 시저는 암살되기 전, 암살자를 주의하라는 암호 편지를 받았다. 그림은 칼 테오도르 폰 필로피의 ‘시저의 살해’.
  로마의 황제였던 줄리어스 시저(Julius Caesar)는 암살당하기 전 가족들로부터 긴급 메시지를 받았다. 메시지에는 ‘EH FDUHIXO IRU DVVDVVLQDWRU’라 쓰여 있었다. 이는 각 알파벳 순으로 세 자씩 뒤로 물려 읽는 방법으로 암호를 만든 것으로 암호문을 해독할 때는 알파벳 순서에서 3문자씩 당겨 읽으면 본래 메시지를 알 수 있었다.
 
  시저가 받은 메시지를 3글자씩 당겨서 읽어 보면 뜻은 ‘BE CAREFUL FOR ASSASSINATOR - 암살자를 주의하라’는 메시지였다. 이 시저 암호는 몇 문자씩 이동할지를 바꿔 가면서 사용할 수 있었기에 스키테일 암호보다는 보안이 조금 더 강화되었지만 이 또한 몇 번만 시도해 보면 금방 풀 수 있는 암호 방식이다.
 
 
  암호는 어떤 구조로 만들어지는가- 암호 알고리즘
 
  현대 사용되는 암호를 살펴보기 전에 암호의 기본적인 구조와 용어를 살펴보자.
 
  예를 들어 A가 ‘오늘밤 12시에 만나’라는 메시지를 암호화하여 B에게 보냈다고 하자. B는 ‘ㅇㄴㅂ 12ㅅㅇ ㅁㄴ’라는 메시지를 받았다. A와 B는 미리 자음을 활용하여 암호문을 만들 것이라는 약속을 한 상태였고, B는 받은 메시지를 해독해 냈다.
 
  이때, 암호를 보낸 사람 A를 ‘송신자’라 한다. 송신자가 보낸 ‘오늘밤 12시에 만나’와 같은 문장은 ‘평문’이라 한다. 또한 보안을 위해 다른 사람이 알아볼 수 없도록 가공하는 작업을 ‘암호화’라고 한다. 평문을 암호화하여 만든 문장 ‘ㅇㄴㅂ 12ㅅㅇ ㅁㄴ’은 ‘암호문’이 된다. 이 암호문을 받은 B는 ‘수신자’이고, ‘자음을 활용한다’는 약속은 ‘키(KEY)’가 된다. B가 암호화한 암호문을 키를 이용하여 평문을 알아내는 작업을 ‘복호화’라고 한다.
 
  이때 암호화 키와 복호화 키가 같은 암호를 대칭형 암호라 하고, 암호화 키와 복호화 키가 다른 암호를 비대칭형 암호라고 한다.
 
  우리가 앞서 살펴봤던 스키테일 암호와 시저 암호 모두 키가 동일한 대칭형 암호에 속한다. 대칭키 암호 방식에서는 암호화 키와 복호화 키가 동일한 비밀키를 사용하기 때문에 송신자와 수신자는 비밀 통신을 하기 전에 비밀키를 공유하고 있어야 한다. 반면 공개키 암호 방식에서는 하나의 쌍이 되는 공개키와 비밀키를 생성하여 암호화에 사용되는 공개키는 공개하고, 복호화에 사용되는 비밀키는 사용자가 안전하게 보관하도록 한다. 공개키 암호 방식에서는 송신자와 수신자가 사전에 키를 공유할 필요가 없기 때문에 불특정 다수 사용자 간에 사전 준비 없이도 암호 통신망을 구축하는 데 유용하게 사용할 수 있다.
 
 
  소인수분해와 RSA 암호
 
  오늘날 표준으로 사용되는 암호화 방법은 공개키 암호인 ‘RSA 알고리즘’이다. 이는 매사추세츠공대(MIT)의 로널드 리베스트(Ronald Rivest), 아디 샤미르(Adi Shamir), 레오나르도 애들먼(Leonard Adleman)이 고안해 낸 알고리즘으로, 그들 이름의 앞 글자를 따서 RSA 알고리즘이라 했다.
 
  RSA 알고리즘의 가장 큰 특징은 공개키 암호라는 점이다. 이전의 암호 방식에서는 사용하는 키뿐만 아니라 암호 알고리즘도 비밀로 하여 암호문의 비밀을 지키려 했지만, 현대 암호에서는 암호 알고리즘을 공개하도록 하고 있다. 1883년 아우구스테 케르크호프(Auguste Kerckhoff)는 암호 시스템의 안전성에 대해 ‘키 이외에 암호 시스템의 모든 것이 공개되어도 안전해야 한다’고 했는데 이것을 ‘케르크호프의 법칙(Kerckhoff’s principle)’이라고 한다. 이렇게 함으로써 암호 방식의 안전성을 공개적으로 검토하게 하여 안전성을 확인하는 것이다.
 
  그럼 이제 RSA 알고리즘이 무엇인지 알아보자. RSA 알고리즘의 기본적인 개념은 소수를 이용하는 것이다. 소수는 1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수를 말한다.
 
  중학교 수학시간에 배웠던 소인수분해를 기억하는가? 자연수를 소수의 곱으로 나타내는 것을 말하는데, 두 소수의 곱으로 이루어진 수가 어떤 수로 이루어지는가를 찾아내는 과정에서 RSA암호 만들기가 시작된다.
 
  예를 들어 143은 소수 13과 소수 11의 곱이라는 것을 구하는 것이다. 그리고 그 소수를 바로 암호로 이용하는 것이 아니라 복잡한 암호화 과정을 거쳐 암호문으로 만들기 때문에 암호를 분석해 내는 것은 더 오랜 시간이 걸린다.
 
  RSA 암호가 무엇인지 알아본 김에 RSA 알고리즘을 직접 만들어 보자. 다음은 암호학에서 소개하는 RSA 알고리즘의 간단한 방법이다.
 
  본래 RSA 암호를 만들 때는 최소 10자리가 넘는 두 개의 큰 소수를 사용하지만 독자들의 이해를 돕기 위해 가장 작은 소수인 2와 3을 이용하여 RSA의 암호화 작업을 하려고 한다.
 
  이 과정을 이해했다면 현재 당신이 사용하고 있는 대부분의 암호 알고리즘을 이해한 것이다. 우리가 사용한 소수는 아주 작은 소수라 복호화하는 과정이 수월했지만, 수의 자릿수가 커질수록 어떤 소수의 곱인지 찾아내는 것은 매우 힘들어진다. RSA 암호체계의 안전성은 큰 숫자를 소인수분해하는 것이 어렵다는 것에 기반을 두고 있다
 
RSA 알고리즘
 
  1. A는 두 개의 소수를 골라 두수를 곱한 n=pq를 구한다.
  두 소수 2와 3을 선택하여 두 수의 곱 n=6을 구한다.
 
  2. A는 gcd(e, (p-1)(q-1))=1인 e를 선택한다.
  gcd는 ‘Greatest Common Divisor’의 약자로 최대공약수를 의미한다. e는 암호화 지수 값이다. 따라서 e와 2(=(2-1)(3-1))의 최대공약수가 1인 e값을 찾는다. e=3이 가능하다.
 
  3. A는 de≡1 (mod(p-1)(q-1))인 d를 계산한다.
  수학기호 ‘≡’는 정수의 합동을 나타내는 기호로 a≡b(mod m)일 때 a를 m으로 나눈 나머지와 b를 m으로 나눈 나머지가 같다는 뜻이다. 따라서 d×3≡1 (mod2) 인 d를 구하면 된다. 1을 2로 나누면 나머지가 1이므로 d가 3이면 d×3=3×3=9가 되고, 9를 2로 나눠도 나머지가 1이 되므로 d=3이 가능하다. 여기서 d는 복호화 지수를 의미한다.
 
  4. A는 n과 e를 공개하고, p, q, d를 비밀로 한다.
  n=6, e=3을 공개하면 B는 이를 암호화하는 데 사용하게 된다. 이것이 바로 ‘공개키’다.
 
  5. B는 메시지 m을 c≡me(mod n)로 암호화하여 A에게 보낸다.
  B는 10이라는 메시지를 암호화하려고 한다. 10이 m값인 것이다. 따라서 c≡103(mod 6)이 되고, 1000은 6으로 나누면 나머지가 4가 된다. 따라서 c값으로 가능한 수는 16이 된다. B가 원래 전하려고 한 10은 암호화되어 16이 되었고 이 값을 A에게 보내게 된다.
 
  6. A는 m≡cd(mod n)를 계산하여 복호화한다.
  A는 m≡163(mod 6)을 계산하여 나머지가 4인 정수 중 하나가 원래 B가 보내려고 한 평문(10)임을 알아낼 수 있다.
 
  당신의 비밀번호는 안전한가?
 
  뉴스에서 해킹에 따른 금융 피해, 개인정보 유출 사례에 관한 사건들이 비일비재하게 보도된다. 따라서 사람들은 비밀번호의 안전을 위해 많은 노력을 하고 있다. 이러한 현상에 따라 ‘패스워드 증후군’이라는 용어도 생겼다. 이는 현대인들이 인터넷과 스마트폰을 쓰면서 보안을 위해 비밀번호를 계속 변경하면서 비밀번호를 기억하지 못해 혼란에 빠지는 것을 말한다.
 
  현대인들이 가장 많이 사용하는 암호는 아마도 스마트폰의 암호일 것이다. 스마트폰의 대표적인 암호 방식은 네 자리 숫자를 누르는 비밀번호 설정 방법과 점 9개의 일부를 연결하여 패턴을 그리는 패턴방호 방식이 있다.
 
  4자리의 비밀번호는 0000에서 9999까지의 숫자 중 하나를 설정하면 되므로 사용할 수 있는 비밀번호의 경우의 수는 1만 개가 있다. 그렇다면 패턴 암호을 설정할 수 있는 경우의 수는 몇 가지나 있을까? 패턴 암호는 9개의 점 중 4개 이상의 점을 연결하여 만들어야 한다는 조건이 있다. 현재 가능한 패턴 암호의 가짓수는 연구진마다 주장이 다르다.
 
  하지만 우리는 적어도 0001과 1000의 암호가 다른 패턴으로 인식되는 것만으로도 숫자 비밀번호보다 패턴 암호가 더 안전하다는 것을 알 수 있다.
 
 
  누구도 풀지 못하는 암호 - 생채인식 암호
 
홍채인식은 현존하는 생체인식 중 보안성이 가장 뛰어나다.
  스마트폰이 출시될 때마다 지문, 안면인식, 홍채인식 등의 잠금 방법이 큰 이슈가 되곤 한다. 생체인식 암호 중 일찍부터 널리 사용돼 왔던 것은 지문인식이다. 지문은 태아 3개월 때 만들어져 그 모양이 변하지 않고, 사람마다 지문이 모두 다르기 때문에 유일한 암호로 사용 가능하다.
 
  안면인식도 흔히 쓰이는데, 눈썹 간 거리, 얼굴뼈의 돌출 정도와 같은 특징을 활용하여 인식한다. 또한 얼굴 혈관에서 발생하는 열을 적외선 카메라로 촬영해 디지털정보로 변환하여 인식하기도 한다. 그러나 사람의 표정변화에 따라 인식을 못하는 경우도 있고, 조명에도 민감해서 변장 및 노화에 따른 얼굴 인식에는 현재 취약한 상태이다.
 
  얼마 전 출시된 스마트폰에는 최초로 홍채인식을 도입해 큰 화제가 되었다. 홍채인식은 인식기에 사람 눈을 맞추면 적외선 카메라가 사용자의 홍채를 이미지화하는데, 이를 개인 고유의 홍채코드를 생성하고 등록한 후 비교하는 방식으로 이뤄진다. 쌍둥이는 물론 사람의 양쪽 눈 홍채도 달라 현존하는 생체인식 방식 중 보안성이 가장 뛰어나다고 할 수 있다.
 
  생체정보는 자신만 가진 유일한 고유정보다. 따라서 아주 강력한 암호가 될 수 있다. 하지만 한번 유출되면 자신을 입증할 새로운 방법을 찾아야 한다는 맹점이 있다.⊙
 월간조선

댓글 없음: