본문 바로가기
Linux & Ubuntu

GPG(GNU Privacy Guard)를 이용한 비밀키/공개키 방식 암호화

by 호빵맨 2022. 2. 15.

이전글의 방문자가 많아 추가로 GPG를 이용한 비밀키/공개키 방식 암호화를 소개합니다.

2017.06.08 - [Others] - 우분투(리눅스)에서 파일 암호화 하기.

 

우분투(리눅스)에서 파일 암호화 하기.

리눅스는 기본적으로 계정 보안이 철저하기 때문에 특별히 따로 개인 파일에 대한 보안에 신경을 덜 쓰게 되는데요. 그래도 외부로 파일을 전송한다던지, 개인적으로 굉장히 예민한 정보를 담

atto.tistory.com

1. 본인 증명

개인키로 암호화한 데이터는 오직 공개키로만 복호화됩니다. 즉, 내가 어떤 파일을 게시하면서 본인의 개인키로 암호화 하여 게시한 경우, 공개키를 이용해 게시자가 올린 파일이 맞는지 확인 할 수 있습니다.

가장 흔한 예로 Ubuntu 저장소나 각종 외부 저장소에서 시스템에 미리 개발자의 공개키를 등록하고, 개발자가 파일을 게시할 때 본인의 개인키로 서명하면, 시스템은 등록된 개발자로 부터 온것임을 확인 할 수 있습니다.

 

2. 데이터 보안

누군가로부터 받을 데이터가 중간에 변조되거나 유출되는것을 방지하기 위해 개인키/공개키 방식을 사용할 수 있습니다. 파일을 요청할 사람에게 자신의 공개키로 데이터를 암호화 해서 보내도록 하면 개인키는 본인만 가지고 있기 때문에 중간에 변조되거나 유출되는 것을 방지 할 수 있습니다.

 

개인키 암호화 --> 공개키 복호화

공개키 암호화 --> 개인키 복호화

 

3. GPG 를 이용한 파일 암호화/복호화

해당 실습은 윈도우용 Terminal 에서 윈도우용 GPG와 윈도우 WSL 우분투 20.04의 gpg를 이용해 진행 했습니다.

먼저 양쪽 시스템 모두에 다음 명령어로 Key Pair를 생성 합니다.

gpg --full-generate-key

gpg --full-generate-key 명령 후 입력 화면

1) 해당 명령 입력 후 가장먼저 Key의 종류를 선택합니다. 보통 기본 설정인 RSA and RSA로 합니다. 엔터 입력.

2) 두번째로 Key의 크기를 입력합니다. 역시 기본 설정인 3072를 선택합니다. 엔터 입력.

3) 세번째로 Key의 유효기간을 설정합니다. 기본 설정인 기간없음을 선택합니다. 엔터 입력.

4) 사용자 정보를 입력합니다. Real Name: 은 본인의 이름을 입력합니다.

5) Email 주소를 입력합니다.

6) Comment: 는 비워놔도 상관없습니다.

7) 다 입력하고 나면, 비밀번호를 입력하는 창이 뜹니다. 8글자 이상의 비밀번호를 입력해 줍니다.

8) 마지막으로 입력내용이 맞는지 확인하고 "O"를 입력하고 엔터

반응형

모든 입력값입력 후 키생성 화면 입니다. 중간의 메세지들은 난수 발생중에 키보드나, 마우스, 디스크등을 사용하면 키를 만들때 필요한 난수발생에 더 좋다 뭐 이런 메시지 입니다.

GPG -full-generate-key 명령, 모든 입력값 입력 후 키 생성 결과.

다음 명려어로 공개키를 export 합니다.

gpg --output {파일이름}.gpg --export {이메일}

제경우 "gpg --output pubtest.gpg --export test@email.com" 입니다.

이렇게 생성된 공개키를 다른쪽 시스템이로 복사해 줍니다. ( 제경우 윈도우 시스템으로 복사)

wsl의 경우 /mnt 에 윈도우 드라이브들이 마운트 되어 있습니다. C드라이브로 복사예를 들면.

cp ./pubtest.gpg /mnt/c

이제 윈도우 시스템에서 복사해온 공개키를 import합니다.

gpg --import pubtest.gpg 실행으로 pubtest.gpg 키 import 화면

gpg --import {파일명}

위의 명령어로 복사해온 공개키를 시스템에 등록합니다. 

등록된 키를 서명해야 사용할 수 있습니다. 서명하기 위해 다음을 입력합니다.

gpg --edit-key {이메일}

{이메일}은 복사해온 공개키의 이메일 입니다. 혹시 모른다면 키 import 후 gpg --list-keys 명령어로 확인 할 수 있습니다.

상기 명령 후 "fpr" 명령어로 핑거프린트를 확인 할 수 있습니다. 출력된 핑거프린트가 키를 생성한 시스템에서 확인한 핑거프린트와 같은지 확인 할 수 있습니다. 그냥 공개키가 잘 제대로 왔는지 확인하는 것입니다.

sign

마지막으로 sign 명령어를 입력하면 비밀번호 입력 창이 나타나고,  진짜 sign할지 묻습니다. 최종적으로 등록이 완료 됩니다.

quit

명령으로 gpg 콘솔에서 나옵니다. 나오기전에 저장할지 묻습니다. 꼭 저장해줍니다.

 

이제 윈도우 시스템에서 파일을 암호화해서 리눅스 시트템으로 이동 하여 복호화 해보도록 하겠습니다.

현재 윈도우 시스템에는 리눅스 시스템에서 복사해 등록한 test@email.com의 공개키가 있습니다.

그 공개키로 파일을 암호화 합니다. 

import한 공개키를 이용한 파일 암호화

우선 간단한 내용을 넣은 message.txt 파일을 하나 만들었습니다.

gpg --encrypt --recipient {이메일}

제경우 gpg --encrypt --recipient test@mail.com 입니다.

암호화된 파일을 리눅스 시스템으로 복사하여 복호화 배보도록 합니다.

암호화된 파일을 WSL 리눅스 시스템으로 복사하여 복호화

복호화 하는 명령어는

gpg --decrypt {파일명}

하지만, 위의 명령어로 파일을 복호화하면 기본설정인 STOUT으로 출력이 되어 복호화된 내용이 파일로 저장되지 않고, 화면에 출력됩니다. 파일로 저장하기 위해서는

gpg --output {저장할 파일명} --decrypt {암화화된 파일}

제 경우 gpg --output message.txt --decrypt message.txt.gpg 입니다.

 

이상 GPG 를 이용한 파일 암호화 소개였습니다.

댓글