PGP/GPG签名的Python代码

ner*_*doc 10 python import gnupg pgp

我想(PGP/GPG)签署python代码.是的,我已经阅读过这个以及许多其他关于保护混淆 python代码的网站 - 这一切都不是我想要的.我不想混淆代码.我希望客户和用户能够看到代码,他们可以修改代码,复制代码并进行衍生工作,我希望将软件置于GPLv3下.但我想拥有"已签名"的插件,因此在执行过程中它们可能会受到信任.

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

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

Bak*_*riu 7

Python的import机制已经提供了实现您想要的所需的所有工具.您可以安装不同类型的import挂钩以支持您想要的内容.

特别是你可能会发现安装元路径钩子很方便,它会搜索"已签名的模块"并返回一个Loader能够从这个签名格式执行导入的东西.

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

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

通过这种方式:

  • 您的装载机应解压缩拉链,并检查签名.如果它匹配,那么您可以安全地加载插件,如果它不匹配,您应该要求用户信任插件(或不兼容并中止)
  • 如果用户想要修改插件,它可以简单地解压缩zip存档并根据需要进行修改.
  • 来自zip档案的导入已在zipimport模块中实施.这意味着您不必从头开始重写加载器.

实际上,如果你想将钩子的代码减少到最小,你只需要验证签名,然后将zip存档的路径添加到sys.path,因为python已经处理了从zip存档的导入,即使没有明确使用zipimport.

使用这种设计,您只需安装这些挂钩,然后您就可以import将插件视为正常模块,并且验证等将自动完成.