안녕하세요! 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 명령어로 다운로드한 파일이 진짜인지 최종 확인합니다. 이 명령어는 다음과 같은 일을 합니다.
- 서명 파일($SIG_FILE)을 열어봅니다.
- 1단계에서 등록해 둔 개발자의 공개 키('공식 서명 도장')를 사용해 서명을 확인합니다.
- 서명이 유효하다면, 그 서명이 설치 파일($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
'일반IT > IT보안' 카테고리의 다른 글
| 클라이언트와 서버의 TLS 버전이 달라도 괜찮을까? 🤔 mTLS 통신의 비밀 (0) | 2025.11.04 |
|---|---|
| [IT 상식] PCI DSS? GDPR? 헷갈리는 보안 인증, 5분 만에 완벽 정리! 💳 (1) | 2025.10.08 |
| 🛡️ Express.js 서버, CSRF 공격으로부터 안전하게 지키는 방법 (코드 분석) (0) | 2025.10.05 |
| ⛑️ 내 Express 서버에 안전모 씌우기: Helmet 미들웨어 A to Z (0) | 2025.10.05 |
| 🛡️ OffSec 자격증의 모든 것: 가격, 시험 방식 (객관식? 놉!) 총정리 (1) | 2025.10.04 |