'PGP'에 해당되는 글 2건

  1. 2006.05.09 PGP 메시지의 형식
  2. 2006.05.09 PGP의 개요

그림 4-4는 전송된 메시지 형식을 보여준다.


그림 4-4 PGP 메시지 형식


PGP 메시지는 메시지 요소, 서명 요소(선택), 그리고 세션키 요소(선택)의 세 가지 요소로 구성된다.


가. 메시지 요소


메시지 요소는 파일 이름과 생성된 시간을 나타내는 타임 스탬프, 전송되거나 저장될 실제적인 데이터를 포함한다.


나. 서명 요소


서명 요소는 다음의 요소를 포함한다.


- 타임스탬프 : 서명이 만들어진 시간.

- 메시지 다이제스트 : 128비트 MD5 다이제스트. 다이제스트는 메시지 요소의 데이터 부분과 연결된 서명 타임 스탬프에서 계산된다. 다이제스트에 서명 타임 스탬포를 포함하는것은 재전송 공격의 유형을 막을 수 있다는 것을 보장한다.

- 메시지 다이제스트의 상위 2 바이트 : 사용자가 인증을 위해 올바른 RSA 키가 메시지 다이제스트를 복호화하는데 사용되었는지를 알 수 있도록 하기 위해 평문 사본의 첫 2 바이트와 복호화된 다이제스트의 처음 2 바이트를 비교한다. 이러한 바이트들은 또한 메시지의 16 비트 프레임 체크 순서로의 역할도 한다.

- 송신자 공개키의 키 ID : 메시지 다이제스트를 복호화하는데 사용될 공개키를 식별하고 메시지 다이제스트를 암호화하는데 사용되는 비밀키를 식별한다.


메시지 요소와 선택사항인 서명 요소는 압축될 수 있다.


다. 세션키 요소


세션키 요소는 암호화된 세션키와 세션키를 암호화하기 위해 송신자가 사용한 수신자의 공개키 식별자를 포함한다.


4. PGP 메시지의 전송


그림 4-5는 PGP 메시지의 송신과 수신시 2. 에서 설명한 보안 서비스간의 관계를 보여준다.


그림 4-5 PGP 메시지의 송신과 수신


송신측에서는 압축된 평문의 해쉬 코드를 사용하여 서명문을 생성한다. 다음에 평문과 서명문 모두가 압축된다. 기밀성이 요구되면 블럭(압축된 평문 또는 압축된 서명문과 평문)은 암호화되고 RSA로 암호화 된 관용 암호화키가 첨부된다. 최종적으로 전체 블록은 Radix64 형식으로 변환된다. 수신측에서 입력된 블록은 Radix64 형식에서 2진으로 변환되고 메시지가 암호화되어 있으면 수신자는 세션키를 복구하여 메시지를 복호화하고 압축을 해제한다. 메시지가 서명되어 있으면 수신자는 전송된 해쉬 코드를 복구하고 자신이 계산한 해쉬 코드와 비교하여 인증한다.


5. PGP 메시지의 생성과 수신


PGP의 보안기능을 설명하기 위해 메시지를 생성하고 수신하는 과정을 살펴본다.


가. PGP 메시지의 생성과정


(1) 메시지 서명


. PGP는 색인으로 사용자 ID를 통해 비밀키 링으로부터 송신자의 비밀키를 검색한다.

. 사용자 ID는 디폴트로 첫 번째 비밀키를 검색한다.

. PGP는 비밀키를 알아내기 위해 passphrase를 요구한다.

. 메시지의 서명 요소가 구성된다.


(2) 메시지 암호화


. PGP는 세션키를 생성하여 메시지를 암호화한다.

. PGP는 색인으로 수신자의 ID를 사용해 공개키 링으로부터 수신자의 공개키를 검색한다.

. 메시지의 세션키 요소가 구성된다.


그림 4-6 PGP 메시지 생성


나. PGP 메시지의 수신과정


(1) 메시지 복호화


. PGP는 색인으로 메시지의 세션키 요소에 있는 키 ID 필드를 사용해 비밀키 링으로부터 수신자의 비밀키를 검색한다.

. PGP는 비밀키를 복구하기 위해 passphrase를 요구한다.

. PGP는 세션키를 복구하고 메시지를 복호한다.


(2) 메시지 인증


