실전! 개발자를 위한 Security 체크 포인트
⑥ 암호화 기술

작성자 : 김문규
최초 작성일 : 2008. 8. 12
* 본 포스트는 SDS e-campus의 '실전 개발자를 위한 Security 체크포인트' 강의 내용을 발췌하여 재구성한 개인적인 학습노트 입니다.

이번 포스트에서는 굉장히 친숙한 보안 용어들에 대해 알아보려 합니다. SSL, 공인 인증, 대칭키, 비대칭키 암호화, PKI .... 정말 많이 들어 봤습니다. 하지만, 자세히 모르고 있는 경우가 많습니다. 이들이 대략적으로 무엇인지 알아보기로 하겠습니다.


1. SSL

1) SSL 이란?
미국의 Netscape사에 의해 개발된 SSL 프로토콜은 클라이언트와 서버 사이에서 오가는 데이터의 인증 및 암호화 통신을 위해 사용되는 프로토콜

2) 수행 단계

SSL이 수행되는 단계는 총 3가지로 분류된다.
 - SSL Server Authentication
사용자의 웹브라우저가 상대방의 웹서버를 인증하는 단계이다.
SSL을 지원하는 웹브라우저는 표준 공용키 암호화 기법을 사용하여 서버의 인증서와 공용 ID를 실제로 브라우져가 신뢰하는 인증기관(Trusted CA)으로부터 발급받았는지 여부를 인증하는 기능을 내장하고 있다.

 - SSL Client Authentication
웹서버가 자신에게 요청한 클라이언트를 인증하는 단계이다.
서버 인증 시에 사용했던 동일한 기법으로 인증하는데 서버에 내장된 SSL 지원 소프트웨어나 서버 앞에 배치된 SSL 하드웨어는 클라이언트의 인증서와 공용 ID 를 실제로 서버가 신뢰하는 인증기관(Trusted CA)으로부터 발급 받았는지 여부를 인증하는 기능을 내장하고 있다.

 - Encrypt Connection
서로에 대한 인증단계 이후 정상적으로 종결되면 클라이언트와 서버사이에 교환되는 모든 데이터는 사적인 내용을 보호하기 위한 암호화를 요구받는다. 또한 SSL커넥션을 통해 암호화된 데이터 역시 전송 중 변경을 방지(Message Integrity)하기 위해 Hash 알고리즘이라고 불리는 기술에 의해 보호된다.

위의 3가지 단계를 기반으로 실제로 구현되는 순서는 다음과 같으며, 다음 순서를 진행하기에 앞서 SSL 또한 TCP 프로토콜에 기반을 두고 있으므로 반드시 TCP 3 Handshake는 이루어져 있어만 한다.

3) SSL Handshaking

사용자 삽입 이미지


각 스텝에서 교환되는 데이터의 주된 내용은 아래와 같습니다.

Step Action
1 ClientHello 메시지를 Serve전송 : SSL 버젼번호, 암호화방식 등
2 Client가 전송한 메세지에 대한 응답 :
Client 가 제안한 SSL 옵션들에 대해서 사용할 기능을 선택하여 Client 에게 답변. 필요시 디지털 인증서의 요청 및 전달
3 ServerKeyExchange 메시지 전송 :
서버의 공개키를 포함하는 메세지 전송.
4 ServerHelloDone 메시지 전송 :
서버가 Client에게 일련의 작업이 정상종료 됨을 알려줌.
5 Client의 Key정보 전송 :
클라이언트는 암호화에 사용되는 세션 키와 함께 클라이언트에서 지원하는 Cipher Suite를 서버로 전송하며, 서버가 인증서를 요청한 경우에는 클라이언트의 인증서도 함께 전송
6 Client 는 보안서비스 시작 메세지 전송 :
Client와 서버간의 일련의 Key교환 및 교섭작업의 완료를 알림
7 협상성공 및 보안검증의 완료메세지 전송 : Client측
8 서버도 보안서비스 시작 메세지 전송 :
Client와 서버간의 일련의 Key 교환 및 교섭작업의 완료를 알림
9 협상성공 및 보안검증의 완료메세지 전송 : 서버측

4) SSL의 암호화 방식

SSL에서는 대칭키 암호화 방식, 공개키 암호화, 디지털 인증 기술을 모두 사용하게 됩니다.

