메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

암호 용어 101

한빛미디어

|

2002-12-05

|

by HANBIT

14,584

저자: 드루 라빈(Dru Lavigne), 역 전순재

앞으로도 계속해서 필자는 네트워크를 통해 안전하게 데이터를 전달하는 방법에 대해 집중적으로 기사를 쓸 것이다. IP 패킷 시리즈(TCP 패킷 갭쳐하기)를 기억하고 있다면, 대부분의 네트워크 통화는 평문으로 전송되고 패킷 탐지 유틸리티로 디코드될 수 있다는 것을 알고 있을 것이다. 사용자 이름, 패스워드, 또는 기타 민감한 데이터를 가지고 있는 전송 패킷에 대해서는 해가되는 일일 수 있다. 그렇지만 다행스럽게도, 암호시스템(cryptosystems)이라고 알려져 있는 다른 유틸리티가 네트워트 통화를 엿보는 눈으로부터 데이터를 안전하게 보호할 수 있다.

암호시스템을 적절하게 설정하려면, 암호시스템에서 사용하고 있는 다양한 용어들과 알고리즘을 잘 이해해야 한다. 이 글은 암호 용어 입문(Cryptographic Terminology 101)에 대한 특별 강좌이다. 차근차근 읽다 보면 FreeBSD에서 사용할 수 있는 암호시스템들을 설정하는 법을 보게 될 것이다.

암호시스템이란 무엇인가 그리고 왜 사용하고 싶어할까? 암호시스템은 알고리즘의 조합을 사용하여 다음과 같은 3개의 컴포넌트(기밀성(privacy), 무결성(integrity), 그리고 인증(authenticity)을 말함)를 제공하는 유틸리티이다. 서로 다른 암호시스템은 서로 다른 알고리즘을 사용하지만, 모든 암호시스템은 위 3개의 컴포넌트를 제공한다. 각 컴포넌트는 중요하다. 하나 하나 자세하게 살펴보도록하자.

기밀성(Privacy)

기밀성은 오로지 대상이 되는 수신자만이 네트워크의 통화를 이해한다는 것을 확인해준다. 혹시 패킷 탐지기가 그 데이터를 캡쳐하더라도, 메시지의 내용은 디코드할 수 없을 것이다. 암호시스템은 암호화 알고리즘, 즉 cipher를 사용해 원래의 평문으로 전송되기 전에 암호화된 텍스트암호화한다(encrypt). 대상이 되는 접수자는 키(key)를 사용해 암호화된 텍스트를 다시 원래의 평문으로 복호화한다(decrypt). 이 키는 송신자(sender)와 수신자(recipient)가 서로 공유하고, 데이터를 암호화하고 복호화하는데 사용된다. 명백히 데이터의 기밀성을 확증하려면, 대상이 되는 수신자만이 그 키를 가지고 있어야 하며 그 키를 가진 사람은 누구든지 데이터를 복호화할 수 있다는 것이 요지이다.

누군가가 크래킹(cracking)함으로써 또는 데이터를 암호화하는데 사용된 키를 추측함으로써 그 키가 없어도 데이터를 복화하는 것이 가능하다. 암호화 알고리즘의 힘은 키를 크랙하는 것이 얼마나 어려운지 잘 보여준다. 정상적으로 그 힘은 비트크기(bitsize)라는 관점에서 표현된다. 예를 들어 56-비트 크기의 알고리즘으로 생성된 키보다 256-비트 크기의 알고리즘으로 생성된 키를 크랙하는 것이 시간이 더 걸릴 것이다.

이것이 언제나 곧 더 큰 비트 크기의 알고리즘을 선택해야 한다는 것을 의미하는가? 꼭 그렇지만은 않다. 일반적으로 비트 크기가 증가하면 할수록 데이터를 암호화하고 복호화하는데 시간이 더 걸린다. 실제적인 관점에서, 이것은 더 많은 CPU 작업과 더 느린 네트워크 전송을 의미한다. 가지고 있는 하드웨어와 전송하고자 하는 데이터의 민감도에 맞게 비트 크기를 선택하자. 지난 몇 년간 CPU 파워가 증가하면서 이는 양-날의 칼이 되었다. 그 덕분에 더 강력한 암호화 알고리즘을 사용할 수 있지만, 한편으로는 그러한 알고리즘으로 생성된 키를 크랙하는데 걸리는 시간이 감소하기도 하였다. 따라서 크랙되기 전에 주기적으로 키를 바꿔주어야 한다. 많은 암호 시스템들이 여러분을 위해 자동으로 이런 과정을 처리해 준다.

