大家好!很高兴见到各位对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"
脚本分步详细分析 🔍
第一步:注册开发者的“官方认证标记” 🔑
# 注册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++的官方印章!”
第二步:设置下载文件信息 📝
# 安装文件和签名文件地址
EXE_URL="..."
SIG_URL="..."
EXE_FILE="..."
SIG_FILE="..."
这部分是预先将要下载的文件的互联网地址(URL)和要保存到我电脑上的文件名设置为变量(一种别名)的过程。
- EXE_URL: 这是我们要安装的Notepad++程序(.exe文件)的地址。
- SIG_URL: 这是数字签名文件(.sig文件)的地址。这个小文件里面包含了开发者用自己的“私钥(Private Key)”加密的信息。这个签名文件可以说就是“开发者盖的官方印章”本身。
等等!公开密钥和私钥? 🧐 数字签名由一对密钥(公开密钥、私钥)组成。
>
– 私钥(Private Key): 仅由开发者安全保管,用于对文件进行签名(盖章)时使用。
– 公开密钥(Public Key): 公开给任何人获取,用于验证签名(确认印章是否真实)时使用。
>
开发者用私钥锁定(签名)的内容,只能用与其配对的公开密钥才能打开(验证)。
第三步:下载安装文件和签名文件 📥
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)。
第四步:万众期待的签名验证! ✨
echo "[+] GPG 서명 검증 (키가 등록되어 있어야 함)"
gpg --verify "$SIG_FILE" "$EXE_FILE"
终于到了最关键的时刻。我们使用gpg –verify命令最终确认下载的文件是否真实。这个命令会做以下事情:
- 打开签名文件($SIG_FILE)。
- 使用在第一步中注册的开发者的公开密钥(“官方签名印章”)来验证签名。
- 如果签名有效,它会通过数学计算,比对该签名是否与安装文件($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
发表回复