'전자서명'에 해당되는 글 2건

  1. 2010.01.13 PGP(Pretty Good Privacy) 메일 암호화 프로그램
  2. 2009.10.27 DNSSEC(DNS Security Extensions)
2010.01.13 16:48

PGP(Pretty Good Privacy) 메일 암호화 프로그램

1. PGP 6.5 소개

PGP 6.5는 사용자가 작성한 이메일의 내용과 첨부되는 파일을 암호화하여 이메일 수신자만이 그 내용을 볼 수 있도록 하는 기밀성을 제공해 주며, 전자서명 기능을 제공하여 송신자라고 주장하는 사용자와 이메일을 실제로 보낸 송신자가 동일인인가를 확인해준다.

PGP를 가장 편리하게 사용할 수 있는 방법은 현재 널리 사용되고 있는 이메일 어플리케이션과 PGP를 연계하여 사용하는 plug-in을 이용하는 것이다. 이러한 방법을 사용하면 사용자들은 이메일을 작성하거나 읽을 때 단지 마우스를 클릭하는 것만으로도 암호화/서명, 복호화/서명확인 등의 작업을 수행할 수 있다.

plug-in이 지원되지 않는 이메일 어플리케이션을 사용할 때에는 클립보드에서 문서 편집을 하면서 암호화 및 복호화를 할 수 있다. 또한 첨부할 문서를 암호화할 때에는 윈도우 탐색기에서 직접 파일을 제어할 수 있다.

PGP에서 제공하는 몇 가지 특징을 보면 다음과 같다.

o 사용하고 있는 암호화 기술의 안전성이 이미 인정을 받음
o 인증 받은 메시지와 파일에 대한 전자 서명 생성과 확인 작업
o 메뉴 방식을 통하여 모든 기능들에 쉽게 접근
o 널리 사용되고 있는 이메일 어플리케이션에 plug-in으로 정합
o 키 관리를 Graphic Interface로 지원
o 공개키를 4096 비트까지 생성할 수 있으며, RSA와 DSS/Diffie-Hellman 등 두 가지 형태의 공개키 생성 가능
o 공개키 서버와 직접 연결되어 있어 공개키 분배 및 취득이 간편

PGP는 그 안전성을 널리 인정 받고 있는 "공개키 암호 기술 (Public key cryptography)" 을 사용하고 있다. 공개키 암호화 기술은 사용자 자신만이 소유하는 비밀키(Private key)와 다른 사용자들에게 공개되어 사용되는 공개키(Public key) 등 2개의 키를 사용하여 다른 사용자와의 안전한 통신을 제공한다. 사용자의 공개키와 비밀키는 모두 키링(Keyring) 화일에 보관되며 PGPkeys 윈도우에서 사용, 관리할 수 있다.

다른 사용자에게 이메일을 보내기 위해서는 이메일을 받아 볼 사용자의 공개키를 소유하고 있어야 한다. 다른 사람의 공개키를 소유하고 있으면 그 사용자에게 암호화된 메시지를 보낼수 있고, 또한 그 사용자가 생성한 전자 서명을 확인할 수 있다.  

PGP를 사용하는 데에 있어서 필요한 사항들은 다음과 같다.

o PGP 설치하기

CD-ROOM이나 파일을 다운 받아서 설치할 수 있다.

o 비밀키/공개키 쌍 생성

PGP를 사용하기 전에 비밀키/공개키 쌍을 생성해야 한다. PGP 6.5.1의 설치가 완료되면 자동적으로 공개키 쌍을 생성하는 윈도우를 볼 수 있으며, PGPkeys 윈도우를 실행시킴으로써 언제든지 비밀키/공개키 쌍을 생성할 수 있다.

o 다른 사용자들과 공개키 교환하기

비밀키/공개키 쌍의 생성이 완료되면 다른 사용자들과 공개키를 교환해야 한다. 여러분의 공개키를 배포하려면 이메일에 넣어 상대방에게 보내줄 수도 있고, 공 개키 서버에 등록할 수도 있다. 다른 사용자의 공개키를 가져올 때에도 이메일 을 사용하여 받거나 공개키 서버를 이용하여 얻을 수 있다.

o 공개키 확인하기

다른 사용자의 공개키를 얻었으면 이를 자신의 공개키 키링에 추가하는데, 그 공 개키가 전송 도중에 변경되었나를 검사해야 하고, 다른 사용자의 이름으로 만들 어진 공개키가 아닌 지를 검사해야 한다. 이 검사 작업은 공개키의 fingerprint를 이용하여 수행한다. fingerprint는 그 공개키의 지문 역할을 수행한다. 여러분이 확실한 공개키를 얻었다고 판단된 후에 그 공개키에 본인의 전자 서명을 부착시 킨다. 또한 그 공개키의 주인에 대해 중개자로서의 신용도를 지정해 줄 수 있다.  

o 암호화 및 전자서명 생성

자신의 공개키 쌍을 생성하고, 다른 사용자와 공개키 교환이 완료되면, 메시지를 암호화하거나 전자 서명을 생성하여 다른 사용자와 안전한 이메일 교환을 할 수 있다.

만약에 플러그-인을 지원하는 이메일 어플리케이션을 사용한다면 툴바(Tool bar)에서 해당하는 메뉴를 골라 원하는 작업을 수행할 수 있다.

플러그-인을 지원하지 않는 이메일 어플리케이션을 사용한다면 메시지의 내용 을 클립보드에 담아 암호화 관련 작업을 수행한다. 첨부할 화일이 있을 때에는 첨부하기 이전에 Windows 탐색기에서 암호 관련 작업을 수행한다.

o 복호화 및 전자서명 확인

누군가가 여러분에게 암호화된 이메일이나 전자 서명을 보내 왔다면 여러분은 적절한 복호화 과정을 통해 이메일의 내용이 전송 도중에 변경되었는지와 송신 자로 되어 있는 사용자가 실제로 이메일을 보낸 사용자인지를 확인할 수 있다. 또한 복호화하여 이메일의 내용을 확인할 수도 있다.

플러그-인을 지원하는 이메일 어플리케이션을 사용한다면 툴바에서 적절한 메뉴 를 선택하여 복호화 관련 작업을 수행한다.

플러그-인을 지원하지 않는 이메일 어플리케이션을 사용하면 암호문이나 전자서 명을 클립보드에 옮겨 담아 복호화 및 전자서명 확인 작업을 수행한다. 첨부된 암호 화일은 Windows 탐색기에서 수행한다.  

2. PGP 설치와 기능

2.1 시스템 요구사항

o Windows 95, Widows 98, Windows NT 시스템에 PGP를 설치하려면 다음과 같은 컴퓨터 사양이 필요하다.
o Windows 95, Widows 98, Windows NT (Service Pack 3 or later)
o 32 MV RAM
o 16 MB Hard Disk Space
o 시스템에 PGP를 설치하려면 또한 다음과 같은 요구사항이 필요하다.
o Microsoft TCP/IP
o 호환가능한 LAN/WAN 네트워크 어댑터
o Windows 95에 설치하려면 Windows 95b(OSR2)

2.2 다른 버전과의 호환성

PGP의 freeware는 1991년부터 Phil Zimmermann에 의해서 많은 양이 배포되었다. PGP 6.5 버전은 기존의 프로그램 코드에 많은 수정을 가했고, 새로운 사용자 인터페이스를 갖추지만 PGP 이전 버전들과의 호환을 완벽하게 지원해 주고 있다. 그러므로 PGP 6.5 사용자도 이전 버전 사용자들과 안전한 이메일을 교환하는 데에 아무런 문제점이 없다.

PGP 6.5.1은 아래의 버전들과 호환이 가능하다.

o PGP 2.6 (Distributed by MIT)
o• PGP for Personal Privacy, Version 5.0 - 5.5
o• PGP for Business Security or PGP for Email and Files Version 5.5
o• PGP Desktop Security or PGP for Personal Privacy Version 6.0

2.3 이전 버전에서의 업그레이드

이전 버전을 사용하다가 PGP 6.5를 사용하려고 할 때에는 기존에 있던 화일들을 삭제해야 한다. 이때에 사용하는 키를 보관하고 있는 키링 파일은 보존해야 하므로 주의를 요한다. 그러나 PGP 6.5를 설치할 때에 기존의 키링 화일을 보존할 것인지를 확인하는 윈도우가 보여지므로 크게 어려운 작업은 아니다.  

