Skip to main content

📦GPG加解密操作和数字签名基础流程学习

·169 words
CTF
Yalois
Author
Yalois
freedom
Table of Contents

加解密
#

以发送方和接收方表示两边

简单流程概括
#

  • 接收方生成密钥对,导出公钥分享给发送方。
  • 发送方接收公钥,导入公钥。使用公钥对数据进行加密,发送给接收方。
  • 接收方使用私钥对数据进行解密。

情境操作
#

情景代入:xiang需要发送一份重要文件给yalois

  • 接收方:yalois
  • 发送方:xiang
  1. yalois生成密钥对(如果yalois没有的话)

gpg --full-generate-key 按照提示选择密钥类型、大小、过期时间等,最后输入用户信息和密码。

image-20241008201046453
这里是Yalois的基本信息。 生成之后可以通过gpg --list-keys来列出密钥。

  1. yalois导出公钥给xiang。

gpg --export [用户ID] > public_key.asc 这个导出的是二进制数据。 可以用gpg --export -a [用户ID]> public_key.txt以ASCII码导出。

image-20241008201053902

GPG有网络上专门储存用户公钥的服务器。我直接发送给了xiang。

  1. xiang导入Yalois的公钥

gpg --import [密钥文件]

image-20241008201112816

4.xiang使用公钥对文件进行加密发送

gpg --encrypt --recipient [公钥用户ID] [加密文件]

message.txt

Yalois是这个世界上最帅的人。

我用gpg --encrypt --recipient Yalois message.txt用Yalois的公钥加密。 会生成message.txt.gpg文件。把这个文件发给Yalois。

  1. Yalois对xiang发来的文件进行解密

gpg --decrypt message.txt.gpg 解密会要求输入创建密钥对时设置的密码。

image-20241008201125771

GPG对文件进行数字签名
#

原理:

数字签名的工作过程通常包括以下步骤:
1. 生成哈希:对消息内容生成一个哈希值(摘要),这个哈希值是消息内容的唯一表示。
2. 加密哈希:使用发送者的私钥对哈希值进行加密,生成数字签名。
3. 发送消息:将 原始消息 和 数字签名 一起发送给接收者。
4. 验证签名:接收者使用发送者的公钥解密数字签名,得到哈希值,并对接收到的消息重新生成哈希值。若两个哈希值匹配,则验证成功,表明消息未被篡改且确实来自发送者。
gpg --sign message.txt #对文件进行签名 生成message.txt.gpg签名文件
gpg --verify message.txt.gpg #验证文件签名

可以发现,在数字签名中,使用私钥进行加密的。这确保有公钥的每个人都能解密。

GPT例子:
Bob 发送一条重要的消息,确保这条消息的真实性和完整性。
场景:Alice 向 Bob 发送一条重要消息
1. 生成密钥对:
   - Alice 生成一对密钥:一个公钥和一个私钥。
   - 公钥用于加密和验证签名,私钥用于签名。

2. 撰写消息:
   - Alice 撰写了一条消息,例如:“我将在明天的会议上提出新的项目计划。”

3. 生成哈希值:
   - Alice 使用哈希函数(如 SHA-256)对消息内容生成一个哈希值。假设生成的哈希值为 `abc123`。

4. 对哈希值进行签名:
   - Alice 使用自己的私钥对这个哈希值进行加密,生成数字签名。假设生成的数字签名为 `signatureXYZ`。

5. 发送消息和签名:
   - Alice 将原始消息和数字签名一起发送给 Bob:
     - 消息: “我将在明天的会议上提出新的项目计划。”
     - 数字签名: `signatureXYZ`

6. 验证签名:
   - Bob 收到消息后,首先使用 Alice 的公钥对数字签名进行解密,得到哈希值 `abc123`。
   - 然后,Bob 对收到的消息内容进行哈希运算,得到新的哈希值。
   - 如果这两个哈希值相同,Bob 就可以确认:
   - 消息确实是由 Alice 发送的(身份验证)。
   - 消息在传输过程中没有被篡改(数据完整性)。

分享我的公钥
#

欢迎各位用我的公钥加密信息后base64编码发在评论区。

-----BEGIN PGP PUBLIC KEY BLOCK-----

mDMEZwUYbRYJKwYBBAHaRw8BAQdAwBLK8dtRQVydYhnryrOLokAw6Dky8Y5ZQsVz
fBTnQrq0IllhbG9pcyAoMSkgPHlhbG9pcy54eUBmb3htYWlsLmNvbT6IkwQTFgoA
OxYhBHiRpfwkIQGQVJ94tpg/l5yHph3XBQJnBRhtAhsDBQsJCAcCAiICBhUKCQgL
AgQWAgMBAh4HAheAAAoJEJg/l5yHph3XPsIBALeC9buypiArm8sqHcn8buzw/GWn
mv+5KFjcDQLQKKl9AP9jmAtnnXIOZSClalxhssKgrezG9I3A//tVzqWp42RICLg4
BGcFGG0SCisGAQQBl1UBBQEBB0CXRSf1JAdKg/U9oFkwzcGPKW0Lrb2hhaIucRcc
vS50NgMBCAeIeAQYFgoAIBYhBHiRpfwkIQGQVJ94tpg/l5yHph3XBQJnBRhtAhsM
AAoJEJg/l5yHph3X52QBAJDkrZ9MOtX5JCdb7Shy76Zs5AdGCJyaoscrRGeA1YmG
AQCCTvoBA4nUX2xffB+wXrfUrEMicSE1Zw6z+AK8li0aBg==
=cuG8
-----END PGP PUBLIC KEY BLOCK-----