먼저 디지털 인증서 교환을 통해 상대방에 대한 인증을 확실히 하고 이를 통해 공개키 암호화의 단점을 보완하였습니다.
다음으로 공개키 암호화 기술을 이용해서 세션키를 클라이언트, 서버가 공유합니다. 비용은 비싸지만 세션키를 보호하기 위하여 높은 수준의 보안 기술을 사용하게 됩니다.
마지막으로 공유된 세션키를 이용해서 대칭키 암호화 방식으로 통신합니다. 이 방식은 공개키 방식에 비해 낮은 수준의 보안을 제공하지만 데이터 처리 부하가 적어서 빠르게 통신이 가능해 지기 때문에 사용합니다.

참고로 SSL에서 세션키를 통해 암호화하는 암호화 기법으로는 DES, 3DES, RC2, RC4등이 있고 40비트부터 168비트까지 사용됩니다. 메시지 무결성(Message Integrity) 보장을 위해 사용되는 Hash 알고리즘으로는 MD5나 SHA1.등이 주로 사용 됩니다.

이에 대한 조금더 자세한 내용은 본 포스트의 3절에서 다룹니다.


2. 공인 인증

1) 역할
인터넷 뱅킹 혹은 Online 쇼핑 등은 거래당사자들의 비대면거래에 의해, 상행위가 이루어집니다. 눈으로 볼 수 없는 상대편을 인정하고, 신뢰하여야 거래가 이루어지지요. 그렇다면, 어떻게 인증하고 신뢰할 수 있을까요? 바로 공인인증서가 그 역할을 수행할 수 있습니다. 전자상거래가 요구하는 인증/무결성/부인봉쇄를 위해 전자서명을 하면 될 것이고, 비밀성을 보장받으려면 암호화를 하면 되는 것입니다.

공인인증이란, 어떤 문서를 모든 사람들이 신뢰할 수 있도록 공탁이란 것을 하듯이, 공인인증서를 이용하여 "이 거래는 법적으로 유효한 것입니다"라고 인감도장을 찍음으로써 거래를 신뢰할 수 있도록 하는 것입니다.
또한 이 공인인증서는 국가가 인정한 공인기관(CA)으로 하여금 유효성을 관리하도록 하고 있지요.

2) 공인 인증 과정
사용자 삽입 이미지

RA는 은행, CA는 금융 결제원에 해당됩니다. (이외에도 CA는 한국 증권 전산, 한국 전산원, 한국 정보 인증, 한국 전자 인증, KTNET이 있습니다.)

다음은 각 과정을 자세히 설명한 것입니다.
Step Action
1 본인확인 :
공인인증서를 발급받기 위해서는 반드시, 대면확인을 통하여,
본인임을 증명하여야 합니다.  Online상의 카드인증 및 실명인증 등은 아직까지 대면확인의 효력을 갖지 못합니다. 그러다 보니, 제1금융권(은행)의 경우, 통장개설시 실명확인 및 주민등록증 등에 의한
대면확인이 가능하므로 RA의 기능을 수행할 수 있지요.
2,3 신청정보 전송 :
은행의 Teller등에 의하여, 본인확인 절차를 거친 후, 등록 요청기관/
주민NO 등의 정보를 CA로 전송합니다.
4,5 응답 :
CA는 RA 로부터의 요청을 접수 후, 임시번호의 역할을 하게 되는,
참조번호와 인가코드를 RA를 통하여, 신청자에게 전달합니다.
6 인증서신청 :
사용자는 일정기간 내에 전달받은 참조번호와 인가코드를 이용하여, CA로부터 일정한 유효기간(1년)을 갖는 인증서를 발급받습니다.
7 인증서 발급정보 배포 :
CA는 신규 발급한 인증서의 발급정보를 각 금융기관 등에
배포함으로써, 인증서의 유효성을 검증합니다.


3. 암호화 알고리즘

1) 대칭키 암호화
대칭키 암호 알고리즘은 비밀키 암호 알고리즘 혹은 단일키 암호 알고리즘이라고 불리기도 하는데 이 방식은 송/수신자가 동일한 키에 의해 암호화 및 복호화 과정을 수행합니다.

 - 블록 암호 알고리즘
블록 암호 알고리즘은 고정된 크기의 입력 블록을 고정된 크기의 출력 블록으로 변경하는 암호알고리즘에 의해 암호화 및 복호화 과정을 수행합니다.
대표적인 알고리즘으로 DES(Data Encryption Standard), Triple DES, Skipjack, IDEA(International Data Encryption Algorithm), FEAL(Fast Data Encipherment Algorithm), MISTY 등이 있습니다.

 - 스트림 암호 알고리즘
