OpenPGP를 이용하여 메일에 디지털 서명 및 암호화하기

By | 2010/12/03

  학교에서 배우는 과목 중 정보 시스템 보안이라는 과목이 있습니다. 이 과목에서 보안과 관련하여 여러 가지를 배웠는데 그 중에 하나가 전자 메일 보안이었습니다. 여기서 PGP라는 것을 배웠는데 개인적으로 참으로 관심이 많이 생겼습니다. 그 이유는 바로 메일 서명과 암호화 때문입니다.

  교수님께서 말씀하셨듯 우리나라는 포탈 사이트에서 메일을 주고 받는 일이 많아 메일에 서명과 암호화를 하는 것을 그리 크게 신경 쓰지 않습니다. 하지만 외국에서는 이런 것을 자주 한다고 합니다.

  또한 개인적으로는 예전부터 Outlook과 Thunderbird와 같은 메일 클라이언트 프로그램을 사용하여 메일을 관리하였는데, 거기서 메일을 쓸 때 항상 쓰지 못했던 기능이 바로 디지털 서명과 암호화였습니다. 어떻게 하는 것인지 알 수 없으니 아무리 해도 되지 않아 포기하였던 것이지요.

 

  따라서 이번에 배웠던 것을 바탕으로 찾아봐서 프로그램을 설치하고 공개키/개인키를 생성하였습니다. 제가 선택한 것은 GnuPG입니다. 이유는 아무래도 공개된 오픈소스이니 나름 신뢰성도 생기고 일단 공짜라는 장점이 있습니다.

  하지만 이것은 리눅스 기반이라 윈도우에서 사용하기는 조금 곤란할 듯싶어 리눅스에서 어느 정도 개념을 잡은 후 Windows에서 사용할 수 있는 Gpg4Win이라는 프로그램을 설치하였습니다. 참고로 현재 Gpg4win 2.0.4가 stable version이나 영어 윈도우가 아니라면 키를 생성할 수 없으니 다른 버전의 것을 설치하실 것을 권장합니다. (관련글)

 

c0023

  프로그램을 설치하신 후 GPA라는 것을 실행시키면 키를 생성할 수 있습니다. 이름과 이메일 주소, 주석 그리고 비밀번호를 넣으시면 공개키와 비밀키를 생성해줍니다. 이제 이를 Thunderbird에서 사용할 수 있도록 부가기능 중 Enigmail을 설치합니다.

c0024

  부가 기능 설치 후 설정 마법사를 실행시킬 수 있는데 차근차근 읽어보시면서 진행하시면 되겠습니다.

 

  이제 메일을 작성하고 거기에 서명을 해보겠습니다. 디지털 서명은 제 개인키로 서명하고 받는 이가 제 공개키로 확인하는 방식입니다.

c0027

  일단 평소와 같은 메일을 작성합니다. 받는 사람과 제목 그리고 본문을 작성하였습니다. 그리고 이제 도구 버튼 중 새롭게 생긴 OpenPGP라는 것을 선택합니다.

c0028

  그럼 위와 같은 창이 하나 뜨는데 제가 이번에 하고 싶은 것은 메시지 서명이기에 이를 체크하였습니다. PGP/MIME은 무엇인지 수업 시간에 배운 것으로 추측이 가능하나 명확하지 않아 이를 체크하지 않았습니다.

c0029

  그렇게 체크를 하고 나자 오른쪽 밑에 메시지가 서명된다는 표시로 연필 모양이 활성화가 된 것을 알 수 있습니다.

c0031

  이제 전송을 클릭하였습니다. 그러자 이렇게 경고 메시지가 뜨네요. HTML로 작성한다면 서명/암호화를 실패하게 만들 수 있나 보군요. 그렇다면 이제 HTML로 작성하지 말아야 하는 것일까요?ㅜ

c0032

  그리고 이제 암호를 묻는 창이 떴습니다. 암호는 위에서 키를 만들 때 넣었던 것입니다.

c0033

  제대로 된 암호를 넣고 나니 다시 한 번 전송을 할 것인지에 대해 물어보네요. 당연히 보낸다고 하였습니다.

 

c0034

  그리고 제가 보냈던 메일 계정으로 가보았습니다. 거기에 이렇게 PGP 서명이 된 메시지와 PGP 서명이 첨부되어 있는 것을 확인할 수 있습니다. 그럼 해당 서명을 한 사람이 제가 맞음을 확인해야 합니다. 이를 GPA에서 해보겠습니다. 물론 메일을 보낸 컴퓨터에서 확인하면 아무래도 서명을 한 사람이 검증을 하는 꼴이니 다른 제 컴퓨터에서 서명을 확인하였습니다.

  해당 메일 내용 전체를 txt 파일로 받아 이를 다른 리눅스가 설치된 컴퓨터의 GPA에서 확인하였습니다.

11

Manager

  GPA를 실행시키고 나서 Files를 선택한 후 열기를 하여 메일 본문이 적혀진 파일을 열었습니다. 그리고 서명을 확인하고자 Verify를 클릭하였습니다.

Verify files

  Unknown Key라고 합니다. 이는 당연합니다. 제 비밀키를 이용하여 디지털 서명을 하였기에 제 공개키로 서명을 확인해야 합니다. 하지만 받는 이는 제 공개키를 전혀 모르기에 이를 확인할 수가 없는 것입니다.

Keyring Editor

  실제로 제가 서명 확인을 시도한 곳에서는 아무런 키를 저장하고 있지 않습니다.

  그럼 어떻게 해야 할까요? 간단합니다. 제 공개키를 등록시키면 되는 것입니다. 제 공개키는 이름 그대로 공개된 것입니다. 다만 해당 공개키가 제가 만든 것인지 확인하는 작업이 필요한데 그래서 많은 사람들이 자신의 홈페이지에 자신의 공개키를 올려 해당 공개키는 자신의 것이라는 것을 얘기합니다. (이런 방법을 온 국민이 쓰기에는 매우 어렵기에 공인인증서와 같은 것이 필요하다고 배웠습니다.)

  따라서 제 공개키를 공개합니다.

