본문 바로가기
일반IT/IT보안

다운로드 파일, 정말 믿어도 될까요? GPG 서명으로 안전하게 검증하기 🛡️

by gasbugs 2025. 10. 7.

안녕하세요! IT 보안에 관심이 많은 여러분, 반갑습니다. 😊

우리는 매일 수많은 소프트웨어를 인터넷에서 다운로드합니다. 편리하지만, 혹시 이런 생각해 보신 적 없나요? "내가 지금 다운로드하는 이 파일이 정말 개발자가 만든 원본 파일이 맞을까? 누군가 중간에 악성코드를 심어놓은 건 아닐까? 😱"

 

이런 불안감을 해결해 주는 아주 강력하고 신뢰성 있는 방법이 바로 GPG(GNU Privacy Guard)를 이용한 디지털 서명 검증입니다. 오늘은 간단한 Bash 스크립트를 통해 이 과정이 어떻게 이루어지는지 쉽고 자세하게 파헤쳐 보겠습니다!

 


스크립트 한눈에 보기

오늘 분석해 볼 스크립트는 바로 이것입니다. 유명 텍스트 편집기인 Notepad++를 안전하게 다운로드하고 검증하는 과정을 담고 있죠.

#!/bin/bash

# gpg 서버 등록
wget https://notepad-plus-plus.org/gpg/nppGpgPub.asc
gpg --import nppGpgPub.asc


# 설치 파일과 서명 파일 주소
EXE_URL="https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.8.5/npp.8.8.5.Installer.x64.exe"
SIG_URL="https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.8.5/npp.8.8.5.Installer.x64.exe.sig"
EXE_FILE="npp.8.8.5.Installer.x64.exe"
SIG_FILE="npp.8.8.5.Installer.x64.exe.sig"

echo "[+] 파일 다운로드"
curl -L -o "$EXE_FILE" "$EXE_URL"
curl -L -o "$SIG_FILE" "$SIG_URL"

echo "[+] GPG 서명 검증 (키가 등록되어 있어야 함)"
gpg --verify "$SIG_FILE" "$EXE_FILE"

스크립트 단계별 상세 분석 🔍

1단계: 개발자의 '공식 인증 마크' 등록하기 🔑

# gpg 서버 등록
wget https://notepad-plus-plus.org/gpg/nppGpgPub.asc
gpg --import nppGpgPub.asc

가장 먼저 하는 일은 Notepad++ 개발자의 공개 키(Public Key)를 다운로드하고 내 GPG 키체인에 등록하는 것입니다.

  • wget https://.../nppGpgPub.asc: wget은 웹에서 파일을 다운로드하는 명령어입니다. 여기서 nppGpgPub.asc 파일이 바로 개발자의 '공개 키' 파일입니다. 이걸 '공식 인증 마크'나 '공식 서명 도장'이라고 생각하면 이해하기 쉬워요. 이 도장이 있어야 나중에 받은 파일이 진짜인지 아닌지 대조해볼 수 있겠죠?
  • gpg --import nppGpgPub.asc: 다운로드한 '공식 서명 도장'을 내 컴퓨터의 GPG 프로그램에 등록하는 과정입니다. "이게 바로 Notepad++의 공식 도장이야!"라고 컴퓨터에게 알려주는 셈이죠.

2단계: 다운로드할 파일 정보 설정하기 📝

# 설치 파일과 서명 파일 주소
EXE_URL="..."
SIG_URL="..."
EXE_FILE="..."
SIG_FILE="..."

이 부분은 다운로드할 파일들의 인터넷 주소(URL)와 내 컴퓨터에 저장할 파일 이름을 변수(일종의 별명)로 미리 정해두는 과정입니다.

  • EXE_URL: 우리가 설치할 Notepad++ 프로그램(.exe 파일)의 주소입니다.
  • SIG_URL: 디지털 서명 파일(.sig 파일)의 주소입니다. 이 작은 파일 안에는 개발자가 자신의 '비밀 키(Private Key)'로 암호화한 정보가 들어있습니다. 이 서명 파일이 바로 '개발자가 찍은 공식 도장' 그 자체라고 할 수 있습니다.