2.4 PGP 설치하기

PGP를 설치하려면 CD-ROM이나 파일을 다운로드 받아서 설치할 수 있다. 윈도우 시스 템에서 PGP 프리웨어를 설치하기 위해서는 아래 단계에 따라 설치하면 된다.

2.4.1 CD-ROM 설치

CD-ROM을 드라이브에 넣으면 Setup 프로그램이 자동으로 실행된다. 만약 Setup 프로그램이 초기화되어 있지 않다면 CD-ROM 폴더안의 Setup.exe를 두 번 클릭하면 된다.

2.4.2 Web에서 파일 다운로드

① www.pgpi.com에서 Windows 95/98/NT용 PGP를 다운받으면 바로 자동으로 실행되면서 Welcome 화면이 나온다.

② Welcome dialog box의 내용을 읽어본 후 Next를 클릭한다.

③ Important Product Information의 PGP 6.5.1 버전의 새로운 특성을 나타내는 Watsnew.txt file을 읽어본 후 Next를 클릭한다.

④ User information 화면이 나오면 여러분의 이름과 회사명을 기입한 후, Next를 클릭한다.

⑤ Choose Destination Location 화면이 나오면 PGP 파일을 위한 디렉토리를 선택한 후, Next를 클릭한다.

⑥ Select Components 화면이 나오면 설치하기를 원하는 component들을 체크한 후, Next 를 클릭한다.

·PGP Key Management [Recuired] : PGP 프로그램을 설치하는 것으로 꼭 선택해야 된다.
·PGPnet Virtual Private Networking : Virtual Private Network(VPN)인 PGPnet은 PGPnet를 사용하는 전세계의 사용자들과 안전하고 경제적인 통신을 위한 편리한 암호화 어플리케이션이다.
·PGP Eudora Plug-in : Qualcomm Eudora email 프로그램으로 통합된 PGP 사용을 원한다면 이 옵션을 선택해라. PGP 6.5.1 버전은 Eudora 3.05 이상의 버전 을 지원한다.
·PGP Microsoft Exchange/Outlook Plug-in : Microsoft Exchange/Outlook email 프 로그램으로 통합된 PGP 사용을 원한다면 이 옵션을 선택해라. PGP 6.5.1 버전은 Ooutlook 97과 98을 지원한다.
·PGP Microsoft Outlook Express Plug-in : Microsoft Outlook Express email 프로 그램으로 통합된 PGP 사용을 원한다면 이 옵션을 선택해라. PGP 6.5.1 버전은 Internet Explorer 4.x 버전을 지원한다.
·PGP User's Manual (Adobe Acrobat format) : PGP User's Guide를 설치하기를 원하면 이 옵션을 선택한다.
·PGP CommandLine : Windows NT 시스템에서 PGP command line 버전을 설치하길 원한다면 이 옵션을 선택한다. 이것은 클라이언트로 사용되며, Batch server processes는 부가적인 라이센싱을 요구한다.
  

⑦ Ready to start copying File를 읽어본 후, Next를 클릭하면 PGP 파일들이 컴퓨터에 복사된다.

⑧ PGPnet 설치를 선택했다면 네트워크 어댑터를 찾기위한 PGPnet Set Adapter 화면이 나타난다. 모뎀을 사용한다면 RemoteAccess WAN Wrapper를 선택하고, 이더넷을 사용한 다면 3Com Megahertz LAN PC Card [Ethernet]를 선택한 후, OK를 클릭한다.

⑨ 존재하는 keyrings를 사용할 것인가를 묻는 Existing Keyrings? 화면이 나오면, 사용 하기를 원하면 "예"를 선택하고 그렇지 않으면 "아니오"를 선택한다. "예"를 선택하면 공개키의 Pubring.pkr과 비밀키의 Secring.skr의 위치를 보여준다. "아니오"를 선택하 면 'keyring을 만들것인가'를 묻는 Question 화면이 나온다.

⑩ Setup Complete 화면이 나오면 자동적으로 재부팅 하기를 원하는가를 선택하는 "Yes, I want to restart my computer now."를 선택한 후, Finish를 선택한다. 

3. 공개키 생성과 교환

3.1 공개키 암호화의 개념

공개키 암호화 방식은 일반적인 암호화 알고리즘과는 다르게 암호화하는 키와 복호화하는 키가 서로 다르다. 사용자들은 각각의 한쌍의 키를 갖는데, 하나는 키를 모든 사람들에게 공개하여 자신에게 보내는 메시지를 암호화할 수 있도록 하거나 자신이 서명한 메시지를 다른 사람이 확인할 수 있도록 하는데 사용되는 공개키(Public Key)가 있으며, 다른 하나는 공개되지 않고 사용자 자신만이 보관하면서 자신에게 온 메시지를 복호화하고 서명을 하는데 사용되는 사용되는 비밀키(Private Key)가 있다.

기본적으로 비밀키와 공개키는 같이 생성되며, 비밀키로 공개키를 유추하기 힘들고, 공개키로 비밀키를 유추하기 힘들다. 이 방식은 인수분해의 어려움에 기반을 두어 한 개의 키로 다른 키를 거의 찾을 수 없게 만들어져 있다. PGP에서의 암호화는 본인이 하지 않고 공개키를 가지고 있는 상대방이 하게되며, 이를 복호화할 수 있는 사람은 비밀키를 가지고 있는 사용자 자신뿐이다. 예를 들어 B라는 사람이 A라는 사람에게 메일을 보내기 위해서는 우선 공개되어 있는 A의 공개키를 이용하여 암호화하여 메일을 보낸다. 그러면 B는 자신의 비밀키를 이용하여 암호화된 메시지를 복호화한다.

<공개키 암호화 방식의 기본구조>

이와 같은 PGP의 공개키 암호화 방식 때문에 자신의 비밀키는 변조 및 삭제 방지를 위하여 안전한 장소에 백업해 두는게 좋다. 비밀키는 secring.pgp 파일에 존재하며 이 파일은 적어도 2장 이상의 플로피 디스크에 백업해 두는게 좋다. 또한 자신의 비밀키를 사용하기 위해서 처음 키를 생성할 때 입력한 pass phrase도 절대로 잊지 말아야 한다. 

3.2 비밀키/공개키 생성

3.2.1 새로운 비밀키/공개키 쌍 생성

① PGP 디렉토리에서 PGPkeys를 연다.

② Key Generation Wizard 화면을 읽어본 후, Next를 클릭한다.

③ 사용자 이름과 이메일 주소를 입력한후 Next를 클릭한다.

④ Key Pair Type(Diffie-Hellman/DSS나 RSA)를 선택한후 Next를 클릭한다.

·PGP 2.6.3i 이전 버전 사용자들과 통신을 한다면 RSA를 선택한다.
·PGP5.0 이상 버전 사용자들과 통신을 한다면 새로운 기술의 Diffie-Hellman /DSS를 선택한다.
 

⑤ Key Pair Size를 선택한후 Next를 클릭한다.

사이즈는 1024 비트부터 3072비트까지 4개의 크기가 지정되어 있으며, 이것들 중에서 하나를 선택할 수도 있다. 또한 Custom에서는 1024 비트에서 4096 비트까지 원하는 크 기를 입력할 수도 있다. 키의 크기를 선택할 때 주의해야 할 것은 크기가 클수록 공격을 당할 확률은 줄어든다는 것이다. 그러나, 키의 크기가 크면 클수록 암호화/복호화 시에 수행시간이 많이 필요하다. 만약 사용자가 다루는 데이터의 내용이 엄청나게 중요한 것 이라면 최대 크기를 선택하는 것이 바람직하다. Diffie-Hellman/DSS 키를 생성했다면 최 대 1024 비트로 제한되어 있다.

⑥ Key Expiration 화면이 나오면 Key 만료시점을 설정한 후 Next를 클릭한다.

