如何使用 Python-GnuPG加密、签名数据和通讯

如何使用 Python-GnuPG加密、签名数据和通讯

基于PGP的加密与解密

介绍

GnuPG 包[1]为生成和存储加密密钥提供了完整的解决方案。它还允许您对数据和通信进行加密和签名。

在本教程中,您将创建一系列使用 Python 3 和 python-gnupg[2] 模块的脚本。这些脚本将允许您对文件进行签名和加密,并验证文件是否被修改。

PGP、OpenPGP 和 GnuPG 加密之间的区别

对于这三种流行的加密形式,它们的相似之处在于 OpenPGP 是 PGP 的一种开放替代方案(我们稍后会解释原因),而 GnuPG 是基于 OpenPGP 标准的。迷茫了吗?

什么是 PGP?

Pretty Good Privacy[3],也称为 PGP,最初由 Phil Zimmerman 于 1991 年创建,作为人们在不被窃听的情况下进行交流的一种方式。今天,它被用来加密和解密短信和电子邮件。简而言之,这个想法是,当您想在某处发送加密的消息或文件时,您可以使用随机密钥对其进行加密,然后使用接收者的公钥对其进行加密。此公钥只能使用只有指定的私钥才能解密  。

这样,即使人们知道您的公钥,接收者也是唯一可以解密文件或消息的人。PGP 的问题是它不是一项公开专利,目前由赛门铁克持有。再回到 1990 年代,美国曾经有一项法律限制密码技术在美国以外的出口。PGP 在由 Phil Zimmerman 创建后很快就在海外被使用。Zimmerman 发布了 PGP 的源代码,允许任何一方基于原始 PGP 源代码创建自己的加密软件版本。由于源代码受到第一修正案的保护,因此自这些新版本以来,美国政府确实无能为力。几年后,这就是 OpenPGP 发挥作用的地方。

什么是 OpenPGP?

由于前面提到的专利问题,PGP 并不总是适合国际使用。这就是为什么在 Internet 工程任务组 (IETF) 中成立 OpenPGP 工作组[4]的原因。这消除了获得 PGP 许可的需要,并绕过了当时美国一些过时的法律。

如今,许多电子邮件客户端都提供对 OpenPGP 的支持,OpenPGP 仍然受到支持并正在积极开发中。

OpenPGP 是一种基于密钥的加密方法,用于加密文件,以便只有其预期的接收者才能接收和解密它们。OpenPGP 被广泛用于保护电子邮件通信,但它的技术也可以应用于 FTP。

OpenPGP 通过使用两个加密密钥来保护文件。公钥用于加密文件,以便只有其对应的私钥才能解密文件。

与 SSL 和 SSH 不同,OpenPGP 不是一种连接方式,而是一种在上传文件之前对其进行加密的方法。因此,OpenPGP 模式可以与标准 FTP、SSL 或 SSH 连接结合使用。

如您所见,它类似于 PGP 的工作方式。现在,由于 OpenPGP 是由 PGP 社区支持和开发的 IETF 支持的加密标准,因此当然还有其他标准从 OpenPGP 分支出来。最常见的是称为 GnuPG 的开源加密标准,也称为 Gnu Privacy Guard,简称 GPG。

什么是 GnuPG?

GnuPG[5] 是公司可以使用的另一种基于 OpenPGP 的免费加密标准。GnuPG 可替代赛门铁克的 PGP。主要区别在于支持的算法。然而,GnuPG 在设计上与 PGP 配合得很好。由于 GnuPG 是开放的,一些企业更喜欢赛门铁克 PGP 附带的技术支持和用户界面。需要注意的是,GnuPG 和 PGP 的兼容性之间存在一些细微差别,例如某些算法之间的兼容性,但在大多数应用程序(例如电子邮件)中,都有解决方法。一种这样的算法是 IDEA 模块[6],由于专利问题,它没有包含在 GnuPG 中。

准备工作

  • 安装 GnuPG 程序

    • macOS,可以通过 brew install gpg 命令安装

    • Windows,建议下载安装 Gpg4win
    • Ubuntu 或者 Debian : sudo apt install gnupg
    • centossudo yum install gnupg2
  • 创建 GnuPG 密钥对

不管 macOS、Linux 还是 Windows,都可以通过运行这个命令来生成密钥对

