C++ 如何签署Linux共享库?

C++ 如何签署Linux共享库?,c++,linux,elf,sign,C++,Linux,Elf,Sign,我在一家小型软件初创公司工作,我们正在将开发的软件授权给另一家公司。该软件是用C++编写的,在Linux上运行。 这不是我们第一次向这家公司许可软件。我们怀疑先前交付的软件的某些部分被用于约定之外的其他程序。然而,我们无法证明这一点,因为我们交付了源代码,公司分发了编译后的可执行文件,这些文件没有保留我们所有权的证据 这一次,我们希望确保公司仅将我们的软件用于许可协议涵盖的目的。我们不想限制我们软件的可用性,但我们希望以某种方式签署我们的代码,以便我们能够在它是更大程序的一部分时识别它 作为第一

我在一家小型软件初创公司工作,我们正在将开发的软件授权给另一家公司。该软件是用C++编写的,在Linux上运行。 这不是我们第一次向这家公司许可软件。我们怀疑先前交付的软件的某些部分被用于约定之外的其他程序。然而,我们无法证明这一点,因为我们交付了源代码,公司分发了编译后的可执行文件,这些文件没有保留我们所有权的证据

这一次,我们希望确保公司仅将我们的软件用于许可协议涵盖的目的。我们不想限制我们软件的可用性,但我们希望以某种方式签署我们的代码,以便我们能够在它是更大程序的一部分时识别它

作为第一项措施,这次我们将把我们的软件作为一个共享库而不是源代码来交付。然而,该公司仍然可以重命名库文件,从文件中删除版权声明,或者静态地将其嵌入到可执行文件中。 因此,我正在寻找对我们将要交付的ELF文件应用某种数字签名的可能性

我正在学习ELF文件格式和编写共享库时要考虑的各种事情,但是我发现了如何对ELF文件进行数字签名的小信息。 我遇到过像或这样的工具,但是它们似乎没有得到积极维护。 我特别想寻找一种签名技术,即使库被嵌入到一个更大的可执行文件中,它也能保持不变


我怎样才能签署一个Linux共享库,使我能够识别它并证明它的所有权?即使我的库静态地嵌入到可执行文件中,我也可以采取哪些措施来实现这一点?

GNU工具链中目前没有
elfsign
支持,而且由于软件自由的影响,不太可能有这样的支持


你想向谁证明所有权?您拥有源代码和构建脚本这一事实不足以让任何人相信您是真正的作者,而不是冒名顶替者吗?

将库打包到RPM或其他与发行版兼容的包文件中,并在包管理系统中使用数字签名功能。

是,理论上,你可以在图书馆签字。任何人都可以简单地删除签名。并不是说拥有一个签名库实际上可以做任何事情。Linux内核中没有任何东西会拒绝加载带有无效签名的库,所以我担心你只是在吹牛上浪费了很多时间。总的来说,试图使比特不可复制或不可更改就像试图使水不湿一样。你可以使用SHA1或类似的工具来获得你正在提供的共享对象的签名,并在事后使用该签名进行比较。啊,我现在手头没有任何示例。可以做什么:您可以在库的不同模块中声明一些全局变量。然后在某种程度上,将代码打包到这些文件中。然后,在为您提供软件接口的翻译单元中,您将信息转换为键形式,并将其返回给调用者。重要的是,变量和函数的命名方式不会给人留下与安全检查相关的印象,并通过不同的模块紧密地分发密钥信息,使其变得更加零碎。请查看digsig和linux ima,让人知道“拥有签名库实际上并没有任何作用”。那太错了。签署一个库可以让其他客户相信,自公司签署以来,该库没有被篡改过。我看不出签署二进制文件是如何违背软件自由的。我希望确保由我的进程加载的共享库确实是由受信任方提供的。这对软件自由有什么影响?