공개키가 유효하게 사용될 날수를 입력한다. 기본값은 "Never"이다. 이 경우에 공개키는 사용자가 따로 명령을 주지 않는 이상 영원히 사용될 수 있다. 사용할 기간이 정해져 있 을 경우에는 날수를 직접 입력한다. 공개키를 한번 만들어서 사용자의 평생 동안 사용할 수도 있다. 하지만, 특별한 경우에는 공개키를 사용할 기간이 정해질 수 있다. 공개키를 한번 생성하면 그 키는 전 세계로 전파될 수 있다. 그러므로, 일정 기간동안 사용할 공개 키는 그 사용기간을 명시하여 나중에 다른 사용자들이 그 공개키를 이용하여 암호문을 만들지 않도록 해 주어야 한다.

⑦ 사용자의 비밀키를 오직 자신만이 사용할 수 있는 기능을 제공해 주는 Passphrase 입 력 화면이 나타나면 암호를 입력한다. 사용자가 입력하는 Passphrase는 원칙적으로 화면 에 보여지지 않는다. 그러나, 입력되는 Passphrase를 눈으로 확인하고 싶을 때는 윈도우 에 있는 "Hide Typing" 항목을 Disable 시키면 된다. 그러나 이 때에는 등 뒤에 아무도 없는 것을 확인해야 한다.

Passphrase는 알파벳, 숫자, 스페이스 등 모든 문자(Character)들을 사용할 수 있다. Passphrase는 길면 길수록 다른 사용자들이 추측하기가 어려우므로 자신은 기억하기 쉽 고, 다른 사용자들은 추측하기 어려운 문장을 선택하는 것이 바람직하다. 

⑧ Passphrase를 입력한 후 Next를 클릭하면 key를 만들기 시작한다.

 

⑨ key가 다 만들어졌으면 Next를 선택한다. key pair가 성공적으로 수행되었음을 알려주면 서 공개키를 key server에 보낼것인가를 묻는다. off-line 상태라면 선택하지 말고 on-line 상태라면 Next를 클릭한다.

⑩ PGP key pair가 만들어졌음을 알려주는 화면이 뜨면 Finish를 클릭한다.

 

⑪ PGP Key Pair를 만드는 과정을 모두 마치면 다음과 같이 Key가 등록되었음을 볼 수 있다.

새로운 Key가 만들어졌으면 key pair를 안전한 장소에 보관해 두는게 좋다. PGPKey 어 플리케이션은 key 사본을 저장할 것인가를 묻는다. 그러면 여러분은 플로피디스켓이나 안전한 장소에 pubring.pkr과 secring.skr를 저장하길 바란다. 

3.2.2 자신의 공개키 분배

새로운 비밀키/공개키 쌍을 생성하였으면 공개키를 다른 사용자들이 사용할 수 있도록 분배해 주어야 한다. 다른 사용자들이 여러분의 공개키를 가지고 있어야 여러분에게 암호문을 전송할 수 있고, 여러분이 생성한 전자서명을 확인할 수 있다. 공개키를 분배하는 방법은 크게 다음의 3가지로 나눌 수 있다.

o 공개키 서버에 등록하는 방법
o 이메일의 내용에 공개키를 포함시키는 방법
o 별도의 텍스트 화일에 복사하는 방법

3.2.2.1 공개키 서버로 공개키 분배

공개키를 분배하는 방법들 중에서 가장 좋은 방법은 공개키 서버에 등록시켜 놓는 방법이다. 세계적으로 다수의 공개키 서버가 존재한다. 이중에는 PGP 사에서 제공하는 공개키 서버도 포함된다. 사용자가 공개키를 어느 공개키 서버에 등록해야 하는 지에 대해서는 고려할 필요가 없다. 공개키 서버들끼리는 서로 일관성을 유지하기 때문에 사용자는 한 서버에만 등록하면 된다.

3.2.1 새로운 비밀키/공개키 쌍 생성 과정에서 공개키를 공개키 서버에 등록하지 않은 사람 은 다음과 같이 한다.

① PGPkeys를 연다.
② 공개키 서버로 전송하고자 하는 자신의 공개키를 선택한 후, Server 메뉴의 Send to 를 선택하여 전송하고자 하는 공개키 서버를 선택한다.
③ 전송하고자 하는 공개키 서버가 없다면 PGPkeys를 연후 Edit -> Options -> Servers를 선택한 후 새로운 공개키 서버를 등록한다.
 

3.2.2.2 암호화된 email message에 공개키 포함

① PGPkeys를 연다.
② 전송하고자 하는 공개키를 선택한 후 Edit 메뉴에서 copy를 클릭한다.
③ 보내고자 하는 이메일의 원하는 곳에 Edit 메뉴에서 Paste 클릭한다.

그러면 다음과 같이 암호화된 공개키가 생성된다.

 

이러한 방법을 사용할 때에는 여러분의 공개키가 포함되어 있는 이메일에 사용자 자 신의 비밀키를 이용하여 전자서명을 생성하여 함께 보낸다. 이렇게 하면 상대방은 이 메일에 포함되어 있는 여러분의 공개키를 사용하여 전자서명을 확인할 수 있게 된다. 결국, 공개키가 전송 도중에 불법적으로 변경되지 않았다는 사실을 보장받을 수 있다. 

3.2.2.3 공개키를 파일로 추출하기

① PGPkeys에서 key pair를 클릭한 후 Keys 메뉴에서 Export를 클릭하면 key이름.asc 파일이 만들어진다.

② key이름.asc 파일을 보내고자하는 메시지에 첨부해서 보낸다.

③ 다른 방법으로는 PGPkeys에서 보내고자하는 사람을 공개키를 선택한후 이메일 어 플리케이션에 드래그하면 key이름.asc 파일이 첨부되어 진다. 

3.2.3 다른 사용자의 공개키 가져하기

다른 PGP 사용자들이 여러분의 서명을 확인하고 암호화된 정보를 보낼 수 있게 하기 위해 공개키를 분배해할 필요가 있었드시, 여러분도 다른 사람의 서명을 확인하고 그들에게 암호화된 메일을 보내기 위해서는 그들의 공개키를 가져올 필요가 있다.

다른 사용자의 공개키를 가져오는 방법에는 3가지 방법이 있다.

o 공개키 서버로부터 가져오는 방법
o 이메일 메시지에 포함되어 있는 공개키를 가져오는 방법
o 공개키가 저장되어 있는 파일에서 가져오는 방법

3.2.3.1 공개키 서버로부터 공개키 가져오기

사용자가 송신하는 이메일을 수신할 사용자가 PGP를 이미 사용하고 있는 사용자라면 아마도 그의 공개키가 공개키 서버에 등록되어 있을 것이다. 이렇게 수신자의 공개키가 공개키 서버에 등록되어 있는 경우에는 서버에서 그의 공개키를 전송 받아 사용하면 된다. 이러한 방법은 하나의 장점을 가지는데, 사용자의 컴퓨터에 수많은 사용자들의 공개키를 저장하고 있지 않아도 된다는 것이다. 누군가의 공개키가 필요할 때마다 서버에서 다운로드 받아 사용할 수 있다. 세계 도처에 수많은 공개키 서버들이 존재한다. 이 서버들은 정기적으로 내용을 서로 비교하여 갱신하기 때문에 사용자는 하나의 공개키 서버만을 이용해도 아무런 문제가 없다.

① PGPkeys를 연다

② PGPkeys의 Server 메뉴에서 Search를 클릭하면 다음과 같은 화면이 나온다.

Search for keys On 에서 검색하고자 하는 서버를 선택한다.

④ 검색 기준을 명시한다. 아래와 같은 값들을 이용하여 key를 검색할 수 있다. 

More Choices를 선택하면 아래와 같은 모든 정보를 기입할 수 있다.

·User ID
·Key ID
·Key Status (Revoked or Disabled)
·Key Type (Diffie-Hellman or RSA)
·Creation date
·Expiration data
·Revoked keys
·Disabled keys
·Key size
·Keys signed by a particular key

⑤ Search를 클릭하면 검색하기 시작한다.

⑥ 가져오고자 하는 사용자의 공개키를 찾았으면 공개키를 저장하기위해, PGPkeys의 메인 화면으로 드래그한다.

⑦ 끝내기 위해 Clear Search를 클릭한다.

3.2.3.2 암호화된 email messages에 포함되어 있는 공개키 가져오기

