GPG 使用

GPG (GnuPG) 是一种加密工具,用于数据加密和数字签名。

密钥配置

# 生成密钥
gpg --full-generate-key

# 列出密钥
gpg --list-keys         # 列出公钥
gpg --list-secret-keys  # 列出私钥

# 导出密钥
gpg --armor --export [email/ID] > public.asc          # 导出公钥
gpg --export-secret-keys -a [email/ID] > private.asc  # 导出私钥
gpg --dearmor <key_file>                              # 将文本密钥转换为二进制密钥

# 导入密钥
gpg --import [key_file]    # 导入密钥
gpg --sign-key [email/ID]  # 为导入的密钥签名(信任)

# 删除密钥
gpg --delete-key [email/ID]         # 删除公钥
gpg --delete-secret-key [email/ID]  # 删除私钥

# 编辑密钥
gpg --edit-key [email/ID]

# 更改密钥密码
gpg --passwd [email/ID]

密钥 ID 是密钥指纹的后 8 位或者后 16 位,或者完整的密钥指纹。三者之一都可以用来表示密钥 ID。

加密/签名

# 加密
gpg --recipient [email/ID] --encrypt [input_file]  # 将生成一个 .gpg 文件,包含了加密的文件

# 解密
gpg --decrypt [gpg_file] > [output_file]

# 签名
gpg --sign --local-user [email/ID] [input_file]  # 将生成一个 .gpg 文件,包含了明文文件和文件签名

## 使用分离签名
gpg --detach-sign --local-user [email/ID] [input_file]          # 将生成一个 .sig 二进制文件
gpg --armor --detach-sign --local-user [email/ID] [input_file]  # 将生成一个 .asc 文本文件

# 验证签名
gpg --verify [signature_file] [input_file]  # 可以省略 input_file,此时会以 signature_file 的文件名推测输入文件名
                                            # 另外,也可以使用 --decrypt 在解密的同时验证签名

# 签名并加密
gpg --sign --recipient [email/ID] --encrypt [input_file]

# 解密并验证签名(和仅解密的命令一样)
gpg --decrypt [gpg_file] > [outputfile]

使用样例

列出所有公钥

$ gpg --list-keys
[keyboxd]
---------
pub   ed25519 2023-12-28 [SC]
      564B356FA6CEDE922C87DDA6ADA20EA03D7C43B
uid           [ultimate] User Name (Default GPG Key) <example@email.com>
sub   cv25519 2023-12-28 [E]
  • pub: 表示一个公钥(pubkey)的记录开始。
  • ed25519: 公钥使用的加密算法。ed25519 是一个采用 Edwards-curve Digital Signature Algorithm (EdDSA) 的签名算法,它著名的特点是速度快且安全。这种算法特别适用于创建数字签名。
  • 2023-12-28: 公钥的生成日期。
  • [SC]: S 表示签名(Sign),C 表示证书(Certify)。这意味着这个公钥可以用于数字签名和证书其他密钥。
  • 564B356FA6CEDE922C87DDA6ADA20EA03D7C43B: 公钥指纹。是识别公钥的一种更精确的方式。它是公钥的一个散列值,可用于在密钥服务器上查找公钥或验证公钥。
  • uid: 用户身份(User ID),包括名称和电子邮件地址。在这个例子中,表示公钥的拥有者是 “User Name” 且电子邮件地址为 “example@email.com”。
  • [ultimate]: 这表明信任级别为 “绝对”(ultimate)。在 GPG 中,你可以给一个密钥指定信任级别,以标识你对此密钥所有人身份验证的信任程度。“绝对” 表示你完全信任此密钥。
  • sub: 表示一个子密钥(subkey),它关联到上面的主公钥。子密钥可以用于加密,而主密钥仍然保持签名和证书的任务。
  • cv25519: 子密钥使用的加密算法,Curve25519 是一种用于创建公钥加密密钥的算法。cv25519 通常用于加密。
  • [E]: 子密钥的用途是加密(Encrypt)。

列出所有私钥

$ gpg --list-secret-keys
[keyboxd]
---------
sec   ed25519 2023-12-28 [SC]
      564B356FA6CEDE922C87DDA6ADA20EA03D7C43B
uid           [ultimate] User Name (Default GPG Key) <example@email.com>
ssb   cv25519 2023-12-28 [E]
  • sec:表示一个私钥(secret key)的记录开始。
  • ssb:私钥的子密钥(secret subkey)。

加密文件

gpg --recipient example@email.com --encrypt my_file

解密文件

gpg --decrypt my_file.gpg > my_file

对文件签名

gpg --armor --detach-sign --local-user example@email.com my_file

--local-user 及之后的 email/ID 可以省略

验证文件签名

gpg --verify myfile.asc my_file

my_file 可以省略

posted @ 2024-03-21 23:10  Undefined443  阅读(89)  评论(0编辑  收藏  举报