1

有人知道安全的“一次性”本地文件访问系统吗?或者如何创造一个?我意识到,如果要在系统上使用数据,那么它必须能够被读取,但我认为可能会严格限制数据的可用方式,并减少数据被复制和在其他地方使用的可能性。

这些是我的要求:

我想在 USB 记忆棒上存储一个“安全/加密”数据文件(可以是只读 CD/DVD,但如果读/写 USB 甚至是软盘更好)并且该文件能够被读取一次(并且主要只有一次),在逐块解码的基础上,一旦输入密码。文件内容可能是基本文本/xml(或文本编码数据),主要作为顺序流读取。数据(理想情况下)可以通过普通的 windows 文件访问方法读取,即:std 文件、FSO 对象(流和文本文件)、所有 BASIC PC (VB6/VB.NET) 文件处理方法,甚至 Excel 文本(导入)。是的,我知道这可能会破坏对象(因为这样的文件可以打开/保存),但我仍然想要这种可能性。最后,一旦满足“访问”标准,设备将阻止进一步访问。

只能在本地 PC 系统上访问数据。没有局域网,不支持设备共享。设备上的数据不应通过正常方式复制。如果可能,将使用常规方法或必要时使用特殊应用程序将数据写入设备。

为简单起见,只需一个密码、一个文件、一个用途和一个用户就可以了,但其他可能的增强功能包括:(如锦上添花)...

  • 允许'n'打开
  • 拥有多个密码 2 个或更多用户,单独行动
  • 筒仓密码,让 2 个以上的用户一起签名以获得访问权限(或者甚至让 m 个以上的用户中至少有 n 个用户一起签名以获得访问权限)
  • 密码提示应在第一个块访问时给出,与调用第一个块的应用程序无关
  • 密码可以嵌入/自动
  • 将访问权绑定到指定的机器/mac/ip/磁盘序列号(或其他机器代码)
  • 绑定对指定程序/应用程序的访问
  • 如果可能,删除并安全覆盖数据文件

我这样做的第一个猜测表明,它需要一个“伪设备”驱动程序,该驱动程序将作为标准可移动设备驱动程序的扩展(或替代)出现。驱动程序将逐个扇区处理每个文件块,如果未经授权,则拒绝提供进一步解码的块。设备不应提供正常的目录列表,但可以向用户提供某种形式的内容摘要(可选)。

与 DRM 系统不同,我不想要任何形式的在线访问/身份验证(但会考虑),我更喜欢独立的系统。

我为这样的设备/系统寻找了很久很久,但还没有找到。大多数设备和系统工具(例如:Iomega/ironkey)似乎可以解锁对文件的访问,但没有限制,即:一旦解锁,read-many。

性能不是问题。缓慢的软盘读取率是可以的。加密方法是不可知的,任何相当强大的 40 位 +(128 位)都可以。我不能告诉你数据是什么或它的用途,我只需要一种方法将数据提供给某人并尽可能限制其使用以及他们可以用它做什么。它是保护机密数据的真正要求,不适用于 DRM 或 MP3/视频或类似内容。

我是一名“办公室”开发人员,对设备驱动程序或 DRM 并不十分熟悉 - 现在我应该从哪里开始这样的项目?joe-public 已经有什么可用的了吗?

谢谢 - 蒂姆。

PS:更新

我应该指出,我只是希望在我们自己和一个特定的指定服务提供商之间传递数据。我不希望他们复制我们提供的数据。它将被使用一次以支持“单一”一次性过程,然后完成。由于数据是“流式传输/读取”的,因此应该“使用”。如果该过程失败,我们将向服务提供商重新发布数据。数据仍然是我们的财产,不会被出售/许可。

我确实意识到没有解决方案是万无一失的,但风险/回报比应该会阻止随意破坏系统的尝试。这些数据没有明确的商业价值。

PPS:这是一个真正的要求……你会怎么做?