PGP plug-ins에서 제공하는 이메일 어플리케이션을 사용하면 이메일에서 보낸사람의 공개키를 풀기위해 봉투에 열린열쇠가 같이 있는 아이콘을 클릭하고 그것을 public keyring에 추가한다.

만약 PGP plug-ins에서 제공하는 이메일 어플리케이션을 사용하지 않는다면 공개키로 표현된 텍스트문을 복사하여 PGPkeys에 붙여넣기한다. Select key(s) 화면이 나오면 import를 클릭한다. 

3.2.3.3 공개키가 저장되어 있는 파일에서 공개키 가져오기

key이름.asc로 첨부된 파일을 PGPkeys 메인 화면으로 드래그하거나, 공개키가 저장된 파일을 열어 복사한후 PGPkeys 메인 화면에 붙여넣기 한다.

3.2.3.4 공개키의 안전성 여부확인

누군가의 공개키를 받았을 때, 때로는 이 공개키가 실제로 그 사람의 공개키라고 믿기가 어려운 경우가 있다. PGP는 공개키의 안전성을 확인할 수 있는 방법을 제공해 주고 있다. 또한, 인증을 확실히 받지 못한 공개키를 사용하려고 할 때에는 경고 메시지를 보여주기도 한다.

공개키 암호 시스템이 가지고 있는 가장 위험한 약점은 소위 "Man-in-the-middle-attack"이라고 하는 공격이 가능하다는 것이다. 이 방법은 통신 당자자들 사이에서 공개키의 주인을 위조하여 수행하는 공격이다. 이런 공격을 방지하는 방법으로는 통신 당사자들이 상대방의 공개키에 대한 인증을 완벽하게 수행하는 방법밖에 없다.

공개키 인증을 수행하는 가장 완벽한 방법은 공개키를 디스켓에 담아 상대방에게 직접 건네주는 것이다. 하지만, 온라인 시대에 이러한 방법은 적절한 방법이 될 수 없다. 위에서 본 바와 같이 공개키 서버나 이메일 등을 이용하면서도 상대방의 공개키를 확실하게 인증할 수 있는 방법이 필요하다.

한가지 방법으로 fingerprint를 이용하는 방법이 있다. Fingerprint란 공개키를 해쉬함수의 입력으로 주어 일정한 길이의 비트로 표현한 것이다. 사용자가 어디에선가 A의 공개키를 입수했다고 하면 사용자는 그 공개키의 fingerprint를 계산한다. 그런 후에 A에게 fingerprint를 문의한다. A가 보내 준 fingerprint와 자신이 계산한 fingerprint가 동일하다면 사용자는 입수한 공개키가 A의 공개키라는 것을 확신할 수 있다.

사용자는 A의 공개키라는 것을 확인한 후에 그 공개키에 자신의 전자서명을 첨가할 수 있다. 다른 사용자의 공개키에 자신의 비밀키를 이용하여 서명을 붙인다는 것은 전 세계의 사용자들에게 "이 공개키는 A의 공개키가 확실합니다. 내가 보장합니다." 라고 선언하는 것과 같은 개념이다. 자신의 비밀키/공개키 쌍을 생성한 후에 자신의 비밀키를 이용하여 자신의 공개키에 스스로 전자서명을 붙이는 것이 좋다. 이렇게 하는 이유는 공격자가 여러분의 공개키의 내용을 수정할 수 없도록 하기 위해서이다.

PGP 사용자들이 흔히 쓰는 방법 중의 하나가 공개키를 믿을 만한 친구에게 주어서 그 친구에게 서명을 부탁하고 다시 돌려 받는 방법이다. 친구의 서명이 첨가된 공개키를 공개키 서버에 등록한다. 자신의 공개키에 서명을 해주는 사용자가 많으면 많을수록 공개키의 신뢰도가 올라 간다. 

4. 암호화와 전자서명

PGP plug-in을 지원하는 이메일 프로그램을 사용할 때와 지원하지 않는 이메일 프로그램을 사용할 때의 암호화/복호화 방법은 약간 다르다.

4.1 PGP email plug-ins를 지원하지 않는 이메일 어플리케이션 사용하기

4.1.1 클립보드를 이용한 암호화 및 전자서명

① 사용자가 많이 사용하는 에디터에 암호화 및 전자서명하기를 원하는 텍스트문을 작 성한후 클립보드의 Edit에 복사한 후, Copy to Clipboard 클릭한다.

② 클립보드의 Encrypt, Sign를 선택하거나 Encrypt & Sign를 선택하면 다음과 같이 PGPtray 화면이 나온다.

데이터를 암호화하는 방법에 따라 암호화 옵션을 선택할 수 있다.

·Secure Viewer : 이 옵션을 선택하면 복호화에 따른 TEMPEST 공격으로부 터 데이터를 보호할 수 있다.
·Conventional Encrypt : 공개키 암호화 대신에 passphrase를 사용할 수 있다.

③ 보내고자하는 사람의 공개키를 선택한 후 Recipients쪽으로 드래그하거나 두 번 클 릭한다.

④ 메일을 암호화하고 서명하기 위해 OK를 클릭해라

암호화된 데이터에 서명하기를 선택했다면 메일을 보내기전에 여러분의 passphrase 를 입력하기를 요구하는 PGPtray-Enter Passphrase 화면이 나타난다.

⑤ passphrase를 입력하고 OK를 클릭해라
⑥ 클립보드의 Edit를 클릭하여 암호화된 텍스트문 복사하여 이메일 메시지에 붙여넣기 하고 메시지를 전송한다.

4.1.2 윈도우 탐색기를 이용한 파일 암호화 및 전자서명

파일을 암호화하거나 메일에 암호화된 파일을 첨부하여 보내기 위해서는 PGP right-click 메뉴를 이용한다.

① Windows 탐색기에서 암호화하기를 원하는 파일를 찾아 마우스 오른쪽을 클릭한후 PGP를 클릭한다.
② 파일을 암호화하기 위해 Encrypt, Sign를 선택하거나 Encrypt & Sign를 선택하면, PGPtray 화면이 나온다.
③ 보내고자하는 사람의 공개키를 선택한 후 Recipients쪽으로 드래그 하거나, 두 번 클 릭한다.
④ 파일을 암호화하고 서명하기 위해 OK를 클릭해라. 암호화된 데이터에 서명하기를 선택했다면 메일을 보내기전에 여러분의 passphrase 를 입력하기를 요구하는 PGPtray-Enter Passphrase 화면이 나타난다.
⑤ passphrase를 입력하고 OK를 클릭해라.
⑥ 여기까지 하면 파일이 암호화되어 파일이름 앞에 잠기열쇠 아이콘이 붙으면서 .pgp 파일이 생성된다.
⑦ 이제 평소처럼 암호화된 파일을 첨부해서 보내면 된다.
 

4.2 PGP email plug-ins에서 제공하는 이메일 어플리케이션 사용하기

PGP email plug-ins에서 제공하는 이메일 어플리케이션을 이용하여 암호화하고 서명하 는 방법은 암호화 및 서명을 위한 가장 빠른 방법이다. 아래의 표는 PGP Plug-in의 특징을 설명한 것이다.

Eudora 3.0.x

Eudora 4.0.x

Exchange/ Outlook

Lotus Notes

Outlook Express

PGP/MIME

Yes

Yes

No

No

No

Auto-decrypt

Yes

No

Yes

Yes

Yes

Encrypt HTML

N/A

Yes

converts to plain text
before encrypting

Yes

No

View decrypted HTML
as an HTML document

No

Yes

No

Yes

No

Encrypt

attachments

Yes

Yes

Yes

Yes

No

Encrypt/Sign

defaults

Yes

Yes

Yes

Yes

Yes

4.2.1 암호화 및 전자서명

① 사용하는 이메일 어플리케이션을 이용하여 이메일 텍스트 문서를 만들었으면 메시지 를 암호화하기 위해 편지봉투에 잠긴열쇠가 있는 아이콘을 클릭해서 암호화를 한 후, 다시 편지지에 연필이 있는 아이콘을 클릭해서 메시지에 서명을 한다.
② 나머지는 4.1.1 클립보드를 이용한 암호화 및 전자서명 과정의 ③에서 ⑤까지의 과정 을 그대로 하면 된다.
 

5. 암호화된 메시지 복호화 및 전자서명 확인

