GNU Privacy Guard
GNU 프라이버시 가드(GNU Privacy Guard, GnuPG 또는 GPG)는 PGP를 대체하는 자유 소프트웨어이다. GnuPG는 오픈피지피 표준을 다루는 RFC 4880 를 만족한다. 현재 버전의 GPG는 GnuPG나 다른 오픈PGP 호환 프로그램과 상호 운용이 가능하다.
GnuPG는 자유 소프트웨어 재단의 GNU 소프트웨어에 속하고, 독일 정부의 주요 재정 후원을 받고 있다. GnuPG는 GPL3 라이선스로 배포된다.
How to install
macOS:
Ubuntu:
Generate a GPG key pair
위 명령이 작동하지 않으면 아래와 같이 대체할 수 있다.
Listing
공개키 목록:
개인키 목록:
키를 구분할 때 적는 검색어를 keyspec이라고 하겠습니다.
GPG 키 제거
특정 키를 제거하려면 다음 명령어를 사용합니다.
키를 이용한 파일 암호화와 복호화
$ mkfile 10m foo.file
## (공개키를 이용해) foo.file 파일을 암호화한다. foo.file.gpg 파일이 생성된다.
$ gpg --encrypt --recipient 'WindyHana' foo.file
## (개인키를 이용해) foo.file.gpg 파일을 복호화한다. 개인키의 암호문(Passphrase)를 입력해야 한다.
$ gpg --output foo.file --decrypt foo.file.gpg
You need a passphrase to unlock the secret key for
user: "WindyHana (WindyHana's PGP Key) <[email protected]>"
2048-bit RSA key, ID A31CE3EB, created 2014-09-11 (main key ID CBE16837)
Enter passphrase:
gpg: encrypted with 2048-bit RSA key, ID A31CE3EB, created 2014-09-11
"WindyHana (WindyHana's PGP Key) <[email protected]>"
Export the GPG key
다른 사람이 내 파일을 암호화할 수 있도록 공개키를 공유해야 합니다.
$ gpg --output mygpgkey_pub.gpg --armor --export [KEYSPEC]
$ gpg --output mygpgkey_sec.gpg --armor --export-secret-key [KEYSPEC]
Import the GPG key
파일을 암호화하려면 다른 사람의 공개키를 사용해야 합니다. 만약 공개키가 없다면 해당 공개키를 먼저 가져와야 합니다.
Troubleshooting
Not enough random bytes availabe
docker에서 gpg 개인키를 생성할 때, 랜덤 바이트가 부족하다는 메세지를 출력하고 더이상 진행이 되지 않는다. 난수를 발생시키기 위해서 키보드나 마우스를 움직이라고 하는데 아무리 키보드를 두드려도 다음으로 진행이 되지 않는다.
Not enough random bytes availabe. Please do some other work to give the OS a chance to collect more entropy!(Need 275 more bytes)
- 문제 원인
- 위와 같은 문제는 GPG로 키를 만들 때 난수를 발생을 디바이스의 노이즈를 사용하여 엔트로피를 채워 만드는 방식을 사용하는데 엔트로피가 채워지기까지 block이 걸리는 것이다. 데스크탑일 경우는 마우스나 키보드를 입력하면 되지만 서버일 경우 키보드나 마우스가 존재하지 않기 때문에 엔트로피가 채워지기까지 시간이 오래 걸린다. 이때 시스템에서
/dev/random
파일을 읽어서 처리한다. - 이 문제를 해결하기 위해서 rng-tools(Random Number Generator)을 사용하여 데몬으로
/dev/random
파일을 업데이트하여 사용하는 방법이 있다.
:
- 하지만 이 방법을 사용해도 행아웃에 걸려 오랜 시간을 걸려도 다음으로 진행이 되지 않는 것을 볼 수 있다.
- 문제 해결하기
- 앞에서 난수를 발생하기 위해
/dev/random
을 사용해서 엔트로피 풀을 채워서 사용하기 때문에 block이 발생한다고 했는데, 이와 다르게 non block으로 사용할 수 있는/dev/urandom
으로 엔트로피 풀이 차지 않아도 난수를 발생할 수 있다. urandom은 unlimited를 뜻한다. 두가지는 비슷한 역활을 가지는 파일이지만/dev/random
이/dev/urandom
보다 보안적으로 깨어질 확률이 더 적어서 안전하다고 볼 수 있다. - docker 환경에서
/dev/random
을/dev/urandom
으로 사용할 수 있도록 변경한다. (실제 어떤 시스템은 이 두가지를 심볼릭링크로 만들어져 있는 것을 확인할 수 있다.)
:
See also
- Pretty Good Privacy (PGP)
- Privacy
- ots - 1회성 URL로 e2e 암호화된 Secret 공유하기
Favorite site
- GnuPG
- Wikipedia (en) GNU Privacy Guard
- [추천] Github help - Generating a new GPG key
- HOWTO: GPG sign and verify deb packages and APT repositories 1 (GPG, APT)
- GnuPrivacyGuardHowto - Community Help Wiki
- [추천] PGP, GnuPG - 윈디하나의 솔라나라
Stuff stuff - GnuPG
01~07 Local file download: Stuff_stuff_-GnuPG-_01-07.zip
References
-
HOWTO_-GPG_sign_and_verify_deb_packages_and_APT_repositories-_Packagecloud_Blog.pdf ↩