. PGP는 색인으로 메시지의 서명 요소에 있는 키 ID 필드를 사용해 공개키 링으로부터 송신자의 공개키를 검색한다.

. PGP는 전송된 메시지 다이제스트를 복구한다.

. PGP는 수신된 메시지의 메시지 다이제스트를 계산하고 전송된 메시지 다이제스트와 비교하여 인증한다.


그림 4-7 PGP 메시지 수신


6. PGP 암호화키


PGP는 일회용 세션 관용키, 공개키, 비밀키, 그리고 Passprase 기반 관용키의 네 가지 유형의 키를 사용한다. 표 4-2는 네 가지 키 유형의 용도에 대해 보여준다.


표 4-2 PGP에서 사용되는 암호화키

키이름

암호

알고리즘

용   도

세션키

IDEA

송신을 위한 메시지를 암호화하는데 사용. 각 세션키는 한번만 사용되고 랜덤하게 생성된다.

공개키

RSA

메시지와 함께 전송할 세션키를 암호화하기 위해 사용. 송신자와 수신자 모두는 각 공개키의 사본을 유지해야 한다.

비밀키

RSA

디지털 서명을 위한 메시지 암호화에 이용. 단지 송신자만이 자신의 비밀키를 유지할 필요가 있다.

passphrase

IDEA

키 송신자가 비밀키에 저장하는 비밀키를 암호화하는데 이용.



가. 세션키 생성


각 세션키는 메시지를 암호화하고 복호화하는데 사용한다. 메시지의 암호화 및 복호화는 128 비트 키의 대칭 암호 알고리즘인 IDEA를 사용한다. IDEA는 랜덤수 128 비트의 키를 생성한다.


나. 키 식별자(키 ID)


암호화 된 메시지는 암호화된 세션키와 함께 보내진다. 세션키는 수신자의 공개키로 암호화하므로 수신자만이 세션키를 알 수 있고 메시지를 복구할 수 있다. 사용자가 하나의 공개키 쌍을 사용한다면 수신자는 세션키를 복구하는데 어떤 키를 사용할 것인지 선택할 여지가 없다. 그러나 사용자가 여러 개의 공개키 쌍을 가질 경우 수신자는 세션키를 암호화하는데 사용된 자신의 공개키를 알 수 있게 하기 위해 공개키에 식별자를 연관시킨다. 사용자 ID와 키 ID의 연관은 유일한 키를 식별하게 하며 작은 키 ID만 전송한다. 이때, 송신자와 수신자 모두 키 ID로부터 공개키를 대응시키도록 키 ID가 반드시 저장되고 부여되어야 한다. 각 공개키와 관련된 키 ID는 최하위 64비트로 구성된다. 키 ID는 또한 PGP 전자 서명을 위해서도 필요하다. 송신자는 메시지 다이제스트를 암호화하기 위해 많은 수의 비밀키 가운데 하나를 사용하기 때문에 어느 공개키를 사용할 것인지를 알아야 한다.

따라서 PGP 메시지의 전자서명 요소는 요구된 공개키의 64비트 키ID를 포함한다. 메시지가 수신되면 그 키 ID가 송신자의 공개키인지를 확인한 후 서명을 확인한다.


7. PGP의 키링 구조


송수신자의 키 ID는 기밀성과 인증을 제공하는 모든 PGP 메시지에 포함된다. 이들 키 ID와 연관된 키는 모든 사용자가 효율적으로 사용할 수 있도록 체계적인 방법으로 저장, 관리될 필요가 있다 PGP에서 사용한 방법 중 하나는 사용자가 소유하는 공개/개인키 쌍을 저장하고 다른 하나는 이 사용자에게 알려진 다른 사용자들의 공개키를 저장하도록 각 사용자에게 한 쌍의 자료구조를 제공하는 것이다. 이러한 자료구조를 개인키 링, 공개키 링이라고 한다.

PGP는 공개키 링과 비밀키 링의 구조를 갖는다. 그림 4-8은 공개키 링과 비밀키 링의 일반적인 구조를 보여주고 있으며, 각 행은 해당 사용자가 가지고 있는 공개키 및 비밀키쌍 중의 하나를 나타내고, 각 행은 다음의 엔트리를 포함한다.


Private Key Rings


Public Key Ring