5.1 PGP email plug-ins을 지원하지 않는 이메일 어플리케이션 사용하기

5.1.1 클립보드를 이용하여 암호문 복호화하고 전자서명 확인하기

① 평소처럼 이메일 메시지를 오픈한다.
② 암호화된 메시지를 복사하여 클립보드의 Edit에 복사한 후, Copy to Clipboard를 클 릭한다.
③ 클립보드의 Decrypt, Verify를 선택하거나, Decrypt & Verify를 선택한다. 그러면 여 러분의 passphrase를 입력하라는 PGPtray-Enter Passphrase 대화상자가 나타난다.

④ passphrase를 입력한 후, OK를 클릭한다.
⑤ 클립보드의 Edit를 클릭하면 복호화된 메시지를 볼 수있다. 이 메시지는 복호화한 상태로 저장하거나, 안전을 위해 원문인 암호화된 메시지로 저장할 수 있다.
 

5.1.2 윈도우 탐색기를 이용한 파일 복호화 및 전자서명 확인

① 암호화된 파일을 받으면 파일에 마우스를 놓고 오른쪽을 클릭한후 열기를 클릭한다.
② 현재창에서 열기를 선택했다면 여러분의 passphrase를 입력하기를 요구하는 PGPtray-Enter Passphrase 화면이 나타난다.
③ passphrase를 입력하고 OK를 클릭하면 PGPlog 창이 열린다
④ 열린 창을 닫고 다시 ①에서 ③번까지 반복하면 이제는 복호화된 파일을 저장하기 위한 Enter output filename 화면이 나타난다.
⑤ 파일이름을 지정하고 저장한다.
⑥ 이제 평소처럼 복호화된 파일을 열어서 확인한다.
⑦ 디스크에 저장을 선택했다면 암호화된 파일을 원하는 곳에 저장한다.
⑧ 저장한 파일에 마우스를 놓고 오른쪽을 클릭한후 PGP를 선택한다
⑨ 복호화하기 위해 Decrypt & Verify를 선택한다.
⑩ passphrase를 입력하라는 PGPtray-Enter Passphrase 대화상자가 나타난다.
⑪ passphrase를 입력한 후, OK를 클릭한다.
⑫ PGPlog 화면이 나타나면 확인한 후 닫는다.
⑬ 디렉토리에 복호화된 파일이 생성된다.
⑭ 파일을 열고 내용을 확인한다.

5.2 PGP Plug-ins에서 제공하는 이메일 어플리케이션 사용하기

① 평소처럼 이메일 메시지를 오픈한다.
② 메시지를 복호화하고 확인하기 위해서 봉투에 열린열쇠가 있는 아이콘을 클릭한다.
③ 여러분의 passphrase를 입력하라는 PGPtray-Enter Passphrase 화면이 나타난다.
④ passphrase를 입력한 후, OK를 클릭한다.
⑤ 복호화한 상태로 메시지를 저장하거나, 안전을 위해 원문인 암호화된 메시지로 저장 할 수 있다.


출처 : http://hackersnews.org


Trackback 0 Comment 0
2009.10.27 14:39

DNSSEC(DNS Security Extensions)

DNSSEC이란?

DNSSEC은 도메인 네임 시스템(DNS)이 갖고 있는 보안 취약점을 극복하기 위한 DNS 확장 표준 프로토콜이다.
"DNS Security Extentions(DNS 보안성 확장)"을 축약하여 DNSSEC이라 부른다.

DNS 프로토콜은 데이터 위-변조 침해공격의 위협에 취약하다는 문제점을 가지고 있었다.

DNS 데이터의 위-변조 침해공격은 진짜 사이트와 동일한 모습으로 위장하고 있는 가짜 사이트로 사용자들이 접속하게끔 유도할 수 있다.

자신이 접속하고 있는 사이트가 가짜 사이트인 줄 모르는 사용자는 자신의 로그인 계정과 암호, 그리고 신용카드 비밀번호와 같은 개인정보를 가짜 사이트의 웹 페이지에서 입력하게 되어, 개인 정보가 악의를 가진 공격자에게 노출되는 사고가 발생할 수 있다.


DNS 데이터 위-변조 공격, DNS 캐시 포이즈닝

DNS 데이터를 위-변조하는 공격 형태를 "DNS 캐시 포이즈닝(DNS Cache Poisoning)"이라 하며, 혹은 "파밍(Pharming)"이라고도 한다.

예로써, 온라인 뱅킹 서비스를 이용하기 위해 은행 웹 사이트 www.a-bank.co.kr에 접속하는 경우를 상정해 보자.
그림에서와 같이, www.a-bank.co.kr의 진짜 주소는 202.31.188.5이지만, 악의의 공격자는 이 www.a-bank.co.kr의 주소가 192.0.2.100인 것처럼 위변조할 수 있다.


사용자는 PC에서 웹 브라우저의 주소창에 "http://www.a-bank.co.kr"을 입력하고 접속을 시도한다.
웹 브라우저는 접속 사이트의 IP 주소를 알아야 해당 서버에 접근할 수 있으므로, 도메인 네임 www.a-bank.co.kr의 IP 주소를 파악하는 절차를 먼저 수행한다.

그림에서와 같이, PC 호스트 시스템은 리커시브 네임서버에 대해 www.a-bank.co.kr에 대한 IP 주소를 질의한다.
PC 호스트는 DNS 응답 패킷에서 www.a-bank.co.kr 사이트의 웹 접속에 필요한 IP 주소를 얻게 된다.

리커시브 네임서버는 PC 호스트로부터의 질의에 응답할 때, DNS 데이터를 임시로 저장하는 캐시에서 해당 데이터로서 응답한다.

문제는 이 캐시에 저장된 DNS 데이터가 위-변조된 데이터일 경우에 발생한다.
www.a-bank.co.kr 은행사이트의 진짜 IP 주소는 202.31.188.5인데, 누군가가 위-변조된 DNS 응답 메시지로 리커시브 네임서버를 속여 www.a-bank.co.kr의 IP 주소가 192.0.2.100인 것으로 믿게 하여 이를 캐시에 저장하는 경우가 이에 해당한다.

이렇게 되면 이 리커시브 네임서버를 사용하고 있는 모든 PC 호스트는 www.a-bank.co.kr 사이트에 접속을 하려 할 때, 202.31.188.5 주소의 서버가 아니라 192.0.2.100의 서버에 접속하게 된다.

이 과정은 PC 호스트와 네임서버 간에 일어나는 절차에 의한 것이므로, 사용자는 자신이 가짜 웹 사이트에 접속하고 있다는 것을 알 수가 없다.

특히 이런 경우 192.0.2.100의 가짜 웹 사이트는 www.a-bank.co.kr 사이트와 동일한 모습으로 위장된 웹 사이트이게 된다.
공격자가 사용자의 개인정보를 입력받기 위해서 미리 준비한 위장된 웹 사이트이다.

사용자는 이 접속된 사이트가 www.a-bank.co.kr의 은행 사이트인 것으로 착각하고 아무런 의심 없이 자신의 로그인 정보와 계좌 비밀번호를 입력하게 된다.

악의의 공격자는 사용자가 입력하는 개인정보를 저장하여 금융범죄에 사용하거나 수집된 정보를 다른 악의를 가진 이에게 판매할 수 있다.

이러한 형태의 공격을 "DNS 캐시 포이즈닝(DNS cache Poisoning)"이라 부른다.
리커시브 네임서버가 관리하는 캐시(cache)에 위-변조된 데이터를 저장하도록 유도하기 위한 공격 형태이다.

이와 유사하게 "파밍(Pharming)"이라 하는 공격형태가 있다.

파밍(Pharming)은 사이트 접속 트래픽을 진짜 사이트처럼 위장된 사이트로 전환시키는 것을 목적으로 하는 모든 다양한 형태의 공격을 가리킨다.
파밍(Pharming)은 리커시브 네임서버의 DNS 캐시 포이즈닝 뿐만 아니라, 도메인 등록기관의 네임서버 위임등록 정보를 변경하여 도메인을 가로채는 공격형태, 호스트에 존재하는 hosts 파일의 설정 데이터를 변조하는 공격 형태까지를 모두 포괄한다.

파밍(Pharming)의 위험성은 주로 피싱(Phishing)과 비교된다.

