OpenPGP 키 검사기 & 패킷 파서

아머된 OpenPGP 키, 서명 또는 메시지를 붙여넣으세요 — 또는 바이너리 .gpg 파일을 불러오세요 — 그러면 지문, 키 ID, 사용자 ID, 서브키, 서명 패킷, 원시 패킷 트리를 보여 드립니다. 완전히 브라우저 안에서; 아무것도 업로드되지 않습니다.
파서 전용. 이 도구는 OpenPGP 데이터를 해독해 표시합니다 — 서명을 암호학적으로 검증하지 않고, 복호화하지 않으며, 암호 문구를 요구하지 않습니다. 실제로 검증하거나 복호화하려면 자신의 키링과 함께 GnuPG(gpg --verify, gpg -d)를 쓰세요. 그리고 모든 도구가 그렇듯: 실제 개인 키는 브라우저 탭이 아니라 키링에 있어야 합니다.
모든 아머 형식을 받습니다: PUBLIC KEY BLOCK, PRIVATE KEY BLOCK, MESSAGE, SIGNATURE, ARMORED FILE.
바이너리 키링 내보내기 / .sig / .gpg — 로컬에서 읽음, 절대 업로드 안 됨
이 도구가 검사하는 것 — 그리고 의도적으로 하지 않는 것
아머를 해독하고(레이블, 헤더, base64 페이로드, CRC-24 전송 체크섬), 구형과 신형 헤더 형식의 모든 패킷을 파싱하며, v4/v5/v6 키 패킷을 읽고(알고리즘, MPI 크기, 생성 시각), v4 지문(SHA-1)과 v6 지문(SHA-256)을 계산하고, 키 ID를 유도하며, 사용자 ID, 서브키, 서명 서브패킷을 나열합니다. 서명 검증(전체 RFC 9580 §5.2.4 해시-검증 장치와 신뢰하는 키링 필요), 복호화, 키 서버 조회는 하지 않습니다. 어떤 출력이든 GnuPG로 교차 확인하세요: gpg --show-keys file.asc가 지문과 사용자 ID를 출력하고 gpg --list-packets file.asc가 패킷 구조를 덤프합니다.
이 페이지의 샘플 키 — 네 개의 샘플 버튼은 이 페이지만을 위해 생성된(어디에도 쓰이지 않은) 실제 RSA-2048 OpenPGP v4 키를 붙여넣습니다. 개인 키 샘플은 파서가 비밀 MPI 배치를 보여 줄 수 있도록 일부러 암호화 없이(S2K usage 0) 저장되어 있습니다. 실제 내보낸 개인 키라면 암호와 S2K 유도가 대신 표시될 것입니다.
자체 테스트
내장 샘플 키, 분리 서명, 서명된 메시지에 대해 파서를 재구동합니다: 아머 레이블, CRC-24 통과와 고의 손상, 패킷 태그 시퀀스, 독립 계산값과 대조하는 v4 지문과 키 ID, 사용자 ID, 서브키 지문, 비밀 키 감지, 부정 테스트(쓰레기 입력과 잘린 패킷은 거부되어야 함). 아무것도 전송되지 않습니다.
OpenPGP 처음부터 설명
한 문장으로: OpenPGP는 종단 간 암호화와 디지털 서명을 위한 개방 표준(RFC 4880, 2024년 RFC 9580로 갱신)이며, 가장 유명하게는 이메일 보호에 쓰입니다 — 모든 것은 보통 텍스트 친화적인 "아머" 층으로 싸인, 작고 레이블 붙은 바이너리 패킷으로 전달됩니다.
OpenPGP란 무엇인가?

PGP("Pretty Good Privacy")는 Phil Zimmermann이 1991년에 누구나 메시지를 암호화하고 서명할 수 있는 프로그램으로 내놓았습니다. 단일 벤더 문제를 피하려고 메시지 형식이 OpenPGP로 표준화되었습니다(1998년 RFC 2440, 2007년 RFC 4880, 2024년 RFC 9580). 오늘날 가장 흔한 구현은 GnuPG이고, 같은 패킷 형식은 서명된 git 커밋, 소프트웨어 패키지 서명, 키 서버, OPENPGPKEY DNS 레코드에도 나타납니다.

