我有一些带有各种操作系统的可启动拇指驱动器,我打算让别人使用。但是,我需要一种方法来确保 USB 驱动器只能使用一次。因此我的问题 - 有没有办法让 USB 驱动器在使用一定次数后自行擦除?也许在驱动器本身上有脚本或软件/固件?
我已经对该主题进行了一些研究,但是我的搜索几乎没有得到有用的信息。
提前感谢您协助我进行数据权限管理!
我有一些带有各种操作系统的可启动拇指驱动器,我打算让别人使用。但是,我需要一种方法来确保 USB 驱动器只能使用一次。因此我的问题 - 有没有办法让 USB 驱动器在使用一定次数后自行擦除?也许在驱动器本身上有脚本或软件/固件?
我已经对该主题进行了一些研究,但是我的搜索几乎没有得到有用的信息。
提前感谢您协助我进行数据权限管理!
首先是一个小的词汇精度。您使用的“数据完整性”术语似乎不适用于您的需求。
因此,您需要的是 DRM 解决方案,而不是数据完整性解决方案。
仅依靠操作系统或任何公开存储在拇指驱动器上的数据没有真正可行的保护。实际上,转储原始拇指驱动器内容并稍后将其恢复以使其恢复原始状态是微不足道的。
因此,您可以忘记自删除内容,标准加密对此无济于事,甚至不要考虑在文件系统的某些未分配区域中存储计数器(这些技巧用于保护 CD-ROM 的90 年代后期,但在这里无济于事)。
其他一些答案建议使用基于 Internet 的服务。这就是支持 DRM 的 PDF 文档的工作方式:文档本身是加密的,每次打开时都会向某些 Adobe 服务器请求解密密钥。这可能有效,但您最好确保您的软件请求密钥及其使用的协议不能被反转或重放,否则最终用户将能够绕过您的保护。所有的安全都依赖于此,如果有足够的时间和决心,考虑到你的软件最终会被破坏,这只是利润与所需努力的问题。
我建议的解决方案不需要最终用户进行任何 Internet 访问,并且通过使安全系统远离最终用户,可以很好地防止逆向工程尝试。
您将需要用户无法访问的东西,这很可能意味着您必须为这项工作定制自己的固件。
按照我的想法,闪存驱动器的存储区域应该分为三个区域:
引导过程如下:
我可以看到的第一个潜在弱点:
定制闪存驱动器:通过快速搜索,我可以找到几个具有可定制固件的开源 USB 密钥,它们已经在零售和批发中提供,但它们的目标是更有利可图的安全令牌市场,这意味着它们为密钥添加了更昂贵的加密硬件。大多数情况下,可以以更低的价格找到更便宜的已经制造的 USB 密钥。
自定义固件:创建自己的固件可能听起来技术含量很高,但我认为并非如此。USB 芯片供应商还提供相关的开发框架,其中包括作为 USB 低级操作的抽象级别的库和用户自定义代码的占位符。作为示例,这里是此类库的随机文档,因此您可以自己了解一下。主要的先决条件是知道如何编写 C 应用程序,如何使用 IDE,并且对 USB 的工作原理只有基本的了解。
划分存储区域并控制对每个区域的访问:这不是我的发明,据我所知,这是SD 卡的 DRM 扩展的实现方式。要了解有关此主题的更多信息,本规范是保密的,但尽管有保密协议,但其中的某些部分(至少)在 Internet 上泄露。我不是在重新发明轮子。
动态加密:已经有 USB 令牌提供动态加密,但是为了获得良好的性能,它们捆绑了一些加密硬件。由于加密不是您在这里的首要目标,如果您确实需要加密存储区域(即,如果您担心您的用户会将您的闪存盘拆开并直接访问原始 NAND 芯片内容),您仍然可以没有这样的硬件,但你将不得不限制自己使用非常低资源的算法。事实上,由于闪存驱动器的计算资源有限,您可能更倾向于某些数据混淆方案,而不是真正的高度安全的加密算法。
也许你在这里落入了XY 问题的陷阱。您确定答案在于 USB 如何自毁而不是采取一些标准的许可措施?即,如果您可以自信地说操作系统将依赖互联网连接 - 您可以在第一次使用后轻松阻止它。
实际上,如果您实际上要问的是如何保护磁盘上的实际内容(即不得访问文件)-它们真的,真的不应该在您计划分发的 USB 驱动器上第一名。如果没有对他们机器的特定级别的控制,想要人们读取文件内容,但只读取一次是不可能的。
如果您的引导系统要访问 Internet 或 Intranet,您可以通过使用 USB 驱动器启动的网络安装完成安装来积极控制该过程。
您将使用 USB 进行混合 PXE 引导安装,实际启动引导和一级安装。考虑使用 USB 安装来安装功能最少的操作系统,然后将真实的操作系统映像作为 ISO 文件从网络中提取。如果您需要此实例仅运行一次,则将网络映像移动到 RAM 并挂载环回。
使用次数的控制权将委托给传回 ISO 安装映像的网络服务器。
也可以制定此方案来解决安装中止或可能出错的许多事情之一的情况。如果计划进行许多安装,则一次性完成的计划需要计划 B,并且此方案可以允许在不发送另一个 USB 的情况下批准第二次尝试。