Linux에서 GPG를 사용하여 파일을 암호화하고 해독하는 방법

최고 수준의 암호화 기술을 활용하여 중요한 정보를 안전하게 보호하십시오. GPG를 사용하여 키를 관리하고, 파일을 암호화하고 해독하는 방법을 살펴보겠습니다.

GNU Privacy Guard(GPG)는 파일을 암호화하여 지정된 수신자만 해독할 수 있도록 합니다. GPG는 OpenPGP 표준을 따르며, 이는 PGP(Pretty Good Privacy)에 기반합니다. PGP는 1991년 Phil Zimmermann에 의해 개발되었습니다.

GPG는 각 사용자가 두 개의 암호화 키를 가진다는 개념에 기반합니다. 개인 키와 공개 키입니다. 공개 키는 개인 키로 암호화된 데이터를 해독하는 데 사용됩니다.

파일을 안전하게 전송하려면 개인 키와 수신자의 공개 키를 사용하여 파일을 암호화해야 합니다. 파일을 해독하려면 수신자의 개인 키와 발신자의 공개 키가 필요합니다.

이러한 방식에서 공개 키를 공유해야 한다는 것을 알 수 있습니다. 파일을 암호화하려면 수신자의 공개 키가 필요하며, 수신자는 파일을 해독하기 위해 귀하의 공개 키가 필요합니다. 공개 키를 공개하는 데에는 위험이 없습니다. 실제로 공개 키 서버가 존재합니다. 개인 키는 반드시 비공개로 유지해야 합니다. 공개 키가 공개적으로 사용 가능한 경우 개인 키를 안전하게 유지하는 것이 중요합니다.

GPG를 사용하는 것은 설정하는 데 약간의 단계를 거쳐야 합니다. 다행히도, 일반적으로 한 번만 설정하면 됩니다.

키 생성하기

gpg 명령은 Ubuntu, Fedora, Manjaro 등 대부분의 Linux 배포판에 기본적으로 설치되어 있습니다.

GPG를 이메일과 함께 사용할 필요는 없습니다. 파일을 암호화하여 다운로드하거나 물리적으로 전달할 수도 있습니다. 하지만 생성된 키와 이메일 주소를 연결해야 하므로 사용할 이메일 주소를 선택하십시오.

다음은 키를 생성하는 명령입니다. --full-generate-key 옵션은 터미널 창에서 대화형으로 키를 생성합니다. 또한 암호를 입력하라는 메시지가 표시됩니다. 암호를 잊지 않도록 주의하십시오. 구두점으로 연결된 세네 개의 간단한 단어는 강력한 암호 생성 방법입니다.

gpg --full-generate-key

메뉴에서 암호화 유형을 선택하라는 메시지가 표시됩니다. 특별한 이유가 없으면 1을 입력하고 Enter 키를 누르십시오.

암호화 키의 비트 길이를 선택해야 합니다. Enter 키를 눌러 기본값을 적용합니다.

키가 유효해야 하는 기간을 지정해야 합니다. 시스템을 테스트하는 경우 5일과 같이 짧은 기간을 입력할 수 있습니다. 이 키를 계속 사용하려면 1년과 같이 더 긴 기간을 입력합니다. 키는 12개월 동안 유효하며, 1년 후에는 갱신해야 합니다. Y를 입력하여 선택을 확인합니다.

이름과 이메일 주소를 입력해야 합니다. 원한다면 주석을 추가할 수도 있습니다.

암호를 입력하라는 메시지가 나타납니다. 키를 사용할 때마다 암호가 필요하므로 암호를 기억해야 합니다.

암호를 입력한 후에는 확인 버튼을 누릅니다. GPG를 사용할 때마다 이 창이 나타나므로 암호를 기억해야 합니다.

키 생성이 완료되면 명령 프롬프트로 돌아갑니다.

해지 증명서 생성하기

개인 키가 노출되면 이전 키와 ID 연결을 해제하고 새 키를 생성해야 합니다. 이를 위해서는 해지 증명서가 필요합니다. 지금 생성하여 안전한 곳에 보관하겠습니다.

--output 옵션 뒤에는 생성하려는 증명서의 파일 이름이 와야 합니다. --gen-revoke 옵션은 GPG에게 해지 증명서를 생성하도록 합니다. 키를 생성할 때 사용한 이메일 주소를 제공해야 합니다.

gpg --output ~/revocation.crt --gen-revoke [email protected]

