暗网市场相关、PGP/GPG使用手记

近日在暗网dark web上闲逛,发现几个有名的市场,都必须提供自己的PGP公钥,才能与卖方交流及交易。特写篇博文记录下,以备查。Tor在此处下载

暗网导航网站 http://darkfailenbsdla5mal2mxn2uz66od5vtzd5qozslagrfzachha3f3id.onion/ 或  https://dark.fail/

暗网购物圣经指南  http://biblemeowimkh3utujmhm6oh2oeb3ubjw2lpgeq3lahrfr2l6ev6zgyd.onion/

网购搜索及暗网市场介绍Recon  http://recon222tttn4ob7ujdhbn3s4gjre7netvzybuvbq2bcqwltkiqinhad.onion/

类似Reddit的暗网Dread 网站

http://dreadytofatroptsdj6io7l3xptbet6onoyno2yv7jicoxknyazubrad.onion/

Dread上暗网市场的论坛

http://dreadytofatroptsdj6io7l3xptbet6onoyno2yv7jicoxknyazubrad.onion/d/DarkNetMarkets

Dread上推荐的暗网市场 ,请参考下面第七点使用PGP验证

国外网站推荐的十大暗网论坛 。

一、什么是PGP/GPG

1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP。这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。

GPG有许多用途,本文主要介绍文件加密。至于邮件的加密,不同的邮件客户端有不同的设置,请google。

本文的使用环境为Linux命令行。如果掌握了命令行,WindowsMac OS 客户端,就非常容易掌握。

二、安装

GPG有两种安装方式。可以下载源码,解压后,进入该文件夹,自己编译安装。

./configure
make
make install

也可以安装编译好的二进制包。

 # Debian / Ubuntu 环境
 sudo apt install gnupg

 # Fedora 环境
 yum install gnupg

安装完成后,键入下面的命令:

gph  --help

如果屏幕显示GPG的帮助,就表示安装成功。

三、生成密钥

安装成功后,就可以生成自己的密钥。

gpg  --full-generate-key 

回车以后,会跳出一大段文字:

gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

请选择您要使用的密钥类型:
   (1) RSA 和 RSA (默认)
   (2) DSA 和 Elgamal
   (3) DSA(仅用于签名)
   (4) RSA(仅用于签名)
  (14) Existing key from card
您的选择是?

 第一段是版权声明,然后让用户自己选择加密算法。默认选择第一个选项,表示加密和签名都使用RSA算法。

然后,系统就会问你密钥的长度。

您想要使用的密钥长度?(3072) 

密钥越长越安全,默认是3072位。

接着,设定密钥的有效期。

请设定这个密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 

如果密钥只是个人使用,并且你很确定可以有效保管私钥,建议选择第一个选项,即永不过期。回答完上面三个问题以后,系统让你确认。

这些内容正确吗? (y/N) 

输入y,系统就要求你提供个人信息。

您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合成用户标识,如下所示:

  "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
  真实姓名:
  电子邮件地址:
  注释:

"真实姓名"填入你姓名的英文写法,"电子邮件地址"填入你的邮件地址,"注释"这一栏可以空着。然后,你的"用户ID"生成了。

 系统会让你最后确认一次。

电子邮件地址: gpgpgp@gmail.com
您选定了此用户标识:
    “gpgpgp <gpgpgp@gmail.com>”

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?

输入O表示"确定"。

接着,系统会让你设定一个私钥的密码。这是为了防止误操作,或者系统被侵入时有人擅自动用私钥。

您需要一个密码来保护您的私钥:

 然后,系统就开始生成密钥了,这时会要求你做一些随机的举动,以生成一个随机数。

我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
gpg: 密钥 A701244343E30550 被标记为绝对信任
gpg: 吊销证书已被存储为‘/home/abc/.gnupg/openpgp-revocs.d/B7F67707531D7C3C54129939A701244343E30550.rev’
公钥和私钥已经生成并被签名。

pub   rsa3072 2021-05-20 [SC]
      B7F67707531D7C3C54129939A701244343E30550
uid                      gpgpgp <gpgpgp@gmail.com>
sub   rsa3072 2021-05-20 [E]

 很快系统提示密钥已经生成了。

请注意上面的字符串"B7F67707531D7C3C54129939A701244343E30550",这是"用户ID"的Hash字符串,可以用来替代"用户ID"。

这时,最好再生成一张"撤销证书",以备以后密钥作废时,可以请求外部的公钥服务器撤销你的公钥。

gpg  --gen-revoke [用户ID]

上面的"用户ID"部分,可以填入你的邮件地址或者Hash字符串(以下同)。

四、密钥管理

4.1 列出密钥

list-keys参数列出系统中已有的密钥.

gpg  --list-keys

显示结果如下:

/home/abc/.gnupg/pubring.kbx
----------------------------

pub   rsa3072 2021-05-20 [SC]
      B7F67707531D7C3C54129939A701244343E30550
uid           [ 绝对 ] gpgpgp <gpgpgp@gmail.com>
sub   rsa3072 2021-05-20 [E]

如果你要从密钥列表中删除某个密钥,可以使用delete-keys参数。

gpg  --delete-secret-keys [用户ID] 从私钥钥匙环里删除密钥
gpg  --delete-keys [用户ID]  从公钥钥匙环里删除密钥

4.2 输出密钥

公钥文件(.gnupg/pubring.kbx)以二进制形式储存,armor参数可以将其转换为ASCII码显示。

gpg  --armor --output public-key.txt --export [用户ID]

"用户ID"指定哪个用户的公钥,output参数指定输出文件名(public-key.txt)。

类似地,export-secret-keys参数可以转换私钥。

4.3 上传公钥