그림 4-8 비밀키 및 공개키 링 구조


- 타임스탬프 : 키 쌍이 생성된 날짜/시간

- 키 ID : 엔트리에 대한 공개키의 최하의 64비트

- 공개키 : 키 쌍에서 공개키의 부분

- 비밀키 : 키 쌍에서 비밀키의 부분, 이 영역은 암호화된다.

- 사용자 ID : 일반적으로 사용자의 e-mai1 주소


비밀키 링은 사용자 ID나 키 ID를 이용하여 색인된다. 비밀키 링이 키 쌍을 생성해서 소유하고 있는 사용자 시스템에만 저장되도록 하고 그 사용자만이 액세스한다 할지라도 가능한 한 안전하게 하기 위해 비밀키는 키 링에 직접 저장하지 않고 IDEA를 이용해서 암호화된다.

이를 위한 절차는 먼저 사용자는 비밀키를 암호화하기 위해 사용될 암호구문(passphrase)을 선택한다. 시스템이 RSA를 이용하여 새로운 공개키 및 비밀키 쌍을 만들 때 시스템은 사용자에게 passphrase를 요구한다.

시스템은 해쉬코드를 키로 사용하여 IDEA를 사용해서 비밀키를 암호화한다. 암호화된 비밀키는 비밀키 링에 저장된다. 사용자가 비밀키를 검색하려고 비밀키 링을 액세스 할 경우 사용자는 passphrase의 해쉬 코드를 생성하며 해쉬 코드와 IDEA로 암호화된 비밀키를 복호 한다.

그림 4-6에서의 공개키 링의 일반적인 구조는 해당 사용자가 알고 있는 다른 사용자의 공개키를 저장하기 위해 사용된다. 각 필드는 다음으로 구성된다.


- 타임 스탬프 : 이 엔트리가 생성된 날짜/시간

- 키 ID : 이 엔트리에 대한 최하위 64 비트

- 공개키 : 이 엔트리의 공개키

- 사용자 ID : 키의 소유자를 식별


공개키 링은 사용자 ID나 키 ID에 의해 색인된다. 키 링들이 메시지의 송신과 수신에 사용될 때 송신자는 적당한 명령을 입력하여 동작을 초기화한다.


8. 공개키 관리


만약 A가 작성한 공개키를「B의 공개키이다」라고 거짓으로 공개해서 모두가 신뢰하게 되면 B만이 복호할 수 있도록 작성한 암호문이 A에 의해 복호되어 메시지가 노출된다. 또는 A는 B가 전자서명한 것으로 메시지를 송신할 수 있게 된다.

이와 같이 공개된 공개키를 공격으로부터 보호하는 것은 실제 응용에서 가장 어려운 문제이며, 이 문제를 해결하기 위해 소프트웨어가 복잡해진다. 이러한 점에서 PGP는 사용될 수 있는 몇 가지 제안 옵션으로 이 문제를 해결하기 위한 구조를 제공한다. PGP를 이용하여 다른 사용자와 통신하기 위해 사용자는 다른 사용자의 공개키들을 관리하는 공개키 링을 설정한다.

여기서, 공개키 링에 부정한 공개키가 포함됨으로써 생기는 위협을 최소화하기 위해 PGP는 몇가지 대책을 강구하고 있다. 플로피 디스크나 우편으로 직접 전달하는 방식, e-mai1로 받고 전화로 확인하는 방식, 신뢰할 수 있는 제3자(Trusted Third Party, TTP)로부터 공개키를 획득하거나 인증기관으로부터 공개키를 얻는 방식 등이 그것이다.

신뢰할 수 있는 공개키를 배포하기 위해 PGP와 S/MIME에서는 각각 신뢰고리와 인증기관을 도입한다.


가. PGP의 공개키 신뢰 구조


PGP는 인증기관을 가지고 있지 않지만 신뢰를 사용하고 신뢰를 공개키와 연관시키고 신뢰 정보를 활용하는 편리한 수단을 제공한다. 공개키 링의 각 엔트리는 실제로 공개키 인증서이다.

공개키링 구조를 나타내는 그림 4-6에서 각 엔트리와 연관된 키 적법성 필드는 PGP가 사용자에 대한 유효 공개키라는 사실을 신뢰하는 정도를 나타낸다. 신뢰의 수준이 높을수록 이 사용자 ID를 이 키에 강하게 연결시킨다. 이 필드는 PGP에 의해 계산된다.