从@eriksons 深思熟虑的回答上的赞成票来看,你们是在说“不可能/不要打扰”——但除了亲自监督数据是否按照我们的意愿使用之外,你们会怎么做?

4

2 回答 2

4

执行摘要:这不是一个现实的解决方案。重新考虑这个过程,这样就不需要“只读一次”了。

几家公司(想到的是消失公司,他们至少有一个竞争对手)在 90 年代后期试图在通用硬件上制作“自毁”电子邮件。他们花了数百万美元在 dot.com 上开发并没有真正起作用的系统。

我知道的唯一可能的解决方案是使用可信平台模块。这些是相当普遍的,因为它们在美国政府购买的所有计算机中都是必需的。但是,它们的能力各不相同。你需要一个支持远程证明的东西,它允许软件对自己执行完整性检查。借助此功能,您可以编写执行数据销毁策略的软件。但是,我不认为这个功能被广泛使用。我的笔记本电脑有一个 TPM,但它不支持这个。

您还应该意识到对“可信计算”有很多敌意,因为它可以用来限制机器的功能。这侵犯了您对您的财产为所欲为的权利。TPM 可能适用于公司或政府机器,但不适用于个人计算机。

您的问题的其他方面,例如授予多个用户访问数据,要求多个用户访问数据更容易。

为多个用户加密数据通常是通过生成一个密钥,用那个“内容加密密钥”加密数据,然后用属于每个预期的收件人。

正如我在 SO 上学到的,使用 Shamir Secret Sharing可以安全地要求一定数量的用户输入密码。


根据对问题的评论,尤其是“邮寄标签打印服务”的类比,恐怕我最初的答案并不相关。

在这种情况下,我只能看到法律解决方案。禁止在合同中存储您的数据。如果起诉他们违反合同是值得的,那就这样做。

从密码学上讲,我能想到的最好的办法是给这样的“邮件列表”添加“水印”,并附上可以帮助我证明该列表的副本是由特定供应商披露的信息。知道存在水印可能会阻止任何故意披露,并有助于在意外披露的情况下实现快速解决。这可以在记录中使用隐写技术,也可以在集合中使用假记录。

这样做的算法可能已经存在,但我不熟悉该领域。研究“数字水印”可能很有用。即使它只为受保护的视频和音频提供算法,也许这些算法可以适用于其他媒体。

于 2009-09-14T17:18:37.287 回答
1

你的方法有几个问题。

  1. 如果您可以从任何应用程序读取数据,则可以在任何地方保护数据。我认为这会破坏任何“唯一一次访问”政策的目的。
  2. 要获得设备驱动程序来处理您的场景,您需要深入了解文件系统编程,至少在 Windows 下这不是一件容易的事。即便如此,也很难强制执行一次性访问先决条件。
  3. 程序有不同的文件访问策略,这可能会打破你的假设。例如,应用程序可能会打开文件一次以获取其大小,然后关闭并重新打开它以加载其数据。这应该如何执行?您想限制“OpenFile”调用吗?你想限制“读取字节”调用吗?你想限制......在文件中跳来跳去吗?
  4. 当您的媒体被复制时,无论以何种方式,您都无法知道这一点。游戏行业多年来一直试图将游戏绑定到原版CD,但多年来都惨遭失败。

我认为,可行的是容器格式,带有编码器/解码器或类似的东西。(请参阅 Windows7 中的 Bitlocker)这将保证,您只能将数据解码到本地磁盘一次,然后删除介质上的容器(请注意,首先检查介质是否可写,然后将容器绑定到串行-介质的编号或名称,以便无法复制容器)。

另一种可能性是单独的 USB 设备,您只能使用一次来从中提取数据。然后,您只需在用户模式下使用 WinUSB 编写一次驱动程序。加密的 USB 棒使用这种方法。

但我真的认为这是一个坏主意,因为当接收者可以从介质中读取所有数据并将其保存在其他任何地方时,你可以很容易地绕过任何计数器测量。

于 2009-09-14T18:34:08.567 回答