公钥服务器是网络上专门储存用户公钥的服务器。send-keys参数可以将公钥上传到服务器。

gpg  --send-keys [用户ID] 

  使用上面的命令,你的公钥就被传到了服务器,然后通过交换机制,所有的公钥服务器最终都会包含你的公钥。

由于公钥服务器没有检查机制,任何人都可以用你的名义上传公钥,所以没有办法保证服务器上的公钥的可靠性。通常,你可以在网站上公布一个公钥指纹,让其他人核对下载到的公钥是否为真。fingerprint参数生成公钥指纹。

gpg  --fingerprint [用户ID]

4.4 导入密钥

除了生成自己的密钥,还需要将他人的公钥或者你的其他密钥导入系统。这时可以使用import参数。

gpg  --import [密钥文件]

为了获得他人的公钥,可以让对方直接发给你,或者到公钥服务器上寻找。

gpg  --search-keys [用户ID]
正如前面提到的,我们无法保证服务器上的公钥是否可靠,下载后还需要用其他机制验证。

4.5 备份密钥

导出GPG私钥(私钥已经包含公钥)
gpg -o private.gpg --export-options backup --export-secret-keys [用户ID]
执行该命令后,在当前目录下生成private.gpg备份私钥。该命令中的--export-options backup参数,可以确保导出恢复GPG密钥所需的所有数据。
如果你还设置有口令保护私钥的话,还会弹出一个提示窗口让你输入口令,才能完成导出。导出完成后,即可把private.gpg放到一个安全的地方保存起来。

恢复私钥
gpg --import-options restore --import private.gpg
执行该命令后,GPG将从当前目录下的private.gpg导入密钥(这里的私钥已经包含公钥)。参数--import-options restore确保GPG完整恢复密钥。
同样的,如果私钥设置有保护口令的话,还会弹出一个提示窗口让你输入口令,才能完成导入。
导入密钥后还要设置密钥的信任状态。
gpg --edit-key [用户ID] trust quit
 五、加密和解密

5.1 加密

假定有一个文本文件demo.txt,怎样对它加密呢?

encrypt参数用于加密。

gpg  --armor --recipient [用户ID] --output demo.en.txt --encrypt demo.txt

 recipient参数指定接收者的公钥,output参数指定加密后的文件名,encrypt参数指定源文件。运行上面的命令后,demo.en.txt就是已加密的文件,可以把它发给对方。armor参数将加密后的文件转换为ASCII码显示。

5.2 解密

对方收到加密文件以后,就用自己的私钥解密。

gpg  --output demo.txt --decrypt demo.en.txt 

decrypt参数指定需要解密的文件,output参数指定解密后生成的文件。运行上面的命令,demo.txt就是解密后的文件。也可以不用output参数,直接在终端显示解密内容。

六、签名

6.1 对文件签名

有时,我们不需要加密文件,只需要对文件签名,表示这个文件确实是我本人发出的。sign参数用来签名。

gpg --clearsign demo.txt

  运行上面的命令后,当前目录下生成demo.txt.asc文件,这就是签名后的文件。clearsign参数,生成ASCII码的签名文件

如果想生成单独的签名文件,与文件内容分开存放,可以使用detach-sign参数。

gpg --armor --detach-sign demo.txt

6.2 签名+加密

上一节的参数,都是只签名不加密。如果想同时签名和加密,可以使用下面的命令。

gpg --local-user [发信者ID] --recipient [接收者ID] --armor --sign --encrypt demo.txt

 local-user参数指定用发信者的私钥签名,recipient参数指定用接收者的公钥加密,armor参数表示采用ASCII码形式显示,sign参数表示需要签名,encrypt参数表示指定源文件。

6.3 验证签名

我们收到别人签名后的文件,需要用对方的公钥验证签名是否为真。verify参数用来验证。

 gpg --verify demo.txt.asc 

   七、使用PGP对暗网网址进行验证,以https://dark.fail/为例。

          网站顶部有dark的onion域名,点击域名后的verify链接,会打开网址的PGP签名文件。一般地,对于一个onion域名,如MarketOnionAddress.onion,其签名文件在MarketOnionAddress.onion/mirrors.txt 

          将其内容全部复制到一个新的txt文件,保存为如s.txt,运行命令

 gpg --verify s.txt

          由于还没有导入网站的PGP公钥,所以会报错

gpg: 签名建立于 Thu Oct 27 22:31:16 2022 +08
gpg:          使用 RSA 密钥 7D6D036C2ED1E8ECA3133B5D65C82325B01972C5
gpg: 无法检查签名:缺少公钥
            有二种方法可以导入网站的公钥,一是在网站底部找到公钥文件链接。一般地,对于一个onion域名,如MarketOnionAddress.onion,其公钥在MarketOnionAddress.onion/pgp.txt
 

          点击打开后将其内容全部复制到一新的txt文件中,如p.txt,运行命令导入即可
gpg  --import p.txt

          还有一种方法是直接到网上下载公钥。因为前面的报错信息里面已经显示出了公钥的ID,运行以下命令就可下载下来

gpg --receive-keys 7D6D036C2ED1E8ECA3133B5D65C82325B01972C5 

         导入公钥后,再次运行  gpg --verify 即可。出现“Good signature(完好的签名)” 字样,表示通过检验。实践中,这二种方法最好对比使用,以检验公钥的真实性

评论

热门博文

Xray安装配置VLESS-XTLS-Vision及VLESS-XTLS-uTLS-REALITY

V2Ray安装配置VMESS-TLS及VMESS-TLS-WS

在VPS上轻松搭建L2TP/IPSec图文教程(通吃各种架构的VPS,包括KVM,OpenVZ等)