웹사이트 검색

GPG를 사용하여 메시지를 암호화하고 서명하는 방법


소개

GPG(GNU Privacy Guard)는 공개 키 암호화 구현입니다. 이를 통해 당사자 간에 정보를 안전하게 전송할 수 있으며 메시지의 출처가 진짜인지 확인하는 데 사용할 수 있습니다.

이 가이드에서는 GPG의 작동 방식과 구현 방법에 대해 설명합니다. 이 데모에서는 Ubuntu 16.04 서버를 사용하지만 다른 배포판에 대한 지침도 포함할 것입니다.

공개 키 암호화 작동 방식

많은 사용자가 직면하는 문제는 안전하게 통신하고 대화 상대의 신원을 확인하는 방법입니다. 이 질문에 답하려고 시도하는 많은 체계는 적어도 어느 시점에서는 안전하지 않은 매체를 통해 암호 또는 기타 식별 자격 증명을 전송해야 합니다.

의도한 당사자만 읽을 수 있도록 보장

이 문제를 해결하기 위해 GPG는 공개 키 암호화라는 보안 개념을 사용합니다. 아이디어는 전송의 암호화 및 암호 해독 단계를 두 개의 개별 부분으로 나눌 수 있다는 것입니다. 이렇게 하면 암호 해독 부분을 보호하는 한 암호화 부분을 자유롭게 배포할 수 있습니다.

이렇게 하면 누구나 만들고 암호화할 수 있지만 지정된 사용자(개인 암호 해독 키가 있는 사용자)만 암호를 해독할 수 있는 단방향 메시지 전송이 가능합니다. 두 당사자가 공개/개인 키 쌍을 만들고 서로 공개 암호화 키를 제공하면 서로에게 메시지를 암호화할 수 있습니다.

따라서 이 시나리오에서 각 당사자는 자신의 개인 키와 다른 사용자의 공개 키를 가지고 있습니다.

발신자의 신원 확인

이 시스템의 또 다른 이점은 메시지를 보낸 사람이 자신의 개인 키로 메시지에 "서명\할 수 있다는 것입니다. 수신자가 가진 공개 키를 사용하여 지정된 사용자가 실제로 서명을 보내고 있는지 확인할 수 있습니다.

GPG 키 설정

GPG는 대부분의 배포판에 기본적으로 설치됩니다.

어떤 이유로 GPG가 설치되지 않은 경우 Ubuntu 및 Debian에서 다음을 입력하여 로컬 repo 색인을 업데이트하고 설치할 수 있습니다.

  1. sudo apt-get update
  2. sudo apt-get install gnupg

CentOS에서는 다음을 입력하여 GPG를 설치할 수 있습니다.

  1. sudo yum install gnupg2

GPG를 사용하여 통신을 암호화하려면 키 쌍을 생성해야 합니다. 다음 명령을 실행하여 이를 수행할 수 있습니다.

  1. gpg --gen-key