또한 엔트리와 연관된 것으로 이 인증서에 서명해 놓은 것들을 키 링의 소유자가 수집해 놓은 서명문들이 있다. 각 서명은 서명 신뢰 필드와 연관되는데 이것은 PGP 사용자가 공개키를 증명하기 위해 서명자가 얼마나 신뢰하는가를 나타낸다. 키 적법성 필드는 실제로 엔트리에서 서명문 신뢰 필드의 수집으로 얻어진다.

마지막으로 각 엔트리는 특정 소유자와 연관된 공개키를 정의하고 소유자 신뢰 필드가 포함되는데, 이는 다른 공개키 인증서에 서명할 때 이 공개키의 신뢰 정도를 나타낸다. 이 신뢰 레벨은 사용자에 의해 할당된다.

PGP의 신뢰고리는 아래 그림 4-9와 같이 설명할 수 있다.


① A씨는 B씨의 공개키에 서명한다.

② A씨와 C씨, D씨는 서로 잘 알고 있으며, 공개키가 틀림없이 본인 것으로 알고 있다.

③ C씨, D씨는 잘 모르는 B씨의 공개키를 처음 수신한 B씨의 것으로 신뢰해도 되는지 알 수 없다. 그러나 여기서 잘 알고 있는 A씨의 서명이 있다. 그래서 이 공개키는 틀림없이 B씨의 것이라고 판단한다.


그림 4-9 PGP의 신뢰고리


나. S/MIME의 공개키 신뢰 구조


S/MIME의 키 관리 방식은 X.509의 엄격한 계층구조와 PGP의 Web of Trust방식의 중간으로 간주된다. PGP 모델에서와 같이 S/MIME 관리자들과 사용자들은 CRL (certificate revocation list)과 신뢰된 키들의 목록과 함께 클라이언트를 배열하여야 한다. 말하자면, 수신된 메시지의 서명을 확인하고 송신하는 메시지를 암호화하기 위하여 인증서들을 관리할 지역적인 책임이 존재한다. 한편, 인증서들은 인증기관에 의해 서명된다. 따라서, S/MIME에서 사용자는 키 생성, 등록, 인증서 저장과 검색의 역할을 한다.

S/MIME은 인증기관을 도입함으로써 아래 순서로 입수한 공개키를 신뢰하게 된다. 그림 4-10


그림 4-10 S/MIME의 신뢰구조


① 사용자는 Root 인증기관(최상위의 서명자)의 공개키를 미리 갖고 있고 Root 인증기관을 신뢰한다.

② Root 인증기관은 하위인증기관의 공개키에 서명한 공개키 증명서를 발행한다.

③ A씨는 인증기관 A에게 공개키를 제출한다. 인증기관 A는 서명해서 A씨의 공개키 증명서를 발행한다.

④ A씨의 공개키 증명서를 수신한 B씨나 C씨는 우선 인증기관 A의 공개키 증명서의 서명을 소지한 Root 인증기관의 공개키를 사용해서 검증한다. 인증기관 A의 공개키로서 정당하다면 A씨의 공개키 증명서의 서명을 인증기관 A의 공개키를 사용해서 검증한다.



'Security Skill&Trend' 카테고리의 다른 글

제3회 해킹방어대회 개최  (1) 2006.05.10
catalyst 29xx 미러링  (0) 2006.05.10
PGP 메시지의 형식  (0) 2006.05.09
PGP의 개요  (0) 2006.05.09
2006년도 한국정보보호학회 하계학술대회 6.30(금)-7.1(토)  (0) 2006.05.03
광역망,프레임릴레이  (0) 2006.05.03
Posted by 엔시스
TAG PGP

어느 사용자가 보낸 전자우편은 다른 사용자에게 도달할 때까지 여러 호스트(host)들을 거치게 되며 전자우편은 일반 편지와는 달리 보내는 곳의 주소뿐만 아니라 내용까지도 노출되는 엽서와 같은 구조를 가지고 있다. 따라서 전송 도중에 얼마든지 도청, 변조될 가능성이 있다. PGP, S/MIME은 전자우편 분야에서 이러한 문제를 해결하기 위한 보안기술이다.