암호화 알고리즘을 선택할 때 고려해야 할 사항이 몇 가지가 있다. 어떤 암호화 알고리즘은 특허권이 있으며 사용하려면 라이센스를 획득해야 하거나 제한이 있다. 어떤 암호화 알고리즘은 성공적으로 부당하게 이용되어왔고, 쉽게 크랙된다. 어떤 알고리즘은 비트 크기가 나타내는 것보다 더 빠르기도 하고 느리기도 하다. 예를 들어 DES와 3DES는 느리다고 간주된다. 반면 블로우피시(Blowfish)는 그 거대한 비트 크기에도 불구하고 아주 빠르다고 여겨진다.

법적인 고려도 나라와 나라에 따라 다르다. 어떤 나라에서는 수출 제한을 부과한다. 이는 곧 그 나라 안에서는 암호화 알고리즘의 힘을 완전히 사용해도 좋지만, 그 나라 밖에 수신자가 있다면 데이터를 암호화하는데 제한이 따른다는 것을 의미한다. 미국은 데이터가 국경 밖으로 떠날 경우 이 알고리즘의 힘을 40 비트로 제한했었다. 이 때문에 어떤 알고리즘은 아주 짧은 길이인 40 비트만 지원한다.

어떤 나라에서는 암호화를 사용하는 것조차도 불법이다. 여러분이 사는 나라에 법적인 제한이나 수출제한이 있는지 잘 모르겠다면, 암호화를 사용하기 위하여 FreeBSD 시스템을 설정하기 전에 일단 이에 대한 조사부터 해보자.


Practical UNIX & Internet Security, 2nd Edition

참고 도서

Practical UNIX & Internet Security, 2nd Edition
Simson Garfinkel & Gene Spafford




아래는 아주 자주 맞이하는 암호화 알고리즘을 비교해 놓은 표이다.

알고리즘 비트 크기 특허권 여부 참고
DES 56   느림, 쉽게 크랙됨
3DES 168   느림
Blowfish 32-448 없음 아주 빠름
IDEA 128 있음  
CAST 40-128 있음  
Arcfour 40,128 있음  
AES (Rijndael) 128, 192, 256 없음 빠름
Twofish 128, 256 없음 빠름


얼마나 많이 원래의 패킷을 암호화 할지는 암호화 모드에 달려 있다. 만약 암호시스템이 전송 모드(transport mode)를 사용한다면, 패킷에서 데이터 부분만이 암호화되고, 원래의 머리부는 눈에 보이는 텍스트로 남는다. 이는 곧 패킷 탐지기가 실제 데이터를 읽을 수는 없지만 전송자와 수신자의 IP 주소를 결정할 수 있고 어느 포트 번호(또는 애플리케이션)로 데이터가 보내지는지 알 수 있다는 뜻이다.

암호시스템이 터널 모드(tunnel mode)를 사용하면, 데이터와 머리부의 전체 패킷이 암호화된다. 여전히 패킷은 최종 목적지까지 인도될(routed) 필요가 있으므로, 새로운 Layer 3 머리부가 만들어진다. 이것은 캡슐화(encapsulation)로 알려져 있으며, 원래의 IP 머리부와는 완전히 다른 IP 주소를 새로운 머리부에 담을 수 있다. 이와 관련된 내용은 나중에 FreeBSD 시스템을 IPSEC에 맞게 설정하면서 그 이유를 살펴 보겠다.

무결성(Integrity)