잠깐! 공개 키와 비밀 키? 🧐 디지털 서명은 한 쌍의 키(공개 키, 비밀 키)로 이루어집니다.

  • 비밀 키(Private Key): 개발자만 안전하게 보관하며, 파일을 서명(도장을 찍을 때)할 때 사용합니다.
  • 공개 키(Public Key): 누구나 가져갈 수 있도록 공개하며, 서명을 검증(도장이 진짜인지 확인할 때)할 때 사용합니다.

개발자가 비밀 키로 잠근(서명한) 것은 오직 그와 쌍을 이루는 공개 키로만 열어볼(검증할) 수 있습니다.

3단계: 설치 파일과 서명 파일 다운로드하기 📥

echo "[+] 파일 다운로드"
curl -L -o "$EXE_FILE" "$EXE_URL"
curl -L -o "$SIG_FILE" "$SIG_URL"

이제 curl이라는 명령어를 사용해 앞에서 설정한 주소로부터 두 개의 파일을 실제로 다운로드합니다.

  • curl -L -o [저장할 이름] [다운로드 주소]: curl은 wget처럼 파일을 다운로드하는 강력한 도구입니다. 이 명령을 통해 우리는 설치 파일 원본(npp.8.8.5.Installer.x64.exe)과 그 파일의 진품 증명서인 서명 파일(...exe.sig)을 모두 내려받습니다.

4단계: 대망의 서명 검증! ✨

echo "[+] GPG 서명 검증 (키가 등록되어 있어야 함)"
gpg --verify "$SIG_FILE" "$EXE_FILE"

드디어 가장 중요한 순간입니다. gpg --verify 명령어로 다운로드한 파일이 진짜인지 최종 확인합니다. 이 명령어는 다음과 같은 일을 합니다.

  1. 서명 파일($SIG_FILE)을 열어봅니다.
  2. 1단계에서 등록해 둔 개발자의 공개 키('공식 서명 도장')를 사용해 서명을 확인합니다.
  3. 서명이 유효하다면, 그 서명이 설치 파일($EXE_FILE)의 것과 일치하는지 수학적으로 계산하여 대조합니다.

결과는 어떻게 나올까요?

  • 성공: gpg: Good signature from "Notepad++ ..." 이 메시지가 보인다면 성공입니다! 다운로드한 파일은 개발자가 만든 원본 그대로이며, 중간에 아무도 건드리지 않았다는 의미입니다. 안심하고 설치해도 좋습니다. 🎉
  • 실패: gpg: BAD signature from "Notepad++ ..." 이 메시지가 뜬다면 심각한 경고입니다! 🚩 파일이 개발자가 서명한 이후 변경되었거나, 서명 자체가 가짜일 수 있습니다. 절대로 파일을 실행하지 말고 즉시 삭제해야 합니다.

왜 이렇게까지 해야 할까요? 🤔

"그냥 공식 홈페이지에서 받으면 안전한 거 아니야?"라고 생각할 수 있습니다. 하지만 해커가 공식 다운로드 서버를 해킹하거나, 사용자의 인터넷 연결 중간을 가로채서(중간자 공격, Man-in-the-Middle) 파일을 바꿔치기할 가능성은 언제나 존재합니다.

 

GPG 서명 검증은 이런 모든 위협으로부터 우리를 보호해 줍니다. 해커가 설치 파일을 악성코드로 바꿀 수는 있어도, 개발자의 '비밀 키' 없이는 유효한 '디지털 서명'을 절대 만들어낼 수 없기 때문이죠.

 

이제 여러분은 그냥 다운로드하는 것을 넘어, 파일의 '족보'를 확인하는 현명한 사용자가 되셨습니다. 중요한 소프트웨어를 받을 땐 꼭 GPG 서명을 확인하는 습관을 들여보세요! 여러분의 컴퓨터는 훨씬 더 안전해질 겁니다. 💪

 

태그: GPG, PGP, Bash, Shell Script, Cybersecurity, Software, Verification, Digital Signature, Notepad++, Security