피싱(Phishing)은 사용자로 하여금 접속하는 도메인 네임과 철자기 유사한 도메인 네임을 사용하여 부주의하게 위장된 사이트로 접속하게 한다.
피싱(Phishing)은 사용자가 도메인 네임과 URL 등을 충분히 주의깊게 살피면 그 피해를 예방할 수 있다.

그러나 파밍(Pharming)은 사용자가 올바른 도메인 네임을 확인하는 등의 충분한 주의를 기울이더라도 이 도메인 네임의 IP 주소가 이미 위-변조된 주소로 매핑되어 있어서, 위장된 서버에 접속하는 것을 피할 수가 없다.
이 점에서 위협적인 공격 형태로 인식되고 있다. 사용자가 아무리 주의하더라도 자신이 가짜 IP 주소를 갖는 사이트에 접속하고 있다는 사실을 사용자는 쉽게 알아챌 수 없다.

파밍(Pharming)은 DNS 캐시 포이즈닝 공격으로 유발될 수 있다.

특히 DNS 캐시 포이즈닝의 경우, 공격 대상인 리커시브 네임서버를 사용하고 있는 수많은 호스트들이 모두 동시에 이 공격의 피해자가 될 수 있다는 점에서 심각한 위협요인을 가지고 있다.


DNS 보안 확장(DNSSEC) 표준의 개발

도메인 네임 시스템(DNS) 표준은 이와 같은 침해공격의 가능성을 고려하지 않던 시대에 정해진 표준 프로토콜이다.
인터넷이 상업적으로 이용되기 시작하면서, 이러한 침해공격으로부터 DNS 데이터를 보호해야 할 필요성이 점차 중요하게 인식되고 있다.

DNSSEC은 도메인 네임 시스템(DNS)이 제공하는 다양한 DNS 데이터가 데이터 위-변조 침해공격에 의해 위-변조되어 호스트 PC의 어플리케이션으로 전달되는 사태를 방지하기 위해 DNS 표준 프로토콜을 확장하고 보완하는 표준 프로토콜이다.

DNSSEC의 도입적용은 DNS 데이터의 위-변조 공격을 원천적으로 불가능하게 하여 DNS 캐시 포이즈닝 공격을 불가능하게 만든다.

현재 추진되고 있는 차세대 인터넷은 높은 수준의 보안 안전성을 필요로 한다.
차세대 인터넷 환경에서의 DNS에 대해서도 그 근본적 보안 취약점을 극복함으로써 신뢰할 수 있는 데이터를 차세대 인터넷 응용 어플리케이션에 제공할 수 있는 안전한 기반 인프라 시스템으로의 진화가 요청되고 있다.

DNSSEC은 안전하고 신뢰성을 보장할 수 있는 DNS를 구현하기 위한 표준 프로토콜이다.

궁극적으로 인터넷 전체에 DNSSEC 기반의 DNS 체계가 완성된다면, DNS의 보안 안전성 향상은 단지 DNS의 안전성 향상에 그치는 것이 아니라, 모든 인터넷 어플리케이션의 보안기능을 보다 널리 적용할 수 있게 되어 인터넷 전체의 보안성을 전반적으로 향상, 강화시키는 효과를 기대할 수 있게 한다.

예를 들면, DNSSEC이 적용된 DNS 환경을 대비하여, IPSec의 경우는 IPSec 메커니즘에서 필요로 하는 공개키 데이터를 DNS 시스템에 DNS 데이터로 설정 저장할 수 있도록 IPSECKEY RR을 표준 정의해 두고 있기도 하다.


DNSSEC의 필요성

전 세계적으로 발생하고 있는 상위의 루트 네임 서버(이하 루트서버)들에 대한 공격으로 인해 인터넷 기반시설에 대한 보호가 이슈가 되었다.

DNS는 인터넷주소자원관리의 핵심 시스템으로서, 전 세계에 분산되어 있는 많은 네임 서버들 간의 계층적 상호 연동을 통해 사용자들에게 인터넷 접속을 위해 필수적인 주소 사상(mapping) 서비스를 제공한다. 하지만, 계층 구조상 최상단의 루트서버가 공격을 받아 피해를 입거나, 혹은 상위 레벨 네임서버의 데이터가 위·변조된다면, 특히 공공 및 금융 등 인터넷 가상세계의 여러 분야에서 큰 혼란을 가져올 수 있다. 서비스 거부 공격(DoS, DDoS) 등 네임서버의 기능을 마비시키기 위한 공격들은 기존의 분산 DNS 구조 자체의 특성과 필터링 기술 등을 통해 적절한 대응 방안의 도출이 가능하지만, 네임서버 데이터의 위·변조 발생 시 이에 대한 적절한 대응방안은 없는 상태이다.

도메인 네임 시스템의 데이터 위-변조는 리졸버 기능을 갖는 리커시브 네임서버가 응답된 DNS 데이터를 캐시에 저장하고 이 저장된 데이터로 수많은 호스트에게 응답한다는 점을 악용한다. 공격자는 위-변조된 DNS 데이터를 갖는 응답 메시지를 사용하여 리커시브 네임서버를 속이고 캐시에 저장하도록 하여 호스트들이 위-변조된 데이터를 응답받아 어플리케이션이 이에 따른 접속을 하도록 유도한다. 공격자가 금융 사이트로 모방하여 미리 마련한 위장된 서버에 사용자 호스트가 접속하도록 유도하고, 사용자가 아무 의심 없이 자신의 계정 정보 등 개인정보를 입력하도록 함으로써 개인정보를 획득하는 방식의 범법행위가 가능하다.

이를 DNS 캐시 포이즈닝(cache poisoning) 공격이라고도 한다. 이러한 공격으로써 대표적인 것은 1997년 11월 당시 인터넷 최상위 도메인을 관리하던 InterNIC 사이트에 접속하는 웹 트래픽이 InterNIC 사이트가 아닌 Alternic 사이트에 접속되는 일이 미국에서 발생했다. 이는 유진 카쉬푸레프(Eugene Kashpureff)가 도메인 네임 시스템의 데이터를 위-변조하여 리커시브 네임서버의 캐시에 반영토록 하는 조작에 의해 발생하였다. 그는 Alternic의 설립자로써 당시 인터넷 최상위 도메인을 독점 관리하고 있던 InterNIC에 대한 반발을 표시하기 위해 그러한 공격을 시도했다고 알려지고 있다.
이외에 비교적 최근인 2005년 상반기에 리커시브 네임서버의 캐시 포이즈닝(cache poisoning) 공격이 이루어져 많은 수의 네임서버가 이 공격에 의해 피해를 입는 일이 발생했었다.


사용자가 충분한 주의를 기울이면 피할 수 있는 피싱(phishing)과는 달리, 이러한 DNS 캐시 포이즈닝(cache poisoning)은 사용자가 정상적인 도메인 네임을 입력하여 서비스 접속을 시도하더라도 이미 네임서버 캐시에 저장된 위-변조된 주소 데이터가 응답되어 오기 때문에 사용자로서는 이에 대응하거나 이를 방지할 수단이 없다. 따라서 이러한 공격에 대해서는 네임서버 시스템 관리자에 의한 DNS 캐시 포이즈닝(cache poisoning) 방지를 위한 철저한 감시와 관리가 요구된다. 그러나 이 공격을 감지하거나 모니터링하기란 용이하지 않으며, 이러한 공격은 은밀하게 국지적으로 이루지기 때문에 공격이 있었다는 것을 알지 못하고 지나칠 수도 있다.

도메인 네임 시스템에서의 DNS 캐시 포이즈닝(cache poisoning)과 같은 데이터 위-변조 위험으로부터 네임서버를 보호하기 위한 확장 표준이 DNSSEC이다. DNSSEC 표준은 보안측면에 평가할 때, 데이터 위-변조 방지가 원천적으로 불가능한 아주 강력한 보안적용 체계로 평가되고 있다. 그러나 그만큼 그 적용과 관리가 복잡하고 어렵다고 평가되고 있기도 하다.

