- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
有人要求我为具有 TPM 芯片的 x86_64 设备实现相当于使用 TPM 的许可证加密狗。本质上需要的是确保为设备发布的软件只能在设备本身上运行,这样如果软件被迁移到虚拟机或不同的硬件,它将拒绝运行。
我不希望该解决方案能够抵抗逆向工程,而是一种典型的“加密狗”类型的解决方案,它会阻碍普通用户并保持企业客户的诚实。
我已成功构建并包含 TPM 模块,以及 TrouSerS ,以及 openssl-tpm-engine 代码——我可以成功获得 TPM 的所有权,但除此之外,可用的文档并没有完全涵盖这个用例——或者如果它涵盖了,我到目前为止还无法找到一个简单的英语解决方案。
如果可能的话,我更愿意依赖存储在 TPM 中的私钥的 secret 性质,而不是利用平台组件哈希(硬盘驱动器可能会坏掉,CPU 可能会被更换,等等。我宁愿客户一方会犯错,以便系统在例行硬件升级后不会变得不可用。
此外,理想情况下,我怀疑此解决方案可以设计为在制造过程中收集每个设备的公钥并将其添加到签名钥匙串(keychain)中,以便可以根据每个设备可能存储的单个 key 对软件进行签名在 TPM 中,而不是要求对软件进行多次签名?我在这里可能会弄错,但必须有一些批量方法来满足平台身份验证方法,否则它似乎很难扩展。
最佳答案
如果设备是由您设置的,您可以遵循以下方案:
一个。发货前:
B.准备申请:
C.启动应用程序时:
注意 1: 从理论上讲,此解决方案是不安全的,因为二进制文件可以修补。你知道这一点,所以这应该有效。
注意 2:如果设备不是您自己设置的,您就不能相信客户可能给您的公钥。
编辑 1: 更准确地解释某些要点
@A.2:因为我使用 jtt & jTSS而不是 TrouSerS 我不知道 TrouSerS 包中是否包含用于创建 key 的命令行工具。但我确信它提供了适当的 API 来执行此操作。无论如何,例如 jtt 有一个执行此操作的命令 create_key
。当您使用此工具时,您会遇到 jTSS 和 TrouSerS 的 key 存储据我所知不兼容的问题。
@A.3:不,除了存储根 key (SRk) 和认可 key (EK) 之外,TPM 中没有存储任何 key 。但是 TPM 保证属于 TPM 的 key 的任何私有(private)部分都不会以未加密的格式出现在 TPM 之外。所以你有一个 keystore ,它以某种方式由包含加密 key Material 的可信软件堆栈(TSS -> jTSS,TrouSerS)管理。 TSS 还负责在使用它们进行签名操作之前将正确的 key 加载到 TPM 中。
@C*:应用端的加密部分是相当标准的。我不知道你在那个领域的知识如何。对于 TPM 部分,TSS 再次提供高级 API。我不知道是否存在用于使用 TPM 进行签名的现有命令行工具。
关于linux - 如何在 Linux 上使用 TPM 实现平台许可证 "dongle"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9117772/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我正在制作一个网站(在商业环境中),用户可以将视频上传到我们的服务器 这自然会导致浏览器兼容性问题。解决方案是在服务器上使用 FFmpeg 对它们进行转码。 问题是我一直在阅读 FFmpeg 和它的许
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 8 年前。 Improve
我已将 Sitecore 项目部署到服务器,但收到错误 Required license is missing: Runtime Description: An unhandled exception
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
我正在考虑使用 this font来自网站上的 myfonts.com。当您从他们那里购买一种字体用于网络时,您购买的是每月一定数量的页面浏览量的一次性许可证。 此许可证在此处有更详细的描述: htt
我们有 Java Spring 应用程序。应用程序通过 Java Runtime.exec() 调用与 FFmpeg 交互,以便将视频编码为 mp4 格式。考虑到 libx264 是在 GPL 许可下
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
为了接受 Xcode 许可证 在 CLI 中,我们可以运行 sudo xcodebuild -license 然后控制台会提示 You have not agreed to the Xcode lic
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我正在考虑使用 AquaticPrime 作为 Cocoa 共享软件应用程序的 key 生成器。不了解的 friend 可以看这里:http://aquaticmac.com/ 。然而,当我尝试实现它
这个问题在这里已经有了答案: License Gradle Plugin (1 个回答) 9年前关闭。 感谢回复,我正在寻找应用 License-gradle-plugin 来检查源代码中的 head
我们如何使用 gradle 脚本在 src 目录中存在的 .groovy、.java、.jsp、.txt 文件中搜索、跳过和写入所需的头文件(许可证)。 我们如何安装许可证插件? 最佳答案 你的意思是
我正在尝试在 C# 中使用 iText。在我尝试添加许可证 key 之前,我的代码中的一切都运行良好。我到处都说要下载:itext.licensekey.dll 和 itext.licensekey.
如果我有 Ranorex 5.4 的 float 许可证,并且我有几台机器正在运行。我可以知道哪台机器正在使用来自许可证服务器的许可证吗?如果是这样,怎么办? 最佳答案 在许可证服务器上,启动 Ran
我是一名优秀的程序员,十分优秀!