Computer/Network

암호화

알찬돌삐 2005. 5. 15. 19:36
개인 자산 보호하는 암호화 기술
다양한 보안 기술은 결국 개인의 정보나 기업의 기밀을 보호하기 위한 수단이다.
그중 암호화는 자산을 보호하는 직접적인 방법으로, 외부에 드러내서는 안될 자산을 특정 방식의 암호 알고리즘을 이용해 데이터를 알아보지 못하도록 하는 기술이다.

사용된 암호를 푸는 키를 알고 있는 사람만이 암호화된 자산을 볼 수 있다.

이번 강좌를 통해 암호화 기술의 종류와 방법을 알아본다.

암호화(Cryptography)는 원래의 데이터인 평문(Plaintext)을 해독할 수 없는 암호문(Ciphertext)으로 변형하는 기술이다.

파이어월, IDS(Intrusion Detection System) 기술이 인터넷을 통해 들어오는 위협에 대처하기 위한 것이라면, 암호 기술은 인터넷 보안 위협과는 무관하게 데이터 자체를 보호하기 위한 기술이다.

즉, 인터넷을 통해 물건을 구매할 때 사용하는 신용카드번호, 주민번호, 혹은 계좌번호 등이 암호화돼 있다면, 누군가 해킹을 통해 정보를 가져갔다고 해도, 쉽게 풀지 못해 정보 누출을 막을 수 있다.


대칭키와 비대칭키로 대표되는 암호화 기술

암호화는 특정 방식의 암호 알고리즘을 이용해서 데이터를 암호화하는데, 이때 사용된 암호를 푸는 키(key)를 알고 있는 사람만이 데이터를 볼 수 있다.

암호화 기술은 전자상거래, 인터넷을 통한 자료 전송, 전자우편 등 사용처는 무궁무진하다.
암호 기술의 안전도는 주로 암호화를 할 때 사용하는 키의 크기로 이야기하는데, 40비트, 128비트 등 여러가지가 있다.

40비트 키를 사용하는 RC4-40 암호 기술보다는 128비트 키를 사용하는 IDEA 알고리즘이 더 안전하다.

그 이유는 해킹을 하려면 키의 값을 일일히 대조해야 하는데, 키가 클수록 경우의 수가 많아지기

때문에 당연히 해킹하는데 많은 시간이 걸리기 때문이다.


현재 사용되는 암호 알고리즘은 대칭키(비밀키)와 비대칭키(공개키) 두 가지가 가장 대표적이다.

대칭키 암호 알고리즘은 데이터를 암호화하는 암호화키와 암호문을 원래의 데이터로 바꿔주는 복호화키를 동일하게 사용하는 방식이다.

즉, 통신하고자 하는 양측이 하나의 키를 공유하고 이 키를 이용해 암호를 연산하는 것이다.

대칭키로 정보를 주고받기 위해서는 사전에 두 사람 사이에 미리 키를 공유해야 하는데, 이를 위해서 서로 만나거나 안전한 방법으로 키를 전달해야한다.
비대칭키 방식은 하나는 개인키라고 해서 비밀키로 두고, 나머지 한 개는 공개키라고 해서 공개한다.

비대칭키 방식이 공개키와 비밀키를 사용하기 때문에 대칭키에 비해 키 관리가 편리하다.

당연히 암호를 잠근 사람이 풀 사람에게 암호키를 알려줘야 암호를 해독할 수 있기 때문이다.

여기서 문제는 키를 어떻게 분배할 것인가가 관건인데, 예전처럼 군사나 외교상의 특수 목적에 암호화를 적용할 때는 대칭키를 사용했지만, 최근처럼 불특정 다수가 사용하는 인터넷 쇼핑몰과 같은 곳에서는 가입자와 쇼핑몰 간의 키를 안전하게 분배하는 것이 중요하다.


암호화 시스템의 종류


다양한 방법을 사용하는 대칭키 암호 알고리즘

대칭키 암호 알고리즘은 비트나 바이트, 워드 단위로 암호화하는 스트림(stream) 암호와 일정한 크기의 블록을 단위로 암호화하는 블록 암호 알고리즘으로 구분된다.

블록 암호 방식은 블록 단위로 데이터를 암호화하거나 복호화하지만, 스트림 암호 방식은 데이터 단위로 비트를 채택하고 있다.

스트림 암호 방식은 암호화할 때 일반적으로 비트 단위 XOR 연산을 채택하는데, 평문과 키 스트림과의 결합에 의존하는 방식이다.
RSA 데이터 보안을 위한 RC4는 대표적인 스트림 암호이다.