무결성은 암호시스템에서 볼 수 있는 두 번째 컴포넌트이다. 이 컴포넌트는 접수된 데이터가 실제로 보내어진 데이터이고 전송 중에 변조되지 않았다는 것을 확인해 준다. 이 컴포넌트는 다른 부류의 알고리즘을 요구하는데, 이른바 암호 체크섬(cryptographic checksums)이나 암호 해시(cryptographic hashes)로 알려져 있다. 프레임이나 머리부의 모든 비트들이 보낸 순서대로 도착하였는지 확인하는데 체크섬이 사용되기 때문에 이미 보았을 수도 있다. 그렇지만, 프레임과 머리부 체크섬은 아주 간단한 알고리즘을 사용한다. 이는 곧 수학적으로 비트들을 변경하는 것이 가능하고 여전히 똑같은 체크섬을 사용할 수 있다는 것을 의미한다. 암호 체크섬은 변조에 더 강해야 한다.

암호화 알고리즘처럼, 암호 체크섬은 그 효과가 다르다. 체크섬이 길수록, 그만큼 더 데이터를 변경하고 같은 체크섬을 다시 만드는 것이 힘들어진다. 또, 어떤 체크섬은 결점이 있는 것으로 알려져 있다. 다음의 표는 암호 체크섬을 요약해 놓은 표이다.

암호 체크섬 체크섬 길이 알려진 결점
MD4 128 있음
MD5 128 이론적
SHA 160 이론적
SHA-1 160 아직 없음


위 표에서 그 순서는 의도적이다. 암호 체크섬에 관해서라면 MD4가 가장 불안하고, SHA-1이 가장 안전하다. 가능하면 암호시스템에 항상 가장 안전한 체크섬을 선택하자.

암호 체크섬에서 찾아 보아야 할 또다른 용어로 HMAC이 있다. 이는 해시 기반 메시지 인증 코드(Hash-based Message Authentication Code)라고도 한다. 이는 이 체크섬 알고리즘이 체크섬의 일부로 키를 사용한다는 것을 나타낸다. 그 키에 접근하지 않고서는 체크섬을 변경하는 것이 불가능하기 때문에, 이것은 좋은 일이다. 암호 체크섬이 HMAC을 사용하면 체크섬의 이름 앞에서 그 용어를 보게 될 것이다. 예를 들어 HMAC-MD4는 MD4보다 더 안전하다. HMAC-SHA는 SHA보다 더 안전하다. 만약 체크섬 알고리즘을 불안에서 안전순으로 배열한다면 다음과 같은 순서가 될 것이다.
  • MD4
  • MD5
  • SHA
  • SHA-1
  • HMAC-MD4
  • HMAC-MD5
  • HMAC-SHA
  • HMAC-SHA-1
인증(Authenticity)

지금까지 데이터가 암호화되었고, 그 데이터가 전송 중에 변형되지 않았다는 것을 확인해 왔다. 그렇지만 그 데이터가, 그리고 더욱 중요하게, 그 키가 실수로 엉뚱한 수신자에게 보내질 경우, 이 모든 일들은 수포로 돌아간다. 이 곳에서 세 번째 컴포넌트인 인증(authenticity) 컴포넌트가 중요한 역할을 한다.

암호화가 일어날 수 있으려면, 먼저 키가 만들어지고 교환이 되어야 한다. 같은 키가 세션 중에 데이터를 암호화하고 복호화는데 사용되기 때문에, 그것은 대칭적(symmetric) 키 또는 세션(session) 키라고 알려져 있다. 어떻게 하면 안전하게 그 키를 먼저 교환할 수 있을까? 어떻게 다른 누구도 아닌 대상이 되는 수신자와 그 키를 교환했다는 것을 확인할 수 있을까?

