我一直在寻找一种方法来加密验证通过Elixir中的Hex包管理器下载的包的完整性和真实性。到目前为止,我没有找到任何东西。
一些软件包管理器支持OpenPGP等数字签名系统,以确保目标系统上安装的代码与软件包作者生成的代码完全相同,从而抑制试图改变中央数据存储上的数据的攻击。成千上万的包。
对于Elixir和Erlang的流行包管理器Hex,是否有任何形式的支持?
答案 0 :(得分:4)
Hex目前不支持用户签名的包。一些不同的软件包管理器试图实现用户签名,但没有一个是完全成功的,因为它很容易使用,所有发布者都需要签署他们的软件包,所有消费者都需要验证签名的真实性。
信任网(类似PGP)的方法是有问题的,因为你必须建立一个信任网络,这是一个很高的进入门槛 - 你是否必须亲自见到其他开发人员或者以某种方式让他们验证你是谁,所以他们可以在发布第一个包之前签署密钥吗?
集中信任(类似X.509)方法也存在问题。如果中央存储库Hex.pm颁发证书,那么妥协Hex.pm也会破坏用户签名的软件包,这是我们试图阻止的。
我们已制作proposals for signing packages,我们已对other approaches进行了评估,并正在关注并参与ongoing discussions如何解决此问题。
即使Hex不支持用户签名的包,我们也会做其他事情来验证包的真实性。包内容经过校验和,并包含在package tarball中并存储在服务器上。用户构建程序包时会打印程序包校验和,并且可以根据存储库中的程序包进行验证。校验和包含在由Hex.pm private key签名的存储库索引中。根据索引中的校验和验证下载的软件包,如果软件包已锁定,则还会根据锁中的校验和进行验证。