티스토리 뷰

GnuPG

GPG 자료 암호화/복호화하기

anerdinaserver 2016. 12. 5. 17:48

이번 포스트에서는 자료를 암호화/복호화하는 방법을 알아보겠습니다.

앞선 포스트를 모두 따라했다면 현재 여러분의 키 링에는 적어도 본인의 개인키와 공개키가 들어 있을 것입니다. 친구나 다른 사람의 공개키가 저장되어 있을수도 있겠습니다.

비대칭 키를 이용한 암호화 과정에서 흔히 공개키를 열린 금고로 비유하곤 합니다. 이 금고에는 금고 주인만 열 수 있는 자물쇠가 걸려 있고 한 번 잠그면 금고 주인의 전용 열쇠가 아니면 열리지 않습니다.

자료를 암호화 할 때는 받는 사람의 공개키를 이용합니다. 받는 사람은 여러명이 될 수 있고 본인 스스로를 받는 사람 목록에 추가할 수도 있습니다.

받는 사람의 공개키로 자료를 암호화하면 받는 사람의 개인키로만 해독할 수 있습니다. 여러분이 자료를 암호화 할 때 본인을 받는 사람 목록에 적지 않으면 직접 암호화 한 자료라고 해도 복호화할 수 없습니다. 수신인의 개인키가 없기 때문입니다.

마찬가지로 다른 사람이 여러분의 공개키 하나로 자료를 암호화하면 쌍을 이루는 개인키를 갖고 있는 여러분 스스로만 그 자료를 복호화 해서 읽을 수 있습니다. 개인키를 잘 간수해야 하는 이유 중 하나입니다. 개인키가 유출되면 여러분만 보도록 암호화된 자료를 개인키를 입수한 사람도 볼 수 있게 되기 때문입니다.

이런 원리로 철수에게 비밀 메시지를 보내려면 철수의 공개키를 이용하고, 영희에게 비밀 자료를 보내려면 영희의 공개키를 이용하면 되는 것입니다. 철수가 여러분에게 자료를 보낼 때는 여러분의 공개키를 이용할 것입니다.

자료 암호화하기

gpg를 이용해 자료를 암호화하려면 --encrypt 옵션을 사용합니다. 짧은 표현은 -e입니다.

키 내보내기 과정에서와 같이 결과물을 파일로 내보내려면 --output, 또는 -o 옵션을 사용하면 됩니다.

마찬가지로 결과물을 아스키 문자 형태로 내보내려면 --armor, 또는 -a 옵션을 사용하면 됩니다.

받는 사람은 --recipient 또는 -r 옵션을 사용합니다. 이 옵션은 최소한 한 번은 사용되어야 하고 받는 사람마다 한 번씩 여러번 사용하면 됩니다.

암호화를 할 파일을 정하거나 간단하게 하나 만들고 실제로 암호화를 해 보겠습니다:

$ echo this is a secret message! > mysecret.txt
$ gpg2 -aer Biscuit -o mysecret.txt.asc mysecret.txt

이렇게 하면 mysecret.txt.asc 파일이 생깁니다. 내용을 보면 알아볼 수 없게 되어있는 것을 알 수 있습니다:

$ cat mysecret.txt.asc
-----BEGIN PGP MESSAGE-----
Version: GnuPG v2

hQIMA8vZzLznXZVLARAA4D6VXlR1DbYzu8zp6qUiO7s/0nNXaHeMtd0PMUlurzt6
5HZrzRPMT4Yi+87e6TfUnAG1utZwqBpjw2+Iytpip9kt00ySH8zAliQo9CU1lLlZ
...
WwFhMEZPa0aqrO0f7TOy9/lV/aNirUGFreaaP9+HklPHZWPfQ+duVyrwYf5CaCoC
jZ+QrqtDgp8/K9dj5IuhwSlkql3C0khPqFeMRv8FJU3g/WcJ7kDZ/uG+A3w=
=TWqD
-----END PGP MESSAGE-----

만약 받는 사람이 여럿이라면 이런식으로 하시면 됩니다:

$ gpg2 -aer Biscuit -r Ginger -r Ross ... -o mysecret.txt.asc mysecret.txt

그려면 명시된 수신자의 개인키 중 하나로 자료를 복호화 할 수 있습니다.

참고로 암호화된 자료를 받은 사람의 화면에는 복원 시 맞는 개인키가 발견될때까지 암호 입력 창이 표시됩니다. 따라서 한 수신자는 다른 수신자가 누구인지 알 수 있습니다. 경우에 따라 한번에 여러 명의 공개키를 이용해 암호화하거나 받는 사람마다 따로 암호화를 한 번씩 하면 되겠습니다.