DNSSEC 적용의 효과는 데이터 위-변조를 방지한다는 측면에만 그치는 것은 아니다. 일단 DNSSEC의 적용에 의해 데이터 위-변조가 불가능하게 된 도메인 네임 시스템 그 자체가 안전하고 보안 신뢰성이 큰 개방형의 분산구조 데이터베이스로써 기능하게 된다. 이는 보안기능을 가진 응용 어플리케이션 프로토콜에서 필요로 하는 시스템 차원의 시스템 공개키 정보를 안심하고 도메인 네임 시스템에서 리소스 레코드(resource record)로 설정할 수 있게 된다는 것을 의미한다. 널리 사용되고 있는 공개키 암호 방식에서의 공개키는 누구에게나 널리 공개하여 배포하는 것을 필요로 하는데, 이는 인터넷의 개방형 시스템인 도메인 네임 시스템의 특성에 적합하다. DNSSEC의 적용으로 데이터 자체의 위-변조 위험이 사라질 때, 도메인 네임 시스템은 이러한 시스템 간 통신에 필요한 공개키의 배포와 같은 용도로 활용될 수 있다. 이는 특히 인터넷 인프라 차원에서의 보안 메커니즘이 보다 안정적이고 강력한 보안체계를 구성하는데 활용될 수 있을 것으로 예상된다. 이미 IPSec 표준사항 중에는 IPSec에 필요한 공개키를 DNSSEC 적용 환경 하에서 DNS의 IPSECKEY 리소스 레코드에 설정하여 사용할 수 있는 방안을 정의하고 있기도 하다. SSH 접속의 경우에는 SSHFP RR을 정하여 DNSSEC 적용 환경에서 접속 대상 호스트의 공개키에 대한 핑거프린트(fingerprint) 값을 DNS에 저장하고 참조할 수 있는 방안을 표준으로 정의하고 있기도 하다.

이와 같이, DNSSEC의 도입적용은 도메인 네임 시스템의 데이터에 대한 위-변조 위험에 대한 네임서버 보호라는 측면과 함께 적극적으로는 안전하고 신뢰성 있는 도메인 네임 시스템을 구축함으로써 인터넷 전반의 보안기능 적용이 용이한 인터넷 기반 환경을 제공할 수 있다는 측면을 함께 지니고 있다.


DNSSEC 구성

DNSSEC은 전자서명과 서명검증 절차를 지원하기 위한 신규 리소스 레코드를 정의하였다.
이에는 RRSIG RR, DNSKEY RR, NSEC RR, DS RR의 4 가지가 있다.

리소스 레코드 각각의 주요 용도는 다음과 같다.

RRSIG(Resource Record Signature) RR은 도메인 네임 시스템의 각 리소스 레코드 데이터에 대한 전자서명 데이터를 저장하기 위한 리소스 레코드이다. RRSIG은 서명 데이터만 단순하게 제공하는 것은 아니며 전자서명에 관련된 여러 가지 정보 필드를 함께 정의하고 있다. RRSIG은 DNS 응답 메시지에 그 서명 대상 리소스 레코드와 함께 응답된다.


DNSKEY(DNS Public Key) RR은 도메인 존(zone)의 공개키(public key) 데이터를 저장하여 제공하기 위한 리소스 레코드이다. RRSIG RR에서 제공되는 리소스 레코드별 전자서명에 대한 서명검증 절차는 이 서명에 사용된 개인키(private key)에 상응하는 공개키(public key)를 필요로 한다. 이 공개키의 소유자는 도메인 존(zone)이며, 도메인 존(zone)의 공개키(public key)는 DNSKEY RR에 저장되어 DNS 질의응답을 통해 배포된다.
하나의 도메인 존에는 두 가지 공개키 암호화 방식의 키 쌍(key pair)이 존재한다.
하나는 도메인 존(zone)의 소유하고 있는 모든 리소스 레코드 각각을 서명하기 위한 키 쌍(key pair)이다. 이 키 쌍 중에서 공개키(public key)를 “ZSK(Zone Singing Key)”라고 한다. 곧, 존을 서명하는 데에 사용된 개인키에 대응하는 공개키임을 의미한다.


다른 한 쌍은 존을 서명하는 데에 사용된 개인키의 대응 공개키인 ZSK 자체를 서명하기 위한 키 쌍(key pair)이다. 이 중에서 공개키(public key)를 “KSK(Key Signing Key)”라 한다. 곧, 공개키인 ZSK를 서명하는 데에 사용된 개인키의 대응 공개키임을 의미한다.

DS(Delegation Signer) RR은 DNS 고유의 위임체계에 따라 보안측면의 인증된 위임체계를 구성하기 위한 데이터를 저장한다. 여기에 저장되는 데이터는 자식 도메인 존(zone)의 공개키 중에서 KSK(Key Signing Key)에 대한 다이제스트(digest) 데이터이다. 이 다이제스트(digest) 값은 KSK 공개키 데이터에 대한 지문(fingerprint) 역할을 한다. 곧, 하위 자식 도메인 존(zone)의 KSK를 확증할 수 있는 수단을 제공함으로써, 부모 도메인 존(zone)의 인증된 권한에 의해 자식 도메인의 KSK를 인증할 수 있게 한다. 이를 통해 부모 도메인과 자식 도메인 간에 인증사슬(authentication chain)을 형성한다. 이 DS RR은 부모 도메인 존(zone)이 소유하는 리소스 레코드이며, 따라서 부모 도메인 존(zone)의 ZSK(Zone Signing Key)의 대응 개인키로 서명한 RRSIG RR이 DS RR에 대하여 생성되어 제공된다.


NSEC(Next Secure) RR은 DNSSEC이 제공하는 보안 기능 중 “DNS 데이터의 부재 인증(authenticated denial of existence of DNS data)”을 위해 정의된 리소스 레코드이다. 특정 리소스 레코드가 존재하지 않음을 전자서명을 통해 인증할 수 있는 메커니즘을 제공하기 위한 리소스 레코드 타입이다. 이는 도메인 존에서 설정하여 존재하고 있는 도메인 네임이 존재하지 않는 것으로 위-변조하여 응답되는 경우, 또는 존재하고 있는 리소스 레코드를 존재하지 않는 것으로 위-변조하여 응답되는 경우에 대하여 실제로 그 도메인 네임이나 리소스 레코드의 존재여부를 서명검증을 통해 확인할 수 있는 수단을 제공하기 위함이다.

NSEC RR은 DNSSEC의 적용상에서 문제점을 유발하는 요소로 인식되고 있다.
NSEC RR의 목적이 “DNS 데이터의 부재인증”을 위한 것이지만, 이는 역으로 도메인 존에 설정되어 있는 전체 도메인 네임 리스트와 리소스 레코드 리스트를 쉽게 파악할 수 있는 도구로 활용될 수 있다. 이 문제는 존 목록화(zone enumeration) 이슈로 알려져 있다. 이 문제 외에 .COM이나 .NET, .KR과 같이 위임설정 정보만 갖는 도메인 존에서 NSEC RR이 존재함으로 인해, 도메인 존의 서명된 데이터가 급증하고, 일반 도메인에 대한 대량의 위임설정 정보 각각에 대한 서명처리로 인해 DNSSEC 적용이 곤란하고 비용이 과다하게 발생한다는 문제점이 있다. 이 문제를 해소하기 위해 IETF DNSEXT 워킹그룹에서는 NSEC RR의 기능을 대신할 수 있는 NSEC3 RR에 대한 표준화 작업이 진행 중에 있다.


DNSSEC은 리졸버에서의 신뢰할 수 있는 서명검증이 가능하도록 설계된 표준이다. DNSSEC 표준의 RRSIG RR과 DNSKEY RR, DS RR을 사용하여 리커시브 네임서버의 리졸버는 응답된 리소스 레코드 데이터에 대한 서명검증을 수행한다. 서명검증 대상 데이터는 기존의 리소스 레코드 데이터이며, 서명은 RRSIG RR에서 얻을 수 있고, 이 서명에 대한 검증에서 필요한 공개키 데이터는 도메인 존의 DNSKEY RR에 대한 질의응답으로 얻는다. DNSKEY RR 자체에 대한 위-변조 위험 가능성이 존재하므로 이에 대한 검증 또한 필요하다. 그 부모 도메인 존에서 서명된 위임설정의 DS RR과 이 DS RR에 대한 서명을 갖는 RRSIG RR, 그리고 부모 존의 공개키를 갖는 DNSKEY RR을 질의응답으로 조회하여 서명 검증을 수행한다. 이러한 검증은 상위 도메인으로 지속되며, 결국에는 리커시브 네임서버에 미리 설정된 신뢰앵커(Trust Anchor)를 사용한 검증이 가능하게 되면 그 검증은 신뢰할 수 있게 된다.


