当前位置: 首页 > 面试题库 >

PGP / GPG签名的Python代码

蒋哲
2023-03-14
问题内容

我想(PGP /
GPG)签署python代码。是的,我已经阅读了此书以及许多其他有关 保护混淆 python代码的网站-这 不是
我想要的。我不想混淆代码。我希望客户和用户可以看到代码,他们可以修改代码,复制代码并进行派生工作,我希望将软件安装在GPLv3下。但是我想要具有“签名”功能的插件,以便在执行过程中可以
信任 它们。

这在Python中可行吗?检查库的gpg签名后可以导入库吗?这很容易:检查文件的gpg签名,然后通过导入加载它,否则引发异常。但这仅适用于单文件导入,而不适用于目录python模块。

很明显,如果客户更改了程序中的GPG密钥,或者自己在检查算法中删除了某些行,则一切都消失了-但这不是问题。他可以做任何他想做的事-
但这很愚蠢。他想要的是守信。我想让他通过将第三方插件复制到“插件”目录中来添加第三方插件,并让程序检查插件的“可信赖性”-然后将其导入。(因此,他 可以
运行 签名的插件,但要自己承担风险。)


问题答案:

Python的import机制已经提供了实现所需功能所需的所有工具。您可以安装各种import挂钩,以支持所需的功能。

特别是,您可能会发现安装元路径挂钩很方便,该挂钩可搜索“已签名的模块”并返回一个Loader能够从此已签名的格式执行导入的。

用于签名插件的一种非常简单方便的格式是zip包含以下内容的存档:

  1. 以模块/软件包形式的插件代码
  2. 上面代码的PGP签名

通过这种方式:

  • 您的加载程序应解压缩拉链,并检查签名。如果匹配,则可以安全地加载该插件;如果不匹配,则应要求用户信任该插件(否则,请中止)
  • 如果用户想要修改插件,则只需将zip存档解压缩并按自己的意愿进行修改即可。
  • zip档案库导入已在zipimport模块中实现。这意味着您不必从头开始重写加载程序。

实际上,如果您想将钩子的代码减少到最少,您只需要验证签名,然后将zip归档文件的路径添加到其中sys.path,因为pythonzip即使没有显式使用python也已经处理了从归档文件的导入zipimport

使用这种设计,您只需要安装这些挂钩,然后就可以import将插件当作普通模块使用,并且验证等操作将自动完成。



 类似资料:
  • 代码在这里,使用BouncyCastle实现: 我希望能够读取此签名并使用公钥验证它。如何将其转换回BouncyCastle对象?

  • 我从brew安装了GPG。 它是gnupg2-2.0。30_2。 当我提交时,确实会收到一条错误消息: 我使用命令: 它给了我: 然后我使用了这个命令: 提交会返回相同的错误消息。 我怎样才能解决这个问题?

  • GPG 无法签名数据 如果当你在对 tag 或者 commit 签名时遇到以下提示: error: gpg failed to sign the data error: unable to sign the tag 首先,物理插拔一下 Yubikey 并确保安全卡状态可以被正确的列出: ❯ gpg --card-status 如果你看到: PIN retry counter : 0 0 3 这意味

  • 代码签名是一种用来证明应用是由你创建的一种安全技术。 在macOS系统中,系统可以区分开应用的变更是偶然产生的,还是被恶意代码生成的。 在Windows系统中,如果程序没有代码签名证书,或者代码签名授信级别较低时,系统同样会将其列为可信程序,只是当用户运行该应用时,系统会显示安全提示。 确立授信级别的过程比较费时,因此最好提早开始着手代码签名的工作。 即使开发者可以发布一个未签名的应用程序,但是我

  • 代码签名是一种用来证明应用是由你创建的一种安全技术。 macOS 系统能通过代码签名检测对app的任何修改,包括意外修改和来自恶意代码的修改。 在Windows系统中,如果程序没有代码签名证书,或者代码签名授信级别较低时,系统同样会将其列为可信程序,只是当用户运行该应用时,系统会显示安全提示。 信任级别随着时间的推移构建,因此最好尽早开始代码签名。 即使开发者可以发布一个未签名的应用程序,但是我们

  • 我想使用BouncyCastle解析和验证OpenPGP分离签名。签名如下所示: 下面是我如何尝试在Kotlin中创建CMSSignedData: 我应该如何使用BouncyCastle验证这种签名?

  • 我有麻烦签署提交。使用以下git配置: 我被告知只包含密钥的前八个字符。 分阶段后,在,我收到以下错误: 似乎大多数遇到此错误的用户都在Mac电脑上,需要进行一些额外的设置。但我在使用Kali Linux。 有什么建议吗?