이것은 비대칭적(asymmetric) 키나 혹은 공개 키 알고리즘이라고 알려진 또다른 부류의 알고리즘을 요구한다. 이러한 알고리즘은 송신자와 수신자가 같은 키를 공유하지 않기 때문에 비대칭적이라고 불린다. 대신에, 송신자와 수신자 모두 별도로 수학적으로 관련된 키 두 개로 구성되는 키 쌍(key pair)을 생성한다. 공개 키(public key)라고 알려진 키 하나가 교환된다. 이는 수신자가 송신자의 공개키 사본을 그리고 그 반대도 마찬가지로 하나 가지고 있다는 것을 의미한다. 개인 키(private key)라고 알려진 다른 키 하나는 비밀로 보호되어야 한다. 안전여부는 아무도 한 사용자의 개인 키의 사본을 가지고 있지 않다는 사실에 달려 있다. 한 사용자가 그의 개인키가 노출되었다고 의심되면, 즉시 그 키쌍을 폐기하고 새로운 키 쌍을 만들어야 한다.

키 쌍이 하나 생성되면, 그것은 무의미한 단어들로 구성된 유일한 문자열과 연관되는데, 이는 지문(fingerprint)이라고 알려져 있다. 지문은 올바른 공개 키를 보고 있다는 것을 확인하는데 사용된다. (다른 누구의 개인 키에도 접근하지 못한다는 것을 기억하자.) 수신자를 확인하려면, 먼저 여러분에게 자신들의 공개 키 사본을 전송하면 된다. 그러면, 여러분은 보내준 사람의 지문을 더블 클릭하여 실제로 그들의 공개 키를 확보하였다는 것을 확인한다. 이점은 다음 기사에서 키 쌍을 만들고 직접 지문을 보면 좀 더 명확하게 이해될 것이다.

가장 많이 사용되는 키 생성 알고리즘은 RSA이다. 종종 그 RSA라는 용어를 디지털 신원확인서(digital certificates)나 또는 CA라고 알려진 신원확인 기관(certificate authorities)과 관련하여 보게 될 것이다. 디지털 신원확인서(digital certificate)는 수신자의 공개키, 수신자의 정보, 그리고 만료 시한이 담겨진 서명된 파일이다. X.509PKCS #9 표준은 그런 정보를 디지털 신원확인서에서 찾을 수 있도록 요구한다. 표준은 http://www.rsasecurity.com/rsalabs/pkcs이나 http://ftp.isi.edu/in-notes/rfc2985.txt에서 직접 읽어 볼 수 있다.

디지털 신원확인서(Digital certificates)는 보통 신원확인 기관(Certificate Authority)이라고 알져진 서버에 보관된다. 이는 곧 수동으로 수신자와 공개 키를 교환할 필요가 없다는 것을 의미한다. 대신에, 여러분의 시스템은 수신자의 공개 키의 사본이 필요하면 신원확인 기관(CA)에게 질의할 것이다. 이렇게 하면 신축성이 있는 인증 시스템이 된다. 신원확인 기관(CA)은 수 많은 수신자의 디지털 신원확인서를 저장할 수 있으며, 그러한 수신자들은 사용자들이나 컴퓨터가 될 수 있다.

DSA라고 알려진 알고리즘을 사용하여 디지털 신원확인서(digital certificates)를 생성하는 것도 가능하다. 그렇지만 이 알고리즘은 특허권이 있고 RSA보다 느리다. 다음은 RSA와 DSA사이의 차이점에 관한 FAQ이다. (전체 RSA 연구소의 FAQ는 보다 깊이 있게 암호학을 이해하고 싶다면 아주 좋은 읽을거리이다.)

마지막으로 강조할 요점으로 디지털 신원확인서와 신원확인 기관(CA)이 있다. 디지털 신원확인서(digital certificate)에는 만료시한이 담겨 있으며, 그 기간까지는 신원확인 기관(CA)에서 삭제될 수 없다. 개인 키가 그 기간안에 노출되면 어떻게 할까? 분명히 새로운 공개 키를 담고 있는 신원확인서를 새로 만들고 싶을 것이다. 그렇지만, 기간이 종료하기 전까지는 예전 신원확인서를 삭제할 수 없다. 어쩌다가 부주의하게 수신자를 인증하는데 신원확인서가 사용되지 않을 것이라는 것을 확증하려면 그것을 신원확인서 철회 리스트라고 부르는 CRL(Certificate Revocation List)에 배치하면 된다. 신원확인이 요청될 때마다 CRL이 읽혀지고 신원확인서가 여전히 유효하다는 것을 확인해준다.

