Key Server - keys.openpgp.org
- OpenPGP key-server와 keys.openpgp.org
- 1. key-server의 목적
- 2. OpenPGP key-server의 기본 특성
- 3. keys.openpgp.org의 설계 철학
- 4. key-server에서의 key upload
- 5. key-server에서의 email UID 검증
- 6. 키의 동일성 판단 기준
- 7. key-server와 키 역할 플래그의 관계
- 8. key-server에서의 update
- 9. revert(되돌리기)가 불가능한 이유
- 10. Revocation(폐기 선언)과 key-server
- 11. key-server에서의 만료(expire)
- 12. key-server 관점에서의 최종 정리
OpenPGP key-server와 keys.openpgp.org
1. key-server의 목적
key-server 는 OpenPGP 환경에서
- public keys(public primary key 와 public subkey)를
- distribution (배포)하고
- search (검색)하기 위한 서버.
key-server의 존재 목적은 다음과 같다.
- public keys (공개키)를 중앙에서 공유할 수 있게 한다.
- 특정 사용자의 public keys를 쉽게 찾을 수 있게 한다.
- public keys의 변경 사항을 다른 사용자에게 전달한다.
중요한 점은 다음과 같다.
key-server는 public keys 만을 다루며, private key(개인키)는 어떠한 경우에도 저장하거나 처리하지 않음.
2. OpenPGP key-server의 기본 특성
2.1 public key만 취급한다
key-server에 업로드(upload)되는 정보는 다음으로 제한됨.
- primary key
- subkey
- UID(User ID)
- 키 역할 플래그(key usage flags)
- 만료 정보(expire date)
- 폐기 정보(revocation)
private key 들은 key-server 가 다루는 범위에 포함되지 않음.
2.2 key-server는 "사람"이 아니라 "key"를 관리한다
key-server는 사용자 계정(account)을 기준으로 동작하지 않음.
대신 다음을 기준으로 key를 식별한다.
- primary key fingerprint
즉,
- email 주소는 식별 기준이 아니다.
- 사용자 이름은 식별 기준이 아니다.
- 오직 키 자체가 기준이 된다.
3. keys.openpgp.org의 설계 철학
keys.openpgp.org는 기존 OpenPGP key-server의 문제점을 해결하기 위해 설계됨.
3.1 기존 key-server의 문제점
전통적인 key-server(OpenPGP HKP 서버)는 다음과 같은 문제를 가졌다.
- 허위 UID(email) 등록이 매우 쉬움.
- 스팸 UID 대량 삽입 가능.
- key 정보 오염(key poisoning)이 발생하기 쉬움.
- key 삭제가 사실상 불가능.
3.2 keys.openpgp.org의 접근 방식
이를 개선하기 위해 keys.openpgp.org는 다음과 같은 정책을 채택:
- email 검증(email verification) 을 통해 UID를 제한.
- Web of Trust 서명을 서버에서 제거함.
- 검증된 UID만 검색 가능하게 처리.
이로 인해 keys.openpgp.org는
- "신뢰 계산"이 아니라
- "key 배포"에 집중하는 서버로 동작.
4. key-server에서의 key upload
4.1 Upload의 의미
key-server에 public key를 upload한다는 것은 다음을 의미:
"현재 public key의 상태를 서버에 등록(register) 하거나 갱신(update) 한다"
이는 key 를 생성하는 행위가 아님.
만든 key 를 upload.
4.2 Upload되는 정보의 범위
Upload 시 서버에 전달되는 정보는 다음과 같음:
- primary key와 subkey 구조
- 각 키의 역할 플래그(
[SC],[S],[E],[A]) - UID 목록
- 만료 정보
- 폐기 정보
이 정보는 이후 다른 사용자가 키를 받을 때 그대로 전달된다.
5. key-server에서의 email UID 검증
5.1 UID와 email의 의미
public key에는 UID(User ID) 가 포함되며, 일반적으로 다음 형태를 가짐.
이름 <email@example.com>
이 email 주소는 다음을 주장(claim) 하는 역할임.
"이 key는 이 email 주소의 소유자의 key이다."
5.2 keys.openpgp.org의 email 검증
keys.openpgp.org는 이 주장을 그대로 신뢰하지 않음.
따라서 다음 절차를 수행하여 검증함:
- public key에 포함된 email 주소로 인증 메일을 전송.
- 해당 메일의 링크를 클릭해야 keyserver에 인증된 UID로 활성화시킴.
결과적으로:
- 인증된
UID=> 검색 가능 - 인증되지 않은
UID=> 서버에는 해당 public key는 존재하나 검색 불가
6. 키의 동일성 판단 기준
key-server에서 같은 key인지 여부는 다음 기준으로 판단된다.
- primary key fingerprint
이 기준에 따라 다음과 같이 처리된다.
- fingerprint가 같으면 => 같은 키의 업데이트(update) => 이메일 인증 처리 없음.
- fingerprint가 다르면 => 완전히 다른 키 => 추가를 위한 이메일 인증 처리 요구.
email 주소가 같더라도 fingerprint가 다르면 서로 다른 키이다.
7. key-server와 키 역할 플래그의 관계
key-server는 키의 역할(role) 을 해석하거나 변경하지 않음.
다만, public key에 포함된 키 역할 플래그(key usage flags) 를 그대로 저장/배포한다.
주요 역할 플래그
S(Sign, 서명) 서명 생성에 사용C(Certify, 인증) 다른 키와 UID를 인증 (키와 UID가 본인 것임을 인증)E(Encrypt, 암호화) 데이터 암호화A(Authenticate, 인증) 로그인 및 인증 (자기가 자신을 증명)
특히,
- primary key는 보통
[SC]역할을 가진다. - subkey는
[S],[E],[A]중 하나를 가진다.
key-server는 이 정보를 변경하지 않으며, 클라이언트가 이를 해석하여 사용한다.
8. key-server에서의 update
같은 키(primary key fingerprint 동일)를 다시 업로드하면,
key-server는 이를 업데이트(update) 로 처리한다.
update를 통해 갱신되는 정보는 다음과 같음:
- subkey 추가 또는 변경
- 만료일 변경
- 폐기 정보 추가
key-server는 “과거 상태”로 되돌리는 기능(revert)을 제공하지 않는다.
9. revert(되돌리기)가 불가능한 이유
OpenPGP key-server는 누적 모델(append-only model) 을 따른다.
- 한 번 공개된 정보는 삭제되지 않는다.
- revocation (폐기정보)는 취소가 불가함.
- revert(되돌리기)는 개념적으로 아예 존재하지 않음.
key-server에서 가능한 조작은 다음으로 제한됨:
새로운 정보를 추가하여 key 의 현재 상태를 변경하는 것
10. Revocation(폐기 선언)과 key-server
Revocation 은 key-server에서 매우 중요한 정보이다.
- 폐기된 key는 서버에서 “무효”로 표시된다.
- key는 여전히 다운로드 가능하지만, 제대로 된 클라이언트에서 이의 사용을 거부하는 방식임.
- 이는 삭제가 아니라 영구적인 신뢰 중단 선언 에 해당함.
참고: [[gpg_term#11-revoation–revoke-폐기]]
11. key-server에서의 만료(expire)
expire date(만료일) 정보는 key-server 는 key의 정보를 제출한 당시 그대로 배포됨.
- 만료된 key는 서버에서 삭제되지 않음.
- 클라이언트가 이를 해석하여 사용 여부를 결정하는 방식임.
- 만료일 변경은 업데이트를 통해 반영 가능함 (key-server 에 업데이트를 안하면 갱신 안 됨).
12. key-server 관점에서의 최종 정리
- key-server는 public key만을 다룬다.
- key-server는 사용자 계정을 관리하지 않음.
- key의 정체성은 primary key fingerprint로 결정됨.
- email UID는 검색 가능 여부를 제어할 뿐이다.
- key 역할 플래그는 서버가 해석하지 않고 그대로 배포.
- 같은 key 재업로드는 업데이트로 처리된다.
- revert(되돌리기)는 불가능하다.
- 폐기는 revoke(폐기 선언)로 표현된다.
- key-server는 신뢰를 판단하지 않고, 업데이트된 정보를 전달할 뿐임.