PGP/GPG签名Python cod

2024-05-31 20:53:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想(PGP/GPG)签署python代码。是的,我读过this和许多其他网站,这些网站都在讨论python代码的保护和模糊处理,这些都是我想要的。我不想混淆代码。 我希望客户和用户看到代码,他们可以修改代码,复制它,并使衍生工作,我想有软件下的GPLv3。 但是我希望有“签名”的插件,这样它们在执行过程中可以有点可信的。在

在Python中这是可能的吗?我可以在检查库的gpg签名后导入它吗? 简单的做法是:检查文件的gpg签名,然后通过import加载,否则引发异常。但这只能用于单个文件导入,而不能用于目录python模块。在

很明显,如果客户更改程序中的GPG密钥,或者在检查算法中自己删除一些行,那么一切都会消失,但这不是问题所在。 他可以做任何他想做的事,但这是愚蠢的。 他想要的是值得信赖。 我想让他添加一个第三方插件,把它复制到一个“插件”目录中,然后让程序检查插件的“可信度”——然后导入它。 (因此,他可以运行没有签名的插件,但风险自负。)


Tags: 文件代码用户程序目录插件客户软件
2条回答

Python的^{} mechanism已经提供了实现所需的所有工具。您可以安装不同类型的^{} hooks,以支持您想要的。在

特别是您可能会发现安装一个meta path hook来搜索“签名模块”并返回一个^{},它能够执行从这个签名格式导入的操作。在

签名插件的一种非常简单方便的格式是zip存档,其中包含:

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

以这种方式:

  • 你的加载器应该打开拉链,并检查签名。如果匹配,则可以安全地加载插件;如果不匹配,则应要求用户信任插件(或不信任并中止)
  • 如果用户想修改插件,只需解压缩zip归档文件,并根据需要修改它。在
  • 来自zip存档的导入已经在^{}模块中实现。这意味着您不必从头重写加载程序。在

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

使用这种设计,你只需安装这些钩子,然后你就可以import插件,就好像它们是正常的模块一样,验证等将自动完成。在

我知道这是一个老帖子,但我们已经开发了一个新的解决方案。我们同样面临着分发python源代码的挑战,但是要防止黑客篡改代码。我们开发的解决方案是使用signethttp://jamercee.github.io/signet/为我们的应用程序创建一个自定义加载程序。在

signet所做的是扫描你的脚本和它的依赖项,创建sha1哈希。它将这些散列嵌入到一个自定义加载程序中,您可以使用脚本将其交付给客户。您的客户运行加载器,该加载器在将控制权转移到脚本以进行正常执行之前重新验证哈希值。如果有篡改,它会发出错误消息,并拒绝运行被篡改的代码。在

Signet是多平台的,可以在windows、unix、linux、freebsd等平台上运行。。。如果部署到windows,加载程序生成过程甚至可以应用公司代码证书对代码进行100%验证。它还进行PE验证。在

代码是完全开源的,包括默认加载程序模板的c++源代码。您可以扩展加载器来执行额外的验证,甚至在检测到代码篡改时采取操作(如撤消篡改…)。在

相关问题 更多 >