인터넷 망에서의 통신은 언제든 공격자에게 노출 될 수 있기 때문에, 완벽히 안전한 방법은 없을 것입니다. 그러나 파일을 전달하기 전에 암호화 하고, 전달 시에도 암호화 된 프로토콜을 이용하는 방법을 통해 조금 더 보안을 강화할 수 있습니다.


여기서는 윈도우 환경에서 PuTTYgen, freeSSHd, GnuPG, WinSCP 를 이용하여 파일을 암호화, SFTP 로 송신하는 방법을 서술합니다. 모든 과정을 단계별로 설명하기에는 분량이 너무 많기 때문에^^; 전체적인 구조와 각 과정을 간략히 설명 한 후 링크를 소개 하겠습니다. 좀 더 상세한 정보는 각 프로그램의 공식 사이트나, 관련 링크를 참고하시기 바랍니다.


진행 순서는 아래와 같습니다. 파일을 송신하고자 하는 쪽에서 sftp 서버를 구축하여 암호화 된 파일을 업로드 하면, 파일을 수신하고자 하는 쪽에서 sftp 서버에 접속하여 파일을 다운로드, 복호화 하는 과정입니다.


1. sftp 서버 접속을 위하여, PuTTYgen 을 이용하여 keypair 생성

2. 파일 송신자가 freeSSHd 를 이용하여 sftp 서버 구축

3. 파일 암호화를 위하여, GnuPG 를 이용하여 keypair 생성

4. 파일 송신자가 GnuPG 를 이용하여 파일 암호화, sftp 서버에 업로드

5. 파일 수신자가 WinSCP 를 이용하여 송신자의 sftp 서버에 접속, 파일 다운로드

6. 파일 수신자가 GnuPG 를 이용하여 파일 복호화



아래는 각 단계에 대한 설명과 관련 링크입니다.

1. sftp 서버 접속을 위하여, PuTTYgen 을 이용하여 keypair 생성

FTP 는 파일 전송을 위한 프로토콜입니다. 서버와 클라이언트 사이의 통신은 평문으로 전송되므로 보안에 취약합니다.

SFTP 는 SSH 상에서 FTP 를 이용하여, 통신을 할 때 통신 내용을 암호화 하는 과정을 거치는 것입니다.


파일 전송 프로토콜, 위키백과 - FTP

시큐어 셸, 위키백과 - SSH

What’s the Difference? FTP, SFTP, and FTP/S


SFTP 서버 구축 시에는 인증 방법을 패스워드 방식과 공개키 방식 중 하나로 선택 할 수 있습니다.

공개키 방식으로 인증 하고자 하면 개인키와 공개키가 필요한데, 이는 PuTTYgen 으로 생성할 수 있습니다.

공개키는 서버가, 개인키는 클라이언트가 보관합니다.


PuTTY Download Page

2. 파일 송신자가 freeSSHd 를 이용하여 sftp 서버 구축

이제 SFTP 서버를 구축합니다. 윈도우 환경에서 SFTP 서버를 구축 할 때에는 freeSSHd 를 이용 할 수 있습니다.


http://www.freesshd.com/- freeSSHd 공식 홈페이지

윈도우용 SSH(SCP) Server freeSSHd - freeSSHd 를 이용하여 설치 및 설정을 하는 방법


추천 - 1, 2 과정이 모두 나와 있는 YouTube 영상

How to SSH in Windows with freeSSHd, and PuTTY - 4/5

Private/Public Key SSH in Windows using freeSSHd and PuTTYgen - 5/5

3. 파일 암호화를 위하여, GnuPG 를 이용하여 keypair 생성

1, 2 는 파일을 송신하는 통신을 암호화 하는 과정입니다.

여기서 파일을 송신하기 전에 파일을 암호화 하는 과정을 추가하여, 조금 더 보안성을 향상시킬 수 있습니다.

만약 누군가 SFTP 에 접속할 키를 획득하여 파일이 제3자의 손에 들어가더라도, 파일을 복호화 할 키를 가지고 있지 않으면

파일의 내용을 알 수 없기 때문입니다.

파일 내용의 암, 복호화에는 GnuPG 를 이용합니다.


* 키 생성

gpg --gen-key

* 키 삭제 '개인키', '공개키' 입력 시에는 키의 이름이나 사용자명 등을 입력 할 수 있습니다.

gpg --delete-secret-key '개인키'

gpg --delete-key '공개키'

* 공개키 배포 : --armor 옵션을 사용하면 아스키 포맷으로 파일을 만들므로 전달 시 깨짐 현상을 방지할 수 있습니다.

gpg --armor --export '공개키'


https://www.gnupg.org/ - GnuPG 공식 홈페이지

The GNU Privacy Handbook - GnuPG 공식 홈페이지의 설명서

문서 암호화/복호화 - Gnupg - 설치부터 암, 복호화 과정을 설명합니다

How To Use GPG to Encrypt and Sign Messages on an Ubuntu 12.04 VPS

Quick'n easy gpg cheatsheet

솔라나라 GnuPG 소개 - GnuPG 에 대해 전반적으로 잘 정리 한 글입니다.

4. 파일 송신자가 GnuPG 를 이용하여 파일 암호화, sftp 서버에 업로드

파일 송신자는 3 에서 생성한 공개키로 파일을 암호화 합니다. freeSSHd 에서 설정 한 SFTP home path 에 파일을 업로드 하면 SFTP 서버에 업로드 됩니다.


* 공개키 등록

gpg --import '공개키 파일명'

* 공개키 리스트 확인

gpg --list-keys

* 파일 암호화 : --always-trust 옵션을 사용하면 서명을 하지 않아도 키를 사용할 수 있습니다.

gpg --always-trust --encrypt --recipient '공개키' '암호화 할 파일명'

5. 파일 수신자가 WinSCP 를 이용하여 송신자의 sftp 서버에 접속, 파일 다운로드

SFTP 서버에서 파일을 다운로드 할 때에는 WinSCP 클라이언트 프로그램을 이용할 수 있습니다. 공개키 방식으로 인증 할 때에는 클라이언트 사이드에 저장 된 개인키를 이용 해야 합니다. 개인키 이용 방법은 아래 "WinSCP 공개키 인증 방법" 동영상을 참고 해 주세요.


WinSCP 공식 홈페이지

원격지서버 파일관리 프로그램의 최강자 - WinSCP

Public Key Authentication using PuTTY and WinSCP - WinSCP 공개키 인증 방법

6. 파일 수신자가 GnuPG 를 이용하여 파일 복호화

3 에서 생성한 개인키로 수신한 파일을 복호화 합니다.


* 생성된 비밀키 확인

gpg --list-secret-keys

* 복호화

gpg -o 'outputfile' -d 'encryptedfile.gpg'



다 쓰고 보니 생각보다 내용이 기네요. 도움이 되었기를 바랍니다.