PGP(Pretty Good Privacy)는 인터넷에서 사용되는 전자우편 보안도구이다. PGP는 보내고자 하는 내용을 암호 알고리즘을 이용하여 암호화함으로서 특정한 키가 있어야만 내용을 볼 수 있도록 되어 있다. 일반우편은 배달도중에 누군가가 몰래 봉투를 뜯어 내용을 바꾼 다음에 붙여 놓을 수 있지만, PGP를 이용한 전자우편은 엽서가 아닌 밀봉된 봉투에 넣어서 보내기 때문에 기밀성(Confidentiality), 인증(Authentication), 무결성(Integrity), 부인방지(Nonrepudiation) 등의 기능을 지원할 수 있다.

PGP 1.0 버전은 1991년에 나왔는데 현재 쓰이고 있는 알고리즘과는 다른 알고리즘이 사용되었다. 미국의 보안회사인 ViaCrypt사는 RSA사와 협약하여 상업용 버전을 발표하였고, MIT대학에서는 비상업용을 전제로 하여 공개 버전을 내 놓았다.


2. PGP 보안서비스


PCP가 제공하는 기능은 표 4-1과 같이 5가지 서비스로 구성된다. 이들은 각각 인증, 기밀성, 압축, 전자우편 호환성, 분할이다.


표 4-1 PGP가 제공하는 기능

기능

알고리즘

설   명

메시지

암호화

IDEA,

RSA

IDEA의 세션키로 메시지를 암호화, RSA는 세션키를 암호화

디지털서명

RSA,

MD5

MD5로 메시지 해쉬코드 생성, RSA로 해쉬코드를 서명

압축

ZIP

ZIP으로 메시지 압축

전자우편

호환성

Radix 64

변환

Radix 64 변환을 이용해 ASCII 부호로 변환

분할

-

분할을 통해 메시지 크기 조정



PGP 기능을 설명하기 위한 아래 그림들에서 사용되는 기호의 의미는 다음과 같다.


: 관용적인 암호 기법에서 사용된 세션키

: 공개키 암호 기법에서 사용된 사용자 A의 비밀키

: 공개키 암호 기법에서 사용된 사용자 A의 공개키

: RSA 알고리즘을 이용한 공개키 암호화

: RSA 알고리즘을 이용한 공개키 복호화

: IDEA를 이용한 관용 암호화

: IDEA를 이용한 관용 복호화

: 해쉬 함수(예로 MD5를 이용)

: 연결

: ZIP 알고리즘을 사용한 압축

: Radix(기수) 64 ASCII포맷으로의 변환


가. 인증


그림 4-1에는 PGP에서 제공되는 전자서명 서비스를 보여준다. 송신자는 메시지를 생성하고 MD5를 사용해 메시지의 128 비트 해쉬 코드를 생성한다, 해쉬 코드는 송신자의 비밀키를 사용해 RSA로 암호화된다. 그리고 그 해쉬 결과는 메시지에 첨부된다. 수신자는 송신자의 공개키와 RSA를 사용하여 해쉬 코드를 복구한다. 수신자는 메시지에 대한 새로운 해쉬 코드를 생성하고 복호화된 해쉬 코드와 이것을 비교한다. 만일 서로 일치하면 인증된 것으로 받아들여진다.


그림 4-1 인증


MD5와 RSA의 결합은 효과적인 전자서명 기법을 제공한다. RSA의 강도 때문에 수신자는 오직 해당하는 비밀키의 소유자만이 서명을 생성할 수 있다는 것을 확신한다. 또한 MD5의 강도 때문에 수신자는 어느 누구도 원래 메시지의 서명문인 해쉬 코드와 일치하는 새로운 메시지를 생성하지 못한다는 것을 확신한다.


나. 기밀성


PGP에 의해서 제공되는 또다른 기본 서비스는 기밀성이다. 이것은 메시지를 암호화하는 것으로 제공된다. 메시지를 암호화하는데 있어서 관용적인 암호화 알고리즘으로 IDEA가 사용된다.IDEA는 128 비트 키를 사용하며, NULL(모두 0) 초기화 벡터(W)를 갖는 IDEA의 64 비트 cipher feedback(CFB) 모드가 사용된다. 관용키는 한번만 사용되고, 새로운 키는 각 메시지에 대해 랜덤한 128 비트의 수로 생성된다. 키가 단지 한번만 사용되며, 세션키는 메시지와 함께 전송된다. 키는 수신자의 공개키로 암호화된다. 그림 4-2는 PGP의 기밀성에 대한 흐름을 보여주고 있다.