모델은 종단 간입니다: 양측이 각자 개인 키 쌍을 생성합니다. 수신자에게 암호화된 것은 기기를 떠나지 않는 개인 키로만 복호화될 수 있습니다. 중앙 인증 기관(TLS처럼) 대신, 다른 사람의 키에 대한 신뢰는 서로 키에 서명하는 것에서 옵니다 — "신뢰의 그물(web of trust)"입니다. 그 그물을 쓸지, 아니면 그냥 대역 밖(전화 통화, 명함)에서 지문을 비교할지는 당신의 선택입니다. 형식 자체는 어느 쪽도 강제하지 않습니다.

OpenPGP 키란 무엇인가?

OpenPGP "키"는 사실 작은 패킷 묶음입니다: 하나의 기본 키 패킷(신원 닻, 보통 서명만 허용), 하나 이상의 사용자 ID 패킷("Alice <alice@example.com>"), 그 ID를 기본 키에 묶는 자기 서명, 그리고 선택적으로 자체 결합 서명을 가진 서브키 — 보통 귀한 기본 키를 오프라인에 둘 수 있도록 별도의 암호화 서브키를 둡니다. 이 페이지에 붙여넣는 아머 블록 전체가 바로 그 묶음입니다.

지문은 기본 키 패킷의 해시입니다 — v4 키는 SHA-1(20바이트), v6 키는 SHA-256(32바이트) — 공개 부분만으로 계산됩니다. 키 ID는 v4 지문의 마지막 8바이트(v5는 첫 8바이트)일 뿐입니다. 지문은 키가 오는 길에 바뀌지 않았는지 대역 밖에서 비교하는 것이고, 키 ID는 키 서버용 짧은 손잡이일 뿐 결심한 공격자에 대한 충돌 안전성은 없습니다.

알고리즘 ID이름키에서의 전형적 용도
1RSA고전 만능형; 2048–4096비트, 서명 및/또는 암호화
19ECDSANIST 곡선(P-256 등), 서명
18ECDHCurve25519/P-256 키 합의, 암호화 서브키
22EdDSAEd25519 서명(GnuPG 2.4+의 현대적 기본값)
25X25519Ed25519 기본 키와 짝지은 암호화 서브키(v6 키)

개인 키 블록은 공개 부분 뒤에 비밀 숫자를 실습니다: 어떻게 보호되는지 말하는 S2K usage 옥텟(0 = 무보호, 254/255 = 암호 문구 유도 키와 암호), 그리고 비밀 MPI와 체크섬. 이 페이지는 보호 모드를 표시하지만 암호 문구를 요구하지 않고 비밀 자료의 복호화를 시도하지 않습니다.

OpenPGP 패킷이란 무엇인가?

아머 아래에서 모든 OpenPGP 객체는 패킷의 연속입니다. 각 패킷은 태그 바이트로 시작합니다: 구형 형식은 4비트 패킷 타입과 길이 타입을, 신형 형식(CTB, 비트 6 설정)은 6비트 타입과 부분 청크 데이터까지 기술할 수 있는 길이 바이트를 씁니다. 흔한 태그: 6 = 공개 키, 5 = 비밀 키, 14 = 서브키, 13 = 사용자 ID, 2 = 서명, 4 = 원패스 서명, 11 = 리터럴 데이터, 8 = 압축 데이터, 18 = 암호화+MDC 보호 데이터. 이 페이지는 찾은 모든 패킷의 태그, 헤더 형식, 길이, hex 덤프를 출력하고, 패킷 헤더가 잘못되면 바이트 위치와 함께 오류를 냅니다.