—–BEGIN PGP PUBLIC KEY BLOCK—–
Version: GnuPG v2.0.16 (MingW32)

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
yw==
=RXm6
—–END PGP PUBLIC KEY BLOCK—–

  길기도 하네요.^^

  그럼 이 공개키를 서명을 확인하려는 컴퓨터에 넣겠습니다. 넣는 방법은 간단합니다. 위에 적혀진 것을 복사하여 새로운 텍스트 파일에 붙여 넣은 후 저장합니다. 그리고 GPA에서 import라는 버튼을 선택한 후 저장한 파일을 선택합니다. 그럼 다음과 같은 메시지가 뜹니다.

1111

  public keys, 즉, 공개키를 하나 읽어 이를 가져왔다고 하네요.

1234

  그리고 다시 GPA를 보시면 이렇게 공개키 하나가 추가된 것을 알 수 있습니다.

  그럼 이제 공개키를 가져왔으니 서명 확인이 가능할까요? 바로 확인해보겠습니다.

12345

  아닙니다. 공개키는 현재 해당 컴퓨터에 저장시켰지만 그것이 올바른 것인지는 알 수 없다고 합니다. GPA를 보시면 Key Validity라는 것이 있는데 거기에 Unknown이라고 되어 있습니다. 이 말은 해당 공개키를 가져왔기는 했으나 누구의 공개키인지는 모른다는 것입니다. 따라서 믿을 수 없는 공개키라는 것이지요. 그럼 이것을 설정해야겠습니다.

  해당 공개키를 선택하고 Keys –> Set Owner Trust를 선택합니다. 그럼 다음과 같은 창이 하나 뜹니다.

123456

  무엇이 주절주절 적혀있네요.^^ 사실 이 부분은 Web of Trust와 관련된 것으로 알고 있습니다. 해당 공개키를 가진 사람을 얼마만큼 믿겠느냐..라는 것인데 여기서 설명 드리기 어렵네요. 참조 링크를 참고하시는 것이 더욱 좋다고 생각합니다.^^

  다만 여기서는 Ultimate를 선택해야 하였습니다. 왜냐하면 해당 공개키를 다른 사람에게서 확인을 받아야 하는데 그것이 어렵고, 제가 제 블로그에 제 것이라고 했기 때문에 믿어주세요.ㅜ(라고 하면 조금 이상하네요.^^;;)

2222

  그렇게 설정을 하였더니 Key Validity가 Fully Valid가 되었네요. 이제 믿을만하다고 사용자가 얘기하였으니 다시 한 번 서명을 검증하겠습니다.

55555

  오오… 확인 결과 Valid가 나옵니다. 즉, 서명이 맞다는 의미입니다.

  서명이 맞다는 의미는 무엇일까요? 그것은 바로 메일 본문에 적혀져 있는 것이 보낸 사람이 적은 것이 맞다는 의미입니다. 즉, 중간에 해킹이나 기타 여러 가지 이유로 메일 본문이 위변조 되지 않았다는 의미이며, 훗날 보낸 사람이 ‘이건 내가 보낸 메일이 아니다.’라고 우길 때 ‘너가 이렇게 보냈다고 서명하지 않았냐?!’라며 얘기할 수 있는 것입니다.

 

  암호화까지 적으면 이 글이 너무 길게 갈 것 같아서 여기서는 생략하겠습니다. 다만, 메일 암호화 개략을 설명 드리자면, 암호화는 서명과 반대로 내가 다른 사람 B의 공개키를 이용하여 편지를 적고 이를 암호화를 하면 B는 그 메일을 받아 자신의 개인키로 복호화를 해서 메일을 봅니다. 따라서 보내는 사람과 받는 사람이 아닌 제 3자는 해당 개인키를 가지고 있지 않기에 복호화 하여 볼 수 없습니다.

 

  여하튼 이러한 방식을 통해 메일의 서명 및 서명 확인을 할 수 있습니다. 또한 암호화 역시 가능합니다. 꼭 필요가 있는가? 싶기도 하지만 나름 중요한 내용을 메일로 써서 전달한다고 할 때 이렇게 해보는 것도 좋지 않을까요?^^

  사실 어떤 홈페이지를 가니 홈페이지 주인장이 이렇게 글을 적었더군요.

don’t forget to encrypt your eMail. Use my public key. You know: Big brother is watching you ;-)

출처 : http://khtml2png.sourceforge.net/index.php?page=support

  Big brother가 당신을 바라보고 있다 합니다. 따라서 자신의 public key를 이용하여 암호화 하여 메일을 보내라고 하네요.^^

  그 글을 보는 순간 ‘그래. 계속 미루지 말고 나도 한 번 해야겠다.’라는 생각이 들어 실행에 옮겼고 다른 분들도 하기를 바라기에 이렇게 글을 적었습니다. 두서없이 주절주절 적어 읽기가 사납지만, 훗날 필요성을 느낄 때 이런 방법이 있다는 것을 떠올리고 사용하는데 도움이 조금이나마 되기를 바라면서 이 글을 마칩니다.

 

참조

2 thoughts on “OpenPGP를 이용하여 메일에 디지털 서명 및 암호화하기

  1. 니모

    자세하고 좋은 설명이네요. 고맙습니다

    Reply
    1. NoSyu

      반갑습니다.
      사용하심에 있어 도움이 되셨기를 바랍니다.^^

      Reply

Leave a Reply