키를 구성하는 몇 가지 질문을 안내합니다.

  • 원하는 키 종류를 선택하십시오: (1) RSA 및 RSA(기본값)
  • 어떤 키 크기를 원하십니까? 4096
  • 키는 다음에 유효합니까? 1y(1년 후에 만료됩니다. 테스트만 하는 경우 "3\과 같은 숫자를 대신 사용하여 단기 키를 처음 생성하는 것이 좋습니다.)
  • 맞나요? y
  • 실명: 귀하의 실명
  • 이메일 주소: your_email@address.com
  • 설명: 서명에 표시되는 선택적 설명
  • (N)ame, ©omment, (E)mail 또는 (O)kay/(Q)uit를 변경하시겠습니까? 오
  • 암호 입력: 여기에 보안 암호를 입력하십시오(대문자 및 소문자, 숫자, 기호).

이 시점에서 gpg는 엔트로피를 사용하여 키를 생성합니다. 엔트로피는 시스템에 존재하는 예측 불가능성과 비결정론의 양을 설명합니다. GPG는 보안 키 세트를 생성하기 위해 이 엔트로피가 필요합니다.

이 프로세스는 시스템 활성 정도와 선택한 키 크기에 따라 시간이 오래 걸릴 수 있습니다. 추가 엔트로피를 더 쉽게 생성하려면 haveged라는 도구를 사용할 수 있습니다. 새 터미널을 열고 SSH를 통해 서버에 다시 연결하여 서버에 haveged를 설정합니다.

해지 인증서 생성

보안 위반이 있거나 비밀 키를 분실한 경우에 대비하여 키 쌍을 무효화하는 방법이 필요합니다. GPG 소프트웨어로 이 작업을 수행하는 쉬운 방법이 있습니다.

이 작업은 필요할 때가 아니라 키 쌍을 만드는 즉시 수행해야 합니다. 이 해지 키는 컴퓨터가 손상되거나 작동하지 않는 경우를 대비하여 미리 생성하여 안전한 별도 위치에 보관해야 합니다. 해지 키를 생성하려면 다음을 입력합니다.

  1. gpg --output ~/revocation.crt --gen-revoke your_email@address.com

해지 키 생성을 확인하라는 메시지가 표시되고 해지 이유를 묻는 메시지가 표시됩니다. 이 정보는 나중에 철회가 사용되는 경우 다른 사용자에게 표시됩니다. 사용 가능한 옵션 중 하나를 선택할 수 있지만 미리 수행되므로 세부 사항을 알 수 없습니다. 대부분의 경우 유연성을 최대화하기 위해 가능한 각 시나리오에 대한 해지 인증서를 만드는 것이 좋습니다.

그런 다음 의견을 제공하고 마지막으로 선택 사항을 확인하라는 메시지가 표시됩니다. 해지 인증서를 생성하기 전에 GPG 키의 암호를 입력하여 신원을 확인해야 합니다. 해지 인증서는 --output 플래그(이 예에서는 revocation.crt)로 지정된 파일에 작성됩니다.

Output
Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others!

무단 액세스를 방지하려면 생성된 인증서 파일에 대한 권한을 즉시 제한해야 합니다.

  1. chmod 600 ~/revocation.crt

해지 인증서는 다른 사용자가 키를 해지할 수 없도록 안전하게 보관해야 합니다. 메시지에서 알 수 있듯이 인증서를 제대로 보호할 수 있는 한 다른 시스템에 인증서를 백업하고 인쇄하는 것을 고려해야 합니다.

다른 사용자의 공개 키를 가져오는 방법

통신하려는 사람들의 다른 공개 키를 수락할 수 없다면 GPG는 쓸모가 없을 것입니다.

다양한 방법으로 다른 사람의 공개 키를 가져올 수 있습니다. 누군가로부터 텍스트 파일의 공개 키를 얻은 경우 GPG는 다음 명령을 사용하여 공개 키를 가져올 수 있습니다.

  1. gpg --import name_of_pub_key_file

통신하려는 사람이 자신의 키를 공개 키 서버에 업로드했을 가능성도 있습니다. 이 키 서버는 전 세계 사람들의 공개 키를 보관하는 데 사용됩니다.

정보를 다양한 다른 서버와 동기화하는 인기 있는 키 서버는 MIT 공개 키 서버입니다. 웹 브라우저에서 여기로 이동하여 이름이나 이메일 주소로 사람을 검색할 수 있습니다.

https://pgp.mit.edu/

다음을 입력하여 GPG 내에서 키 서버를 검색할 수도 있습니다.

  1. gpg --keyserver pgp.mit.edu --search-keys search_parameters

이름이나 이메일 주소로 검색하는 이 방법을 사용할 수 있습니다. 프롬프트에 따라 찾은 키를 가져올 수 있습니다.

키 확인 및 서명 방법

생성된 공개 키 파일을 자유롭게 배포할 수 있고 사람들이 이 파일을 사용하여 안전한 방법으로 귀하에게 연락할 수 있지만 초기 공개 키 전송 중에 키가 누구의 것이라고 생각하는지 신뢰할 수 있는 것이 중요합니다.

상대방의 신원 확인

공개 키를 제공하는 사람이 자신이 말하는 사람인지 어떻게 알 수 있습니까? 경우에 따라 간단할 수 있습니다. 노트북을 열어 키를 교환하는 사람 바로 옆에 앉아 있을 수 있습니다. 이것은 정확하고 적법한 키를 수신하고 있음을 식별하는 매우 안전한 방법이어야 합니다.

그러나 그러한 개인적인 접촉이 불가능한 다른 많은 상황이 있습니다. 상대방을 개인적으로 알지 못하거나 물리적 거리로 떨어져 있을 수 있습니다. 안전하지 않은 채널을 통해 통신하고 싶지 않다면 공개 키 확인이 문제가 될 수 있습니다.

다행히 양 당사자의 전체 공개 키를 확인하는 대신 이 키에서 파생된 "지문\을 간단히 비교할 수 있습니다. 이렇게 하면 둘 다 동일한 공개 키 정보를 사용하고 있다는 합당한 확신을 얻을 수 있습니다.

다음을 입력하여 공개 키의 지문을 얻을 수 있습니다.

  1. gpg --fingerprint your_email@address.com
Output
pub 4096R/311B1F84 2013-10-04 Key fingerprint = CB9E C70F 2421 AF06 7D72 F980 8287 6A15 311B 1F84 uid Test User <test.user@address.com> sub 4096R/8822A56A 2013-10-04

이렇게 하면 비교할 훨씬 더 관리하기 쉬운 숫자 문자열이 생성됩니다. 이 문자열을 그 사람 자신이나 그 사람에게 접근할 수 있는 다른 사람과 비교할 수 있습니다.

키에 서명

키에 서명하면 제공된 키를 신뢰하고 해당 키가 해당 사람과 연결되어 있음을 확인했음을 소프트웨어에 알립니다.

가져온 키에 서명하려면 다음을 입력하십시오.

  1. gpg --sign-key email@example.com

키에 서명한다는 것은 그 사람이 자신이 주장하는 사람임을 신뢰한다는 것을 확인한다는 의미입니다. 이것은 다른 사람들도 그 사람을 신뢰할지 여부를 결정하는 데 도움이 될 수 있습니다. 누군가가 당신을 신뢰하고 당신이 이 사람의 키에 서명한 것을 본다면 그들은 자신의 신원도 신뢰할 가능성이 더 높을 수 있습니다.

서명한 키를 가진 사람이 서명된 키를 돌려 보내 신뢰 관계를 이용할 수 있도록 허용해야 합니다. 다음을 입력하면 됩니다.

  1. gpg --output ~/signed.key --export --armor email@example.com

암호를 다시 입력해야 합니다. 그런 다음 귀하가 서명한 공개 키가 표시됩니다. 다른 사람과 교류할 때 "승인 스탬프\를 얻을 수 있도록 이것을 보내십시오.

이 새로운 서명된 키를 수신하면 사용자가 생성한 서명 정보를 GPG 데이터베이스에 추가하여 가져올 수 있습니다. 다음을 입력하면 됩니다.

  1. gpg --import ~/signed.key

이제 그들은 귀하가 자신의 신원이 옳다는 것을 신뢰한다는 것을 다른 사람들에게 보여줄 수 있습니다.

공개 키를 고가용성으로 만드는 방법

공개 키 암호화가 설계된 방식으로 인해 알려지지 않은 사람이 공개 키를 가지고 있는 경우 발생할 수 있는 악의적인 일은 없습니다.

이를 염두에 두고 공개 키를 공개적으로 사용할 수 있도록 하는 것이 도움이 될 수 있습니다. 그러면 사람들이 귀하의 정보를 찾아 첫 번째 상호 작용에서 안전하게 메시지를 보낼 수 있습니다.

GPG 시스템에서 공개 키를 요청하여 누구에게나 공개 키를 보낼 수 있습니다.

  1. gpg --output ~/mygpg.key --armor --export your_email@address.com
Output
-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.11 (GNU/Linux) mQINBFJPCuABEACiog/sInjg0O2SqgmG1T8n9FroSTdN74uGsRMHHAOuAmGLsTse 9oxeLQpN+r75Ko39RVE88dRcW710fPY0+fjSXBKhpN+raRMUKJp4AX9BJd00YA/4 EpD+8cDK4DuLlLdn1x0q41VUsznXrnMpQedRmAL9f9bL6pbLTJhaKeorTokTvdn6 5VT3pb2o+jr6NETaUxd99ZG/osPar9tNThVLIIzG1nDabcTFbMB+w7wOJuhXyTLQ JBU9xmavTM71PfV6Pkh4j1pfWImXc1D8dS+jcvKeXInBfm2XZsfOCesk12YnK3Nc u1Xe1lxzSt7Cegum4S/YuxmYoh462oGZ7FA4Cr2lvAPVpO9zmgQ8JITXiqYg2wB3 . . .

그런 다음 이 파일을 적절한 매체를 통해 상대방에게 보낼 수 있습니다.

키 서버에 키를 게시하려면 대부분의 서버 사이트에서 사용할 수 있는 양식을 통해 수동으로 할 수 있습니다.

또 다른 옵션은 GPG 인터페이스를 통해 이를 수행하는 것입니다. 다음을 입력하여 키 ID를 찾습니다.

  1. gpg --list-keys your_email@address.com

아래 출력에서 강조 표시된 부분은 키 ID입니다(사용할 항목이 확실하지 않은 경우 왼쪽 열에서 pub을 찾으십시오). 내부 소프트웨어에 대한 키를 참조하는 짧은 방법입니다.

Output
pub 4096R/311B1F84 2013-10-04 uid Test User <test.user@address.com> sub 4096R/8822A56A 2013-10-04

키를 특정 키 서버에 업로드하려면 다음 구문을 사용할 수 있습니다.

  1. gpg --send-keys --keyserver pgp.mit.edu key_id

키는 지정된 서버에 업로드됩니다. 이후 전 세계의 다른 주요 서버에 배포될 가능성이 높습니다.

GPG로 메시지 암호화 및 해독

상대방과 키를 공유한 후 메시지를 쉽게 암호화하고 해독할 수 있습니다.

메시지 암호화

GPG의 "–encrypt\ 플래그를 사용하여 메시지를 암호화할 수 있습니다. 기본 구문은 다음과 같습니다.

  1. gpg --encrypt --sign --armor -r person@email.com name_of_file

이렇게 하면 수신자의 공개 키를 사용하여 메시지를 암호화하고 자신의 개인 키로 서명하여 메시지가 사용자로부터 온 것임을 보장하고 원시 바이트 대신 텍스트 형식으로 메시지를 출력합니다. 파일 이름은 입력 파일 이름과 동일하지만 확장자가 .asc입니다.

암호화된 메시지를 읽을 수 있으려면 자신의 이메일 주소가 있는 두 번째 "-r” 수신자를 포함해야 합니다. 이는 메시지가 각 개인의 공개 키로 암호화되고 해독만 가능하기 때문입니다. 관련 개인 키와 함께.

따라서 상대방의 공개 키로만 암호화된 경우 어떻게든 상대방의 개인 키를 얻지 않는 한 메시지를 다시 볼 수 없습니다. 자신을 두 번째 수신자로 추가하면 메시지가 각 수신자에 대해 하나씩 두 번 암호화됩니다.

메시지 해독

메시지를 받으면 메시지 파일에서 GPG를 호출하기만 하면 됩니다.

  1. gpg file_name.asc

소프트웨어는 필요에 따라 메시지를 표시합니다.

파일 대신 원시 텍스트 스트림으로 메시지가 있는 경우 인수 없이 gpg를 입력한 후 복사하여 붙여넣을 수 있습니다. "CTRL-D\를 눌러 메시지의 끝을 알리면 GPG가 암호를 해독합니다.

키 유지보수

키 데이터베이스를 관리하기 위해 정기적으로 사용해야 하는 많은 절차가 있습니다.

다른 사람에게서 받은 사용 가능한 GPG 키를 나열하려면 다음 명령을 실행할 수 있습니다.

  1. gpg --list-keys

공개 키 서버에서 가져온 정보에 의존하는 경우 키 정보가 구식이 될 수 있습니다. 해지된 키에 의존하고 싶지는 않을 것입니다. 이는 잠재적으로 손상된 키를 신뢰한다는 의미이기 때문입니다.

다음을 발행하여 키 정보를 업데이트할 수 있습니다.

  1. gpg --refresh-keys

키 서버에서 새 정보를 가져옵니다.

다음을 사용하여 특정 키 서버에서 정보를 가져올 수 있습니다.

  1. gpg --keyserver key_server --refresh-keys

키 서버에서 키를 찾을 수 없는 경우 오류 메시지가 나타날 수 있습니다.

결론

GPG를 올바르게 사용하면 다른 사람들과 안전하게 통신할 수 있습니다. 이는 특히 민감한 정보를 처리할 때뿐만 아니라 정기적이고 일상적인 메시지를 처리할 때도 매우 유용합니다.

모니터링 프로그램에 의해 특정 암호화된 통신에 플래그가 지정될 수 있기 때문에 "비밀\ 데이터뿐만 아니라 모든 것에 암호화를 사용하는 것이 좋습니다. 친절한 인사를 보냅니다.