스트림 암호 알고리즘은 이진화된(binary) 평문과 키 이진 수열을 배타적 논리합 (eXclusive-OR) 이라는 비트 단위 이진 연산으로 결합하여 암호문을 생성하는 방식입니다.
스트림 암호 알고리즘은 사용하는 스트림이 주기적인지 아닌지에 따라 두 가지로 분류 가능합니다.
키 스트림이 어떤 주기를 갖고 반복되는 경우에 사용하는 주기적 스트림 암호 알고리즘과, 키가 반복이 없는 경우에 사용하는 비주기적 스트림 암호 알고리즘이 있습니다.
대표적인 알고리즘으로는 RC4,SEAL(Software-optimized Encryption Algorithm)등이 있습니다.

2) 비대칭키 암호화
공개키 암호 알고리즘을 사용하는 시스템은 암복호화에 사용되는 Key Set을 다르게 생성, 배포 및 관리함으로 높은 수준의 보안 유지가 가능합니다.  공개키 암호 시스템은 두 개의 Key Set을 생성하여 그 중 하나를 공개하고 (Publickey), 나머지 하나는 비밀키로 자신이 보관하여 (Private Key) 사용하는 암호 시스템 방식입니다.
사용자 삽입 이미지
 - RSA 암호화
 - Rabin 암호화
 - Merkle-Hellman Knapsack 암호화
 - Graham-Shamir 암호화
 - McEliece 암호화, Elliptic Curve 암호화

3) 비교
항 목
대칭키
비대칭키
비용
속도
키배포 및 관리의 편리성
안전성


4) Hybrid 방식 암호화
실제의 업무에 있어서는 대칭키 및 비대칭키방식을 혼용하여 사용하는 방식을 사용합니다.
전송하고자 하는 실제 Data는 대칭키방식을 이용하여 암호화하고, 이때 사용되는 대칭키는 PKI방식의 비대칭키를 이용하여 암호화를 한 후, 이를 전송하게 되는 방식입니다.
실제 데이터를 대칭키방식으로 암호화함으로써, 속도 및 길이의 효율성을 높이며 대칭키는 PKI방식을 이용함으로써, 키배포의 위험성을 없애고 보안을 강화할 수 있는 것입니다.
사용자 삽입 이미지

5) Hash
해쉬함수는 임의의 고정된 길이의 비트 문자열(해쉬코드)을 출력하는 함수로써, 다음과 같은 성질을 갖고 있습니다.
 -  출력된 해쉬코드에 대한 원본 비트 문자열을 찾아내는 것은 불가능
 -  주어진 입력에 대해 같은 해쉬코드를 생성하는 또 다른 입력값을 찾아내는 것은 불가능

이와 같은 성질을 이용하여, 해쉬함수는 전자서명의 무결성을 보장하는 데 많이 이용되고 있습니다. 또한, 비밀번호와 같이 복호화할 필요가 없는 자료의 단방향 암호화에도 사용되고 있습니다.

- Hash를 이용한 데이터 교환의 동작 순서는 아래와 같습니다.

송신자에서
① 송신하고자 하는 문자열의 해쉬코드를 구합니다.
② 구해진 해쉬코드에 비밀키로 서명을 합니다.
③ 평문과 ②의 데이타를 묶어서 수신자의 공개키로 암호화 합니다.

수신자에서
④ 자신의 개인키로 복호화합니다.
⑤ 풀려진 전자서명(해쉬코드+송신자의 비밀키) 값을 송신자의 공개키로 풀어서 해쉬코드를 구합니다.
⑥ ④에서 구한 평문을 해쉬함수를 적용하여 그 결과와 ⑤의 해쉬 코드를 비교하여 무결성을 검증합니다.

4. 맺음말
시작할 때 말씀드린 것처럼 본 포스트에서 다룬 내용은 엔지니어에게 아주 익숙한 보안 용어들입니다. 하지만, 막상 동작 과정을 설명해보라고 하면 쉽지 않은 것이 사실입니다.
저 역시 보안 관련 종사하는 엔지니어가 아니라서 마찬가지 였고 내용을 차근차근 학습하면서 '아 이런거구나'라면 혼잣말을 했습니다. 개인적으로는 정말 도움이 많이 되는 내용들이 었습니다.
기회가 되신 다면 더 깊은 내용을 확인하시는 것도 도움이 되시겠지만, 워낙 내용이 갑자기 어려워질 수 있으니 각오 단단히 하시길 바랍니다. ^^
그럼 이만...쓩!