서명 패킷은 메타데이터를 해시된 영역과 해시되지 않은 서브패킷 영역에 실습니다. 해시된 영역만 서명으로 보호됩니다. 해시되지 않은 영역(역사적으로 발급자 키 ID에 쓰임)은 전송 중 누구나 자유롭게 다시 쓸 수 있으므로, 읽는 쪽은 사실이 아니라 힌트로 대해야 합니다. 사용자 ID의 자기 서명이 실제로 이름을 키에 묶는 것입니다. 패킷 하나만 떼어 붙여넣은 키 패킷은 소유자가 누구인지 아무것도 증명하지 않습니다.

ASCII 아머는 텍스트 포장입니다: -----BEGIN PGP PUBLIC KEY BLOCK-----, Version:나 Comment: 같은 선택적 헤더, 패킷 스트림의 base64, 그리고 24비트 CRC를 담은 마지막 =xxxx 줄. 그 CRC는 전송 손상만 잡습니다 — base64 글자 하나를 뒤집으면 이 페이지가 표시합니다 — 하지만 서명이 아니며 저작에 관해 아무것도 증명하지 않습니다.

흔한 오해
  • 지문을 비교하지 않고 키 신뢰하기. 누구든 어떤 이름으로든 키를 만들 수 있습니다. 이미 신뢰하는 채널(대면, 전화)로 하는 지문 비교가 인증 단계의 전부입니다.
  • 아머 CRC를 서명과 혼동하기. "CRC OK" 배지는 base64가 무사히 왔다는 뜻, 그 이상은 아닙니다. 검증은 이 페이지가 의도적으로 수행하지 않는 암호학적 연산입니다.
  • 키 ID를 신원으로 쓰기. 64비트 키 ID는 수준급이 아니라도 쓸 만한 계산력의 공격자가 위조할 수 있습니다("키 ID 충돌"). 항상 전체 지문을 인용하세요.
  • 실제 개인 키를 웹 페이지에 붙여넣기. 이 페이지처럼 로컬에서 업로드 없이 동작하는 페이지조차 들이고 싶지 않은 습관입니다. 여기 샘플은 데모용으로 생성한 쓰고 버리는 키입니다.
  • "PGP MESSAGE"는 암호화되었다고 가정하기. 아머 레이블은 내용에 대해 아무 말도 하지 않습니다 — 이 페이지의 샘플 메시지는 서명되었지만 평문이며, 암호화 데이터와 리터럴 데이터를 실제로 구분하는 것은 패킷 태그 18 대 11입니다.
  • v3 키 가져오기. 버전 3 키(1996년 이전 설계, 약한 16비트 키 ID)는 2014년부터 폐기되었습니다. 이 검사기는 일부러 거부합니다.
FAQ

서명을 검증하나요? 아니요. 파싱하고 표시만 합니다. 서명 검증에는 전체 RFC 9580 해시-트레일러 구성, 서명자의 공개 키, 그리고 그 키를 신뢰할지에 대한 결정이 필요합니다 — GnuPG나 OpenPGP 라이브러리의 일입니다.

openpgp.js와 뭐가 다른가요? openpgp.js는 앱에 넣는 완전한 구현(암호화, 복호화, 서명, 검증)입니다. 이 페이지는 브라우저에서 OpenPGP 구조를 읽고 감사하는, 의존성 없는 검사기입니다.

제 GnuPG 내보내기를 읽을 수 있나요? 네 — v4, v5, v6 키, 분리 서명과 메시지입니다. 버전 3 키는 메모와 함께 거부됩니다(2014년부터 폐기).

hex 입력 모드가 왜 있죠? 원시 OpenPGP 데이터는 바이너리입니다. 키링이나 .gpg 파일의 hex 덤프가 있다면 그 hex를 붙여넣으세요. 파서가 디코딩된 바이트와 똑같이 취급합니다.

뭔가 업로드되나요? 아니요. 파싱, 지문 계산, 보고서 생성이 모두 이 탭에서 일어납니다. 페이지는 완전히 브라우저에서 동작합니다.