자료 복호화하기

gpg로 자료를 복호화 할 때는 --decrypt 옵션을 사용합니다. 짧은 표현은 -d입니다.

$ gpg2 -o secretmessage.txt -d mysecret.txt.asc

gpg는 복호화를 위해 개인키를 사용해야 하기 때문에 개인키의 암호를 물어볼 것입니다. 입력하면 복호화되고 위 예제에서는 secretmessage.txt에 this is a secret message! 라는 내용이 복원됩니다. -o 옵션을 사용하지 않으면 그냥 터미널에 복호화된 내용이 표시됩니다.

리눅스/맥 사용자를 위한 팁

윈도우 커멘드를 개인적으로 사용하지 않고 있기 때문에 윈도우에서도 같은 일이 가능한지는 모르겠습니다. 하지만 bash/zsh등을 사용하는 분들이 쉘에서 간편하게 메시지를 암호화 하는 방법을 알려드리겠습니다.

이것은 gpg의 기능이 아니고 아마도 쉘마다 공통적으로 가능한 쉘 자체의 기능입니다.

암호화

$ gpg2 -aer Biscuit << 'EOF'
> This is a message
> EOF

복호화

마찬가지로 아스키 형태로 수신된 자료를 복호화 하려면:

$ gpg2 -o output.txt -d << 'EOF'
> -----BEGIN PGP MESSAGE-----
...
-----END PGP MESSAGE-----
> EOF

...

This is a message

수신된 암호문을 복사해서 붙여넣으면 됩니다. 메일 등으로 수신했을 때 간편하게 사용할 수 있습니다.

쉘 변수 확장을 사용하시려면 << EOF로 사용하시면 됩니다.

대칭 키 암호화

지금까지는 비대칭 키를 이용한 암호화에 대해 알아봤습니다. 하지만 경우에 따라 따로 암호 하나로 자료를 암호화해서 같은 암호로 해독하도록 하는 것이 편한 경우도 있을 수 있습니다. 이 경우를 위해 gpg로 대칭 키 암호화도 할 수 있습니다.

대칭 키 암호화는 --symmetric 옵션을 사용합니다. 짧은 표현은 -c입니다.

$ gpg2 -o secret.txt.gpg --symmetric secret.txt

이렇게 암호화된 자료는 공개키를 이용하지 않고 암호만으로 암호화되기 때문에 암호를 잘 관리해야 합니다. 특히 본인의 개인키 암호를 사용하지 않도록 주의하십시오.

참고로 gpg는 여러가지 암호화 방식을 지원합니다. --help 옵션을 사용하면 간단한 옵션 목록이 나오는데 상단 부분에 사용 가능한 암호화 방식의 목록이 같이 표시됩니다.

...
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
...

기본 값은 CAST5이고 modern 버전부터는 AES–128 방식이 기본으로 사용됩니다. 기본값이 존재하는 이유는 받는 사람의 gpg도 같은 암호화 방식이 지원되어야 하기 때문입니다.

물론 암호화 방식을 지정할 수도 있습니다. 예를 들어 AES256 방식으로 암호화를 하려면 --cipher-algo 옵션을 사용해서 이렇게 합니다:

$ gpg2 -o secret.txt.gpg --cipher-algo AES256 --symmetric secret.txt

적절히 강한 암호를 사용한다면 기본 값으로도 충분할 것입니다. 필요에 따라 지정해서 사용하십시오.

대칭 키 암호화의 가장 큰 단점이 암호 자체를 전달하는 것이 어렵다는 것입니다. 자료가 아무리 잘 암호화 되어도 암호가 유출되면 암호화의 의미가 없게 됩니다. 그래서 나온 방법이 비대칭 키 암호화입니다. 꼭 대칭키 암호화를 사용해서 통신하려면 암호 전달에 신경을 쓰시기 바랍니다. 자료는 대칭키로 암호화하고 암호를 비대칭키를 이용해 전달하는 방법도 있지만 개개인의 자료 전달에서는 그냥 비대칭 키를 이용하는 것이 좋겠습니다.

다음 포스트에서는 메시지나 자료에 서명을 하고 확인하는 방법을 알아보겠습니다.

'GnuPG' 카테고리의 다른 글

GPG 서명하고 확인하기  (0) 2016.12.05
GPG 공개키 주고받기  (0) 2016.12.05
GPG 키 생성하기  (1) 2016.12.03
GPG를 사용하는 이유  (0) 2016.11.24
GPG 설치하기  (0) 2016.11.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함