수신자를 인증하는 것이 그 인증 컴포넌트가 하는 일의 절반이고, 나머지 반은 세션 키를 만드는데 사용될 정보를 만들어 내고 교환하는 것과 관련된다. 이번에는 세션 키가 데이터를 암호화하고 복호화하는데 사용될 것이다. 이 때문에 다시 비대칭 알고리즘이 필요하지만, 이번에는 보통 디페 헬만(Diffie Hellman) 알고리즘, 즉 DH 알고리즘을 요구한다.

중요한 것은 디페 헬만(Diffie Hellman) 알고리즘이 실제의 세션 키 자체를 만드는 것을 아니라, 그 키를 만들어 내는데 사용되는 키 정보를 만들어 내는 것이라는 것을 깨닫는 것이다. 이것은 기절할 정도로 상당히 환상적인 수학이 관련된다. 내가 본 것 중에 다이어그램이 곁들여진 쉬운 언어로 된 가장 훌륭한 설명은 케이쓰 팜그렌(Keith Palmgren)이 쓴 디페 헬만(Diffie-Hellman) 키 교환(비수학자의 설명)이다.

키 정보가 가능한 한 비밀로 유지되는 것이 중요하다. 그래서 비트 크기가 클수록, 그 만큼 더 좋다. 가능한 디페 헬만(Diffie Hellman) 비트 크기는 그룹(groups)으로 분리된다. 다음 표는 가능한 디페 헬만(Diffie Hellman) 그룹을 요약한다.

그룹 이름 비트 크기
1 768
2 1024
5 1536


암호시스템을 설정할 때, 지원해 주는 것 중에서 가장 큰 디페 헬만 그룹(Diffie Hellman Group) 크기를 사용하여야 한다.

키 정보와 관련되어 보게 될 기타 용어는 PFS이다. 이는 Perfect Forward Secrecy라고도 불리우며 디페 헬만 알고리즘이 지원한다. PFS는 새로운 키 정보가 수학적으로 예전의 키 정보와 관련이 없다는 것을 확인해 준다. 이는 곧 누군가 예전 세션 키를 탐지하더라도, 그 키를 사용해서 새로운 세션 키를 추측할 수 없을 것이라는 것을 의미한다. PFS는 언제나 좋은 것이다. 그래서 암호 시스템이 지원하면 반드시 사용하는 것이 좋을 것이다.

하나로 조립하기

네트워크에서 전송되는 데이터를 암호시스템이 어떻게 보호하는지 짧게 요약해보자.
  1. 먼저, 수신자의 공개 키는 여러분이 올바른 수신자에게 데이터를 보내고 있다는 것을 확인하는데 사용된다. 공개 키는 RSA 알고리즘으로 만들어 졌으며 전형적으로 신원확인 기관(CA)에 위치한 디지털 신원확인서에 저장된다.
  2. 일단 수신자가 확인되면 DH 알고리즘이 사용되어 세션 키를 만드는데 사용될 정보를 만든다.
  3. 키 정보를 사용할 수 있다면 그 세션에 유일한 키가 만들어진다. 이 키는 수신자와 송신자 모두가 서로 주고 받는 데이터를 암호화하고 복호화하는데 사용한다. 이 키를 자주 변경하는 것이 중요하다.
  4. 데이터가 암호화되기 전에, 암호 체크섬이 계산된다. 데이터가 복호화되면, 암호 체크섬이 계산되어 수신자가 원래의 메시지를 받았다는 것을 확인해 준다.
다음 기사에서는 FreeBSD 시스템에 내장되어 따라오는 암호 시스템, 즉 ssh를 설정하면서 이러한 암호 용어들의 실전 예들을 보는 기회를 가져 보겠다.
드루 라빈(Dru Lavigne)은 캐나다 온타리오주에 있는 킹스톤 사립 기술 전문대학에서 네트워킹(TCP/IP 네트워킹, 라우팅, 보안 기본 등등)을 가르치고 있다.
TAG :
댓글 입력
자료실

최근 본 상품0