그림 4-2 기밀성


송신자는 메시지를 암호하기 위한 세션키로 128 비트의 랜덤 수를 생성하고, 메시지는 IDEA를 사용해서 암호화된다. 세션키는 수신자의 공개키를 사용하여 RSA로 암호화되고 메시지에 첨부된다. 수신자는 자신의 비밀키로 세션키를 복구하고, 복구된 세션키를 사용해 메시지를 복호화한다.

PGP에서의 암호화 특징은 암호화 시간을 줄이기 위해 암호속도가 빠른 IDEA를 이용해 메시지를 암호화하고 안전한 RSA를 사용하여 키를 분배하는 방식을 사용하였으며, 일회용 관용 키들을 사용함으로서 관용암호화의 안전성을 강화시켰다.


다. 기밀성과 인증


그림 4-3과 같이 두 가지 서비스가 같은 메시지에 이용된다. 서명문은 평문 메시지로부터 생성되고 메시지에 첨부된다. 다음에 평문 메시지와 서명문은 IDEA를 이용하여 암호화되고 세션키는 RSA로 암호화된다. 이러한 순서는 메시지의 평문과 함께 서명문을 저장하는 것이 더 편리하고 제삼자 확인을 위해서도 서명이 먼저 수행된다면 제3자는 서명을 확인할 때 관용키에 연관될 필요가 없기 때문에 메시지를 암호화하고 나서 암호화된 메시지의 서명문을 생성하는 것보다 더 좋다. 요약해서 두 가지 서비스 모두가 사용될 때 송신자는 자신의 비밀키로 메시지를 처음으로 서명하고 세션키로 메시지를 암호화한다. 그리고 나서 수신자의 공개키로 세션키를 암호화한다.



그림 4-3 기밀성과 인증


라. 압축


PGP는 서명을 한 후에 메시지를 압축한다. 이것은 파일의 저장과 e-mail 전송의 두 가지 경우에 대해 공간을 절약한다는 장점이 있다.

서명문은 압축된 메시지를 서명하면 검증이 요구될 때 메시지를 다시 압축해야 하기 때문에 서명한 후에 압축해야 한다. 또한 메시지 암호는 암호학적 보안 강도를 높이기 위해 메시지를 압축한 후에 적용된다. 압축된 메시지가 원래의 평문보다 더 작은 중복성을 갖기 때문에 암호 분석가에게는 더욱 어렵게 된다. 압축 알고리듬은 ZIP이 사용된다.


마. 전자우편 호환성


PGP가 사용되면 적어도 전송되는 블록의 일부는 암호화된다. 서명 서비스만 사용된다면 메시지 다이제스트가 암호화되고 기밀성 서비스가 사용되면 메시지와 서명문은 암호화되므로 블록의 일부 또는 전부는 임의의 옥텟 흐름으로 구성된다. 그러나 많은 전자 메일 시스템은 단지 아스키 텍스트 블록만을 사용하므로 PGP는 옥텟 흐름을 인쇄 가능한 아스키문자 흐름으로 변환하기 위해 기수-64 변환법을 사용한다. 기수 64를 사용함으로서 메시지는 33%가 확장되지만 세션키와 메시지의 서명문의 일부가 상대적으로 축소되어있고 평문 메시지는 압축되어져 있다. 기수-64는 입력이 아스키 텍스트로 주어져도 내용에 관계없이 입력 스트림을 기수-64형식으로 무조건 변환한다. 그러므로 메시지가 서명만 되었을 경우에도 어느 정도의 기밀성을 제공한다.


바. 분할


전자우편 프로그램은 대개 50,000 byte 이하의 메시지를 한번에 보낼 수 있다. 그 보다 큰 메시지는 작게 나누어 보내게 되는데 PGP에서는 이러한 동작을 자동으로 행해주고 있다. 또한 분할되어 수신된 메시지를 자동으로 재결합시켜주기 때문에 사용자는 메시지 크기에 상관없이 PGP를 사용할 수 있다.

Posted by 엔시스
TAG PGP