이 방식은 바이트 단위로 연산을 수행하는데 키 크기를 변화시킬 수 있다는 것이 장점이다.

그리고 ONE-TIME PAD라는 랜덤하고 복잡하게 생성된 비트 스트림을 사용하는 방식도 있는데, ONE-TIME PAD는 모든 키 스트림이 랜덤하기 때문에 어떻게 생각하면 가장 완벽한 보안 방식이라고 할 수도 있다.

하지만 키 스트림의 길이가 평문의 길이와 같아야 하기 때문에 비현실적인 암호 방식이다.


대칭키 암호 알고리즘의 대표적인 것이 DES(Data Encryption Standard)다.

DES는 키 길이와 블록 크기가 각각 64비트인 블록 암호 알고리즘으로, 1976년 미국에서 표준으로 채택돼 20여년 동안 사용되고 있다.

DES는 여러 가지 공격에 잘 견뎌왔지만 컴퓨터의 성능이 좋아짐에 따라 키의 크기가 더 큰 알고리즘이 요구되고 있다.

현재는 128비트 이상의 키 길이를 갖는 알고리즘을 권장하고 있다.
이후 1997년 미국에서 새로운 표준으로 AES(Advanced Encryption Standard)를 공표했다.

AES는 128, 192, 256비트의 키 길이를 갖고, 키 길이를 확장할 수 있어 상당 기간동안 사용할 수 있도록 고려한 블록 암호 알고리즘이다.

현재 MARS, RC6TM, Rijndael, Serpent, Twofish 등 5개를 대상으로 최종 심사 중이다.

미국에서뿐만 아니라 국내에서도 한국정보보호진흥원과 ETRI 주도하에 키 길이 128비트인

블록 암호 알고리즘 SEED를 채택했다.

현재 국제 표준 알고리즘으로 인정받기 위해 작업중이다.



관리가 편하고 전자서명이 가능한 공개키 암호

비대칭 암호화(공개키 암호화)는 1976년에 마틴 헬만(Martin Hellman)과 휫필드 디피(Whitfield Diffie)가 개발한 것으로, 암호화와 해독시 다른 키를 사용하는 비대칭적인 암호화 기법이다.

대칭키 알고리즘에 비해 키 관리가 쉽고 전자 서명이 가능하다는 장점이 있지만, 복잡한 수학적 연산이 필요하기 때문에 속도가 느리다는 것이 단점이다.

그래서 큰 용량의 정보를 암호화하는 것은 그리 효율적이지 못하다.

따라서 암호화는 대칭키 알고리즘을 사용하고, 사용한 키를 공유하거나 전달할 때는 공개키 알고리즘을 사용하는 하이브리드 방식이 최근 많이 사용되고 있다.
공개키 암호 알고리즘은 주로 수학적인 이론을 이용하게 되는데, 소인수 분해 방법과 이산 대수 방법이 많이 사용된다.

소인수 분해 방법으로는 RSA 알고리즘이 대표적이고, 이산 대수 방법은 현재 미국 전자서명 표준인 DSA, 국내 표준인 KCDSA 등에 사용되고 있다.

현재 이 두가지 방법을 이용한 알고리즘의 경우 1024비트 정도의 키 길이가 권장되고 있으며, 중요한 서버의 경우는 더 큰 키를 사용하는 것이 좋다.
최근에는 비대칭형 알고리즘 중 ECC(Elliptic Curve Cryptosystem)라는 타원 곡선을 이용하는 시스템이 관심을 끌고 있다.

이는 타원 곡선이라는 수학적 대상에 이산 대수 문제를 적용한 것으로, 이를 이용할 경우 160비트의 키를 제공한다.

1024비트의 RSA나 DSA와 비슷한 정도의 기밀성을 갖기 때문에 저장 용량이 제한된 스마트 카드 등에 알맞은 방법이다.


여기서 공개키의 신뢰성을 높이는 인증기관인 CA(Certification Authority)의 역할이 중요하다.

인증기관은 공개키를 책임지고 보증하는 역할을 한다.

인증 기관에서는 인증서를 발행해주고 그 안에 공개키가 포함된다.

사용자는 인증기관의 인증서를 보고 안심하고 공개키로 편지를 써서 보내는 것이다.

상대방도 역시 인증기관의 인증서에 있는 공개키에 일치되는 비밀키가 자신의 것과 동일하다면 안심하고 내용을 확인하고 상대방에게 연락한다.
비대칭키 중 하나인 PKI(Public Key Infrastructure) 암호 방식은 전자서명에도 이용된다.

이는 메일을 받을 때 비밀키(개인키)를 가진 쪽에서 서명을 하게 돼 있기 때문에 받아놓고는 못 받았다고 발뺌할 수는 없다.