증명서를 생성할지 묻는 메시지가 나타납니다. Y를 누르고 Enter 키를 누릅니다. 증명서를 생성하는 이유를 묻는 메시지가 나타납니다. 미리 수행하고 있으므로 정확한 이유를 알 수 없습니다. 추측으로 1을 누르고 Enter 키를 누릅니다.

원한다면 설명을 추가할 수 있습니다. Enter 키를 두 번 눌러 설명을 완료합니다.

설정을 확인하라는 메시지가 나타나면 Y를 누르고 Enter 키를 누릅니다.

증명서가 생성됩니다. 이 증명서를 안전하게 보관해야 한다는 메시지가 표시됩니다.

맬로리라는 사람이 언급됩니다. 암호화 논의는 오랫동안 밥과 앨리스라는 두 사람이 통신하는 방식으로 사용되었습니다. 다른 지원 캐릭터가 있습니다. 이브는 도청자이고 맬로리는 악의적인 공격자입니다. 우리가 알아야 할 것은 증명서를 안전하게 보관해야 한다는 것입니다.

적어도 증명서에서 우리를 제외한 모든 권한을 제거하겠습니다.

chmod 600 ~/revocation.crt

ls 명령을 사용하여 현재 권한을 확인해 봅시다.

ls -l

완벽합니다. 파일 소유자인 우리 외에는 누구도 증명서를 사용할 수 없습니다.

다른 사람의 공개 키 가져오기

다른 사람이 해독할 수 있는 메시지를 암호화하려면 상대방의 공개 키가 필요합니다.

파일로 키를 받은 경우 다음 명령을 사용하여 가져올 수 있습니다. 이 예에서 키 파일의 이름은 “mary-geek.key”입니다.

gpg --import mary-geek.key

키를 가져오면 키와 연결된 이름과 이메일 주소가 표시됩니다. 당연히, 키를 보내온 사람과 일치해야 합니다.

키가 필요한 사람이 공개 키 서버에 키를 업로드했을 수도 있습니다. 이 서버들은 전 세계 사람들의 공개 키를 저장합니다. 키 서버는 키를 보편적으로 사용할 수 있도록 주기적으로 동기화합니다.

MIT 공개 키 서버는 널리 사용되는 키 서버이며 정기적으로 동기화되므로 검색에 성공할 수 있습니다. 최근에 키를 업로드한 경우 표시되는 데 며칠이 걸릴 수 있습니다.

--keyserver 옵션 뒤에는 검색할 키 서버의 이름이 와야 합니다. --search-keys 옵션 뒤에는 검색하는 사람의 이름이나 이메일 주소가 와야 합니다. 이메일 주소를 사용하겠습니다.

gpg --keyserver pgp.mit.edu --search-keys [email protected]

일치하는 항목이 번호와 함께 나열됩니다. 가져오려면 번호를 입력하고 Enter 키를 누릅니다. 이 경우 일치하는 항목이 하나뿐이므로 1을 입력하고 Enter 키를 누릅니다.

키를 가져오고 키와 연결된 이름과 이메일 주소가 표시됩니다.

키 확인 및 서명

아는 사람이 공개 키 파일을 직접 전달했다면 해당 파일이 그 사람의 것이라고 확신할 수 있습니다. 공개 키 서버에서 다운로드한 경우 해당 키가 실제로 해당 사용자의 것인지 확인해야 할 필요가 있습니다.

--fingerprint 옵션을 사용하면 GPG가 4개의 16진수 문자 10세트로 구성된 짧은 시퀀스를 생성합니다. 해당 키의 지문을 보내달라고 요청할 수 있습니다.

그런 다음 --fingerprint 옵션을 사용하여 동일한 16진수 지문을 생성하여 비교할 수 있습니다. 일치하면 키가 해당 사용자의 것입니다.

gpg --fingerprint [email protected]

지문이 생성됩니다.

키가 진짜이고 해당 키와 연결되어야 할 사람이 소유하고 있는지 확인되면 키에 서명할 수 있습니다.

이 작업을 수행하지 않더라도 해당 사람과 주고받는 메시지를 암호화하고 해독하는 데 계속 사용할 수 있습니다. 하지만 GPG는 키에 서명되지 않았기 때문에 매번 계속할지 묻습니다. --sign-key 옵션을 사용하여 키에 서명하고 GPG가 서명할 키를 알 수 있도록 사람의 이메일 주소를 제공합니다.

gpg --sign-key [email protected]

키와 해당 사용자에 대한 정보가 표시되고 키에 서명할지 묻는 메시지가 나타납니다. Y를 누르고 Enter 키를 눌러 키에 서명합니다.

