Linux 服务器中的 PGP

PGP in Linux server

我是 PGP 的新手,我需要一些帮助。
我收到了一个扩展名为 .asc 的文件,它是我从另一个 pgp 用户的邮件中收到的,说明是 文件必须加密并签名
当前用户正在使用 ftp 服务器,我们在 opt/PGP/Keyrings 文件夹中有 .asc 文件,在 opt/PGP 文件夹中有 secring.skr 和 pubring.pkr linux 服务器.
将来他们计划转移到 SFTP 服务器,他们给了我们这个新的 .asc 文件来处理。
问题是我如何使用他们发送的 .asc 文件加密数据?
注意:
我已经有以下代码来加密数据:

opt/PGP/pgp -es +force "PATH OF FILE TO ENCRYPT" '<RECIPIENT_ID KEY>' -z 'passphrase'

如何使用上述命令进行加密?它在内部使用哪些文件来加密数据?

如何将 .asc 文件用于我的新程序?
另外,如果我使用新的 .asc 文件,我现有的 secring.skr 和 pubring.pkr 文件会被覆盖吗?这个问题假设 .skr 和 .pkr 文件是从 .asc 文件生成的。
我的假设是否正确?
是否可以有更多的 .pkr 文件,如果是的话,我如何让我的脚本指向特定的 .pkr 文件进行加密?

公平警告:我不是专家,我在 PGP 兼容系统方面的经验是特定于 GnuPG 的,因此语法可能不会与您的实现 100% 相同,但希望这会阐明您的情况。

首先,PGP使用非对称加密方案。这意味着它使用不同的密钥来加密和解密数据。为此,用户必须生成一对 (2) 密钥,它们的 public 和私钥。使用一对 public 密钥加密的数据只能使用相应的私钥解密,反之亦然。

一个典型的情况可能是这样的:Alice 和 Bob 以一种让他们合理确定 Alice 的 public 密钥确实属于 Alice 和 Bob 的方式相互交换 public 密钥鲍勃。后来,Alice 想向 Bob 发送一条消息(或文件),但该消息包含她只希望 Bob 阅读的敏感信息。为了安全地完成传输,她使用 Bob 的 public 密钥对消息进行加密。现在,任何人都可以读取加密消息的唯一方法是首先使用 Bob 的密钥对其进行解密。假设 Bob 妥善保管他的密钥,其他人将无法破译加密的消息,即使他们拦截了它。

我怀疑您收到的 .asc 文件是其他用户的 public 密钥,您需要将其发送给他们 messages/files。您可以通过在文本编辑器(或 Linux 上的 less/cat/head/tail 等)中打开它并阅读内容来验证这一点。如果 .asc 文件的第一行类似于 ----BEGIN PGP PUBLIC KEY BLOCK---- 最后一行是 ----END PGP PUBLIC KEY BLOCK----那么您就知道那是他们的 public 键。如果是,您需要将其导入您的密钥环,以便您可以为该用户加密消息。在 gpg/gpg2 中看起来像这样:

gpg2 --import sharedKey.asc

也有可能他们发送给您的 .asc 文件实际上是某种加密信息。如果是,您将需要与他们加密的 public 密钥相对应的私钥才能读取它,但听起来您刚刚开始设置,所以情况并非如此.

将收件人的 public 密钥导入密钥环后,如果您还没有密钥对,则需要生成自己的 public/private 密钥对。这只需要发生一次,不是每条消息一次。在 gpg2 中,启动生成过程的命令是

gpg2 --gen-key

此命令将引导您完成一些设置细节,然后创建密钥对,该密钥对将用于证明您通过签名发送了任何给定文件。签名是一个涉及使用您的私钥更改您发送的消息的过程。因为您使用您的私钥签名,任何拥有您的 public 密钥的人都可以解密签名,如果解密成功,他们可以确定签署文档的人控制了您的私钥(希望这意味着是您本人) .

生成自己的密钥对并导入收件人的 public 密钥后,您就可以加密并签名 files/messages 以便将它们安全地发送给收件人。我不熟悉您提供的代码中的所有语法,但我会解释我认为我从中理解的内容。

-e 加密指定文件

-s 对加密文件进行签名

"Path of file to encrypt" 需要加密正确的文件

'Recipient_id key' 需要为那个人加密文件

-z 压缩结果

'passphrase' 使用您的密钥进行签名所需的密码

我对 +force 什么都不知道。

导入他们的 public 密钥后,您可以在密钥环中找到收件人 ID。在 gpg 中你会使用

gpg2 -k

获取密钥环中所有 public 密钥的列表。每个密钥的 id 都是一个 8 位十六进制值,列在该密钥使用的 rsa 级别之后。即

pub rsa4096/DE936295 2017-11-28 [SC] [expires: 2018-11-28]

密钥 ID 为 DE936295。

导入 public 密钥或生成新的密钥对不应覆盖钥匙串中的任何内容。相反,它将添加新条目。不过,如果您感到紧张,不妨考虑制作钥匙圈的备份副本。如果您确实丢失了私钥,您将无法再解密任何使用匹配的 public 密钥加密的消息。你应该有像

这样的选项
gpg2 --export-secret-keys --armor -o mykey.priv.asc
gpg2 --export --armor -o pubKey.pub.asc

帮助您备份密钥。

TL;DR

  1. 导入收件人的 public 密钥。
  2. 生成您自己的 private/public 密钥对。
  3. 与收件人分享您的 public 密钥。
  4. 运行 用于为该收件人加密和签名的脚本 files/messages。
  5. 将生成的文件移动到您的 SFTP 目录。

希望对您有所帮助,尽管我 99% 确定此处提供的语法不会完全适合您的应用程序,但它应该为您指明正确的方向。