서명의 검증

해시코드 서명 서명 입증 해시코드 해시코드가 같으면, 서명은 인정된다



웹의 대표적 암호화 기법, SSL
웹 브라우저 개발 회사로 잘 알려진 넷스케이프에서 개발한 SSL(Secure Sockets Layer)은 TCP(Transmission Control Protocol) 계층 바로 위에 위치해 클라이언트와 서버 간의 암복호화를 제공한다.

SSL 기술은 인터넷 상에서 최초로 구현돼 웹 보안을 위한 가장 대표적인 기술로 손꼽히고 있다.



·서버 인증 : 사용자가 통신을 하고자 하는 서버를 인증한다.

서버 인증은 공개키(Public Key) 기술을 사용해 이뤄지는데, 이 절차는 서버가 공인인증기관으로부터 올바르게 인증서를 발급받았는지를 확인하는 것이다.

즉 베리사인(VeriSign)과 같은 공인인증기관이 발급한 인증서를 서버가 제대로 가지고 있는지를 확인해 인터넷 전자상거래시 웹 사이트(서버)의 실제 존재 유무를 확인한다.

베리사인과 같은 공인인증기관에서는 도메인 이름 단위로 사업장 방문 실사와 같은 까다로운 절차를 거쳐 실제로 존재하는 웹사이트에만 서버 인증용 인증서를 발급한다.


·클라이언트 인증 : 클라이언트 인증은 서버가 클라이언트와의 통신을 허용하기 위한 과정으로, 서버 인증과 비슷한 방법과 절차로 진행된다.

통상 온라인 뱅킹이나 증권 사이트 접속시 클라이언트 인증 기법이 사용되는데, 서버는 주식을 사거나 돈이 오가는 온라인 계좌 업무를 수행하기 이전에 클라이언트를 확인, 인증한다.


·암호화 통신 보장 : SSL은 클라이언트와 서버 사이의 모든 통신에서 오가는 데이터의 암호화와 복호화를 수행한다.

이로써 타인에 의한 데이터의 조작과 훔쳐보기를 방지하기 때문에 이 기능이 SSL VPN을 만들어 주는 핵심 요소라 볼 수 있다.

SSL은 통신상의 데이터를 타인이 알아볼 수 없도록 스크램블(Scramble) 시키기 위해 다양한 강도의 암호화 기법을 사용하는데, 클라이언트와 서버는 언제나 주어진 SSL 세션에서 서로 동일한 암호화 기법을 사용한다.
사용되는 암호화 기법은 SSL의 버전에 따라 서로 다르며, DES, DSA, KEA, MD5, RC2, RC4, RSA, RSA 키 교환(Key Exchange), SHA-1, SKIPJACK, 3DES와 같은 암호화 기법을 지원한다.

클라이언트와 서버는 보안 세션을 생성할 때 핸드셰이크 과정에서 가장 강한 암호화 기법을 선택하게 된다.


SSL은 암호 알고리즘, 압축 방법, 키 등의 정보를 서버와 클라이언트 간에 공유하기 위해 서로 협상하는 SSL 핸드셰이크 프로토콜 단계와 이 정보를 이용해 보안 서비스를 제공하는 SSL 레코드 프로토콜 단계로 구분된다.
SSL 핸드셰이크 프로토콜은 SSL 클라이언트와 서버가 통신을 시작할 때 서로를 인증하고 공유할 비밀 정보를 생성하기 위해 공개키 암호 기법을 사용한다.

SSL 레코드 프로토콜은 SSL 핸드셰이크에 의해 서버와 클라이언트 간에 보안 문제없이 세션이 설립됐을 경우 데이터를 전송하는 절차이다.
현재의 SSL 버전 3.0에서는 128비트 수준의 암호화를 제공하는 RSA 시큐리티의 RC4 알고리즘과 MD5를 이용한 메시지 인증 기법을 주로 사용하고 있다.

RC4 알고리즘은 3.4×1038개의 키를 생성할 수 있어 데이터를 임의로 크랙하기가 무척 어려운 기술이며, 168비트 수준의 3DES에 이어 가장 강력한 보안성을 제공하고 있다.


출처 : http://blog.naver.com/bunny121/140009767171.

'Computer > Network' 카테고리의 다른 글

[Linux] throttle 설치 및 설정  (0) 2005.05.24
[Linux] Route 명령어로 IP 차단  (0) 2005.05.24
Ip address와 subnetting  (0) 2005.05.15
아파치버추얼호스트  (2) 2005.03.20
Cisco Network Academy Chapter 4  (0) 2004.11.29