공개 키를 공유하는 방법

키를 파일로 공유하려면 GPG 로컬 키 저장소에서 키를 내보내야 합니다. 이렇게 하려면 키를 생성하는 데 사용한 이메일 주소가 뒤에 와야 하는 --export 옵션을 사용합니다. --output 옵션 뒤에는 키를 내보낼 파일의 이름이 와야 합니다. --armor 옵션은 GPG에게 바이너리 파일 대신 ASCII 텍스트 출력을 생성하도록 지시합니다.

gpg --output ~/dave-geek.key --armor --export [email protected]

less 명령을 사용하여 키 파일 내부를 살펴볼 수 있습니다.

less dave-geek.key

키가 모든 내용과 함께 표시됩니다.

공개 키 서버에서 공개 키를 공유할 수도 있습니다. --send-keys 옵션은 키를 키 서버로 보냅니다. --keyserver 옵션 뒤에는 공개 키 서버의 웹 주소가 와야 합니다. 전송할 키를 식별하려면 키의 지문을 명령줄에 제공해야 합니다. 네 개의 문자 집합 사이에는 공백이 없어야 합니다.

(--fingerprint 옵션을 사용하면 키의 지문을 볼 수 있습니다.)

gpg --send-keys --keyserver pgp.mit.edu 31A4E3BE6C022830A804DA0EE9E4D6D0F64EEED4

키가 전송되었다는 확인 메시지가 표시됩니다.

파일 암호화하기

이제 파일을 암호화하여 Mary에게 보낼 준비가 되었습니다. 파일 이름은 Raven.txt입니다.

--encrypt 옵션은 GPG에게 파일을 암호화하도록 지시하고, --sign 옵션은 사용자 정보를 사용하여 파일에 서명하도록 지시합니다. --armor 옵션은 GPG에게 ASCII 파일을 생성하도록 지시합니다. -r (수신자) 옵션 뒤에는 파일을 보내는 사람의 이메일 주소가 와야 합니다.

gpg --encrypt --sign --armor -r [email protected]

파일이 원래 파일 이름과 동일하게 생성되지만 파일 이름에 “.asc”가 추가됩니다. 내부를 살펴보겠습니다.

less Raven.txt.asc

파일은 읽을 수 없게 암호화되었으며, 사용자의 공개 키와 Mary의 개인 키를 가진 사람만 해독할 수 있습니다. 두 키를 모두 가질 수 있는 사람은 Mary뿐입니다.

이제 아무도 해독할 수 없다는 확신을 가지고 Mary에게 파일을 보낼 수 있습니다.

파일 해독하기

Mary가 답장을 보냈습니다. 암호화된 파일은 coded.asc라는 이름입니다. --decrypt 옵션을 사용하여 매우 쉽게 해독할 수 있습니다. 출력은 plain.txt라는 다른 파일로 리디렉션합니다.

GPG에게 파일 출처를 알릴 필요는 없습니다. 파일의 암호화된 내용에서 출처를 알아낼 수 있습니다.

gpg --decrypt coded.asc > plain.txt

plain.txt 파일을 살펴봅시다:

less plain.txt

파일이 성공적으로 해독되었습니다.

키 새로 고침

주기적으로 GPG에게 공개 키 서버에서 키를 확인하고 변경된 키를 새로 고치도록 요청할 수 있습니다. 몇 달에 한 번 또는 새 연락처로부터 키를 받은 경우 이 작업을 수행할 수 있습니다.

--refresh-keys 옵션은 GPG에게 검사를 수행하도록 합니다. --keyserver 옵션 뒤에는 선택한 키 서버가 와야 합니다. 공개 키 서버 간에 키가 동기화되므로 어떤 서버를 선택하든 상관없습니다.

gpg --keyserver pgp.mit.edu --refresh-keys

GPG는 확인하는 키를 나열하고 변경 및 업데이트된 키가 있는지 알려줍니다.

개인 정보 보호는 중요한 문제입니다

최근에 개인 정보 보호 문제가 많이 발생하고 있습니다. 정보를 안전하게 보호해야 하는 어떤 이유가 있든 GPG는 파일과 통신에 강력한 암호화를 쉽게 적용할 수 있도록 해줍니다.

GPG를 사용하는 다른 방법도 있습니다. Thunderbird용 플러그인인 Enigmail을 사용할 수 있습니다. Thunderbird 내에서 이메일 메시지를 암호화할 수 있도록 GPG 구성에 직접 연결됩니다.