gpg --full-generate-key

Windows 下还可以通过运行 Gpg4win 的 Kleopatra 来生成密钥对。

macOS 和 Linux 可以从这里寻找自己喜欢的 GUI, https://www.openpgp.org/software/。

  • 安装 python-gnupg

    pip install python-gnupg

python-gnupg 是对 gnupg 的封装。

代码实现

接下来,我们按如下步骤来实现代码,

  1. 为文件创建分离的签名,通过将签名与文件分离来为签名过程添加一层安全性。
  2. 加密文件
  3. 解密文件
  4. 验证分离的签名。
  • 签名

分离签名选项(–detach-sign)可用于为每个人提供在没有公钥的情况下查看消息的选项。如果需要,这将创建一个单独的签名文件,用于验证原始消息。在最简单的形式中,该文件包含原始消息的散列,并使用私钥加密。任何拥有公钥的人都可以打开签名,然后比较哈希值来验证签名文件的完整性。


如何使用 Python-GnuPG加密、签名数据和通讯

import gnupg
from  pathlib import  Path
gpg = gnupg.GPG(gnupghome="/Users/steven/.gnupg")
path ="abc.txt"

with open(path, "rb"as f:
  signed = gpg.sign_file(f,passphrase="qwert",detach = True, output=path+".sig")
  print ('status: ', signed.status)
  • /Users/steven/.gnupg 为 gnupg 存放密钥的位置,默认为当前用户的.gnupg 目录。

  • passphrase="qwert" 为密钥中私钥加密密码

  • detach = True 创建分离的签名

返回

status:  signature created
  • 加密

import gnupg

gpg = gnupg.GPG(gnupghome="/Users/steven/.gnupg")
path ="abc.txt"

with open(path, 'rb'as f:
    status = gpg.encrypt_file(
        f, passphrase="qwert",recipients=['Steven Lee <steven@alitrack.com>'],
        output=path+".gpg"
    )
    print ('status: ', status.status)

recipients=['Steven Lee <steven@alitrack.com>'] 这个是创建密钥的时候输入的姓名和邮箱,创建的时候,姓名可以为空,如果为空,则 recipients 为

recipients=['steven@alitrack.com']

status:  encryption ok
  • 解密

import gnupg
from  pathlib import  Path

gpg = gnupg.GPG(gnupghome="/Users/steven/.gnupg")
path ="abc.txt.gpg"

with open(path, 'rb'as f:
    status = gpg.decrypt_file(f, passphrase="qwert",output=Path(path).stem+"_dec")
    print ('status: ', status.status)

返回

status:  decryption ok
  • 验证

import gnupg
from  pathlib import  Path
gpg = gnupg.GPG(gnupghome="/Users/steven/.gnupg")
path ="abc.txt.sig"

with open(path, "rb"as f:
  verify = gpg.verify_file(f,Path(path).stem+"_dec")
  print ('status: ', verify.status)

返回

status:  signature valid

参考资料

[1]

GnuPG 包: https://www.gnupg.org/

[2]

python-gnupg: https://pythonhosted.org/python-gnupg/

[3]

Pretty Good Privacy: https://www.binance.vision/security/what-is-pgp

[4]

OpenPGP 工作组: https://www.openpgp.org/about/

[5]

GnuPG: https://gnupg.org/

[6]

IDEA 模块: http://www.spywarewarrior.com/uiuc/gpg-idea/gpg-idea.htm



P.S. Gpg4win 简介

    Gpg4win 是用于 Microsoft Windows 上的电子邮件与文件的加密软件, 使用了 GnuPG 公钥加密。Gpg4win 最初得到了德国联邦信息安全办公室的资助。Gpg4win 及其所有包含的工具都是自由及开放源代码软件,Windows 平台上典型的非商用选择。
    Gpg4win 安装内容简介:
    • GnuPG: 核心加密工具
    • Kleopatra: 用于 OpenPGP 与 X.509 的证书管理。
    • GPA: 另一个可选的证书管理
    • GpgOL: Microsoft Outlook 插件,用于电子邮件加密
    • GpgEX: Windows Explorer 插件,用于文件加密
    • Gpg4win Compendium : Gpg4win2 的文档


原文始发于微信公众号(alitrack):如何使用 Python-GnuPG加密、签名数据和通讯

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/62827.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!