DNS 보안 취약점

도메인 네임 시스템(DNS)은 인터넷 초기에 보안을 고려하지 않고 설계된 프로토콜이다.

시간이 지남에 따라 인터넷은 급속히 확장되었고, 인터넷을 사용하는 시스템과 서비스에 대한 침해공격 시도가 증가하였다. 도메인 네임 시스템에 대해서도 역시 이러한 침해공격 시도가 발생하였다. 도메인 네임 시스템은 인터넷의 기반 인프라 시스템으로써, 침해공격에 의해 서비스 불안정 또는 서비스 중단 사태가 발생할 경우, 도메인 네임 시스템에 의존하는 많은 인터넷 서비스가 함께 서비스 장애발생 사태를 맞게 된다는 점에서 문제의 심각성을 인식하게 되었다.

DNS에 대한 위협은 크게 세 가지 정도로 분류할 수 있다.
서비스거부(DoS) 취약점, 프로그램 취약점, 속이기(spoofing) 취약점이 그것이다.

‘서비스거부(Denial of Service)’ 공격은 공격자가 불필요한 질의를 대량으로 발생시켜 목표 네임서버가 해당 질의를 처리하는 동안 다른 정상 서비스요청에 대해서는 응답을 못하게 하는 방법으로서 2002년 10월 전 세계 최상위에 있는 13개 루트서버에 대해 이 공격이 시도된 바 있다. 당시 약 1시간 동안 진행된 공격에 의해 전 세계의 9대 정도의 서버가 접속지연 등 일시적으로 영향을 받았으나 공격시간이 1시간으로 지속적이지 못했고 이상발견 즉시 각 루트서버 관리자들이 적절한 네트워크 트래픽 필터링을 실시하여 일반 인터넷 사용자가 어떤 영향을 느낄 정도로 파급효과가 크지는 않았다. 하지만 이 사건은 의외로 단순한 기술로 인터넷 역사상 유례가 없는 13개 루트서버에 대한 전면적인 공격을 감행했다는 점에서 인터넷 기반시설에 대한 대규모 위협이 현실화하고 있다고 볼 수 있다.
 
‘프로그램 취약점’은 네임서버 프로그램 버그에 의한 취약점을 의미하며 이 취약점에 의해 네임서버 프로그램이 중지되거나 시스템 전체가 장악될 수도 있다. 현재는 네임서버 프로그램의 버그 발생 시 그 파급효과를 우려하여 이른 시간 안에 수정용 패치 프로그램이 만들어지고 있다.

‘속이기(이하 ‘스푸핑’) 취약점’은 말 그대로 네임서버가 주고받는 정보를 악의의 공격자가 임의로 조작하여 인터넷상에 퍼뜨리는 일로서 경우에 따라서는 공격을 받았는지 여부를 발견하기 어려워서 그에 따른 피해도 매우 커질 수도 있다.

이상의 취약점들이 모두 큰 위협이 될 수 있지만 궁극적으로 가장 위험한 취약점은 일명 ‘스푸핑(spoofing)’으로 알려진 네임서버 정보에 대한 위변조 위협이다. 예를 들어 우리가 인터넷 뱅킹을 이용할 때 사용하는 특정 도메인네임이 공격자에 의해 위변조 되었다면 해당 사이트가 아닌 악의의 공격자가 실제 사이트와 동일하게 제작한 가짜 사이트에 들어가 별다른 의심 없이 로그인을 하는 등 자신의 개인정보를 그대로 노출시킬 수도 있다.

도메인 네임 시스템이 제공하는 데이터에 대한 위-변조 공격시도가 있어 초기의 대표적인 사건으로는 1997년 11월 당시 인터넷 최상위 도메인을 관리하던 InterNIC 사이트에 접속하는 웹 트래픽이 InterNIC 사이트가 아닌 Alternic 사이트로 접속이 전환된 사건이다. 이는 유진 카쉬푸레프(Eugene Kashpureff)가 도메인 네임 시스템의 데이터를 위-변조하여 리커시브 네임서버의 캐시에 반영토록 하는 조작에 의해 발생하였다. 그는 Alternic의 설립자로써 당시 인터넷 최상위 도메인을 독점 관리하고 있던 InterNIC에 대한 반발을 표시하기 위해 그러한 공격을 시도했다. 그는 처음에는 주말 동안 트래픽을 전환시켜 놓고 다시 원상태로 복구했으나, InterNIC 등의 반응태도에 반발하여 다시 그 다음 주 주말 동안 트래픽을 전환시켜 버림으로써, 사실상 그의 의도대로 언제든지 네임서버의 데이터 위-변조를 통해 접속 트래픽을 원하는 곳으로 전환시켜 버릴 수 있다는 것을 보여주었다.

이외에 비교적 최근인 2005년 3월경 리커시브 네임서버의 캐시 포이즈닝(cache poisoning)에 의한 공격이 이루어져 캐시 포이즈닝 검출 기능이 적용되지 않은 많은 수의 네임서버를 통해 피해가 발생했었다. 이에 대한 구체적인 내용은 SANS 사이트의 분석자료 http://isc.sans.org/presentations/dnspoisoning.php에서 확인할 수 있다.


DNS 캐시 포이즈닝 공격방법은 다양하게 진화하고 있는 것으로 관측되고 있으며, 최근에는 “Birthday Attack”의 공격방법으로 DNS 캐시 포이즈닝 공격이 이루어질 수 있음이 보고되었다. 이는 위-변조된 DNS 응답 메시지로 리커시브 네임서버를 속이기 위해서는 DNS 메시지의 트랜잭션 ID를 리커시브 네임서버가 질의 시에 사용하는 랜덤 ID 값과 일치하는 값을 사용할 필요성이 있는데, “Birthday Paradox”라는 수학적 확률 명제를 응용하면 그 ID를 일치시킬 확률이 크게 증가하도록 할 수 있고 이를 응용한 “Birthday Attack”가 DNS 공격에 사용될 수 있다는 내용이다. 아직까지는 이런 “Birthday Attack”에 의해 피해가 발생한 사례는 보고되고 있지 않다. 그러나 BIND DNS의 경우에는 BIND 8 버전의 DNS를 사용하는 리커시브 네임서버가 이 공격에 취약할 수 있다. 반면에 BIND 9 버전 DNS의 경우에는 이 공격이 효과적으로 적용되지 않는다고 알려져 있다.

최근 2006년 상반기에는 “Reflector Attack”이라는 새로운 형태의 공격이 발생한 바 있다. 이 공격은 네임서버를 공격대상으로 삼는 것이 아니라 네임서버를 제3의 공격대상 서버를 공격하는 데에 동원하는 방식이었다는 점에서 특이하다. 비록 DNS 네임서버를 공격하는 것은 아니지만, 그 공격에 사용된 방식은 DNS 프로토콜의 특성을 악용했다는 점에서 주목을 받았다. 이 공격방식은 DNS 질의에 사용되는 패킷이 통상 약 70바이트 크기를 갖는데 비해 그 응답 메시지의 패킷은 최대 4196바이트 크기를 갖는 경우를 만들 수가 있어, 질의 트래픽 대비 약 60배로 증폭된 응답 트래픽을 유발하는 것이 가능하다는 점을 공격에 응용하였다. 결과적으로 이 공격의 대상이 된 서버 호스트에게 DNS 응답 메시지로 구성된 1Gbps 이상의 트래픽이 집중하여 서비스 불능 상태에 빠졌다. 이에는 자신에게 질의할 수 있는 호스트 클라이언트를 제한하지 않은 설정을 가지고 있어서 누구나 이에 질의하여 응답을 받을 수 있는 리커시브 네임서버가 악의적인 공격에 동원되고 있었다. 이러한 설정의 리커시브 네임서버를 이른바 “개방된 DNS(Open DNS)”이라 한다.


출처 : http://dnssec.nida.or.kr/

Trackback 0 Comment 0