최근 수정 시각 : 2025-04-28 00:32:04

GnuPG


GNU Project
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -6px -1px -10px;"
<colbgcolor=#a32d2a><colcolor=#fff,#fff> 관련 문서 GNU · 자유 소프트웨어 재단 · 리처드 스톨먼
소프트웨어 Bash · GNOME · GNU Emacs · GNU IceCat · GNU/Linux · GNU Octave · GNU Screen · groff · GRUB · Midnight Commander · nano · R · Texinfo
<bgcolor=#a32d2a><color#fff> 유틸리티 coreutils(fileutils · textutils · shellutils) · GNU Grep · GnuPG · GNU Tar
<bgcolor=#a32d2a><color#fff> 개발자 도구 Autotools(autoconf · automake) · binutils(BFD · as · ld · gold · gdb) · GCC · glibc · GNU Make
라이선스 GNU 일반 공중 사용 허가서 · GNU 약소 일반 공중 사용 허가서 · GNU Affero 일반 공중 사용 허가서
기타 GNU Unifont
취소선: 독립한 프로젝트
}}}}}}}}} ||
1. 개요2. 상세3. 알고리즘4. pinentry5. 관련 문서

1. 개요

Gnu Privacy Guard, GPG

PGP오픈 소스 구현판이다. OpenPGP 표준을 다루는 RFC4880을 구현한다.

2. 상세

GNU 소프트웨어이며, 보안 통신을 위한 도구다. 키 교환 및 확인, 문서 암호화 및 암호 해독, 디지털 서명 문서인증이 포함된다. 그리고 독일 정부의 후원을 받고 있다. 2015년 6월 기준으로, 페이스북에서 이걸 이용해서 비밀번호 재설정 링크 같은 민감한 정보를 암호화해 보내기로 했다고 한다.

GnuPG는 개인 정보를 보호하기 위해 사용하는 도구다. 다른 사람과 연락할 수 있으면 개인 정보가 보호된다.
  • GnuPG 사용 사용자 지정 네 가지 참고
    • 공개/개인 키 쌍[1]의 키 크기 선택
    • 개인 키 보호
    • 만료 날짜 선택 및 하위 키 사용
    • 신뢰 웹 관리
잘 선택된 키 크기는 암호화된 메시지에 대한 무차별 대입 공격으로부터 사용자를 보호해준다. 개인 키는 공격자가 단순히 개인 키를 사용하여 암호화된 메시지를 해독하고 서명하는 것을 방지한다.

GnuPG에서 키 관리의 핵심은 키 서명 개념이다. 열쇠 서명에는 두 가지 주요 목적이 있다. 키링에 대한 변조를 감지할 수 있도록 허용하고 인증할 수 있고, 키는 실제로 키의 사용자 ID로 명명된 사람에게 들어간다. 키 서명은 스키마에도 사용된다.

3. 알고리즘

GnuPG 2.4 [2]기준으로, GnuPG는 다음 알고리즘을 지원한다:

4. pinentry

pinentry파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg

gpg-agent에서 안전하게 passphrase 입력을 전달받기 위한 외부 인터페이스. 일반적으로 gpg는 사용자로부터 비밀번호를 절대로 직접 입력받지 않으며, 대신 pinentry라는 사전 설정된 외부 프로세스를 호출해 이를 대신 전달받게 된다.

서버 또는 셸 로그를 통한 비밀번호 누수나 유출, 중간자 키 하이재킹 등의 리스크를 피하기 위해 명령줄이나 환경변수, 개별 응용 프로그램 내에서 직접 타이핑하는 방식은 절대 권장되지 않는다. 예를 GPG를 사용하는 이메일 클라이언트의 입력 폼에 GPG 비밀번호를 입력한다고 해보자. 이 비밀번호가 실제로 GPG로 전달되는지, 중간에 기록되거나 악의적인 서버로 전송, 조작되지는 않는지 절대 확인할 방법이 없다. 더 안전한 방법은 신뢰할 수 없는 이메일 클라이언트가 아니라 사용자가 신뢰할 수 있는 pinentry를 별도로 열어 GPG에게 직접 전달하는 것으로, 이렇게 하면 일반적인 중간자 공격을 대비할 수 있다.

일반적으로 개별 GUI 환경에 맞는 네이티브 다이얼로그 형태이며, 서버 환경의 경우 TUIpinentry-curses 등을 사용할 수 있다. no pinentry 에러가 발생한다면 gpg-agent.confpinentry-program <경로>로 설정하고 gpg-connect-agent reloadagent /bye로 에이전트를 재시작해 주어야 한다.
  • 서버(headless) 환경
    • pinentry-tty
    • pinentry-curses
  • GUI 환경
    • pinentry-gtk2
    • pinentry-qt
    • pinentry-mac
    • pinentry-gnome
    • pinentry-tqt
    • pinentry-efl
    • pinentry-fltk

5. 관련 문서


[1] 키 쌍에는 공개 키와 개인 키가 있다. 각 조각에는 자체에 대한 데이터가 포함된다.[2] https://www.gnupg.org/documentation/manuals/gnupg24/gpg.1.html[3] 2.1에 추가, 2.3부터 ed25519가 기본으로 사용[4] 1.4.13/2.0.20부터 지원[5] 1.4.10/2.0.12부터 지원