代码之家  ›  专栏  ›  技术社区  ›  Ashish Chaurasia

如何实现/使用安全的“一次性读取”本地文件访问系统?

  •  1
  • Ashish Chaurasia  · 技术社区  · 16 年前

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

    以下是我的要求:

    我想将“安全/加密”的数据文件存储在U盘上(可以是只读CD/DVD,但最好是读/写USB,甚至是软盘),并且一旦输入密码,就可以一次(主要是一次)一块一块地对该文件进行解码。文件内容可能是基本的文本/XML(或文本编码数据),主要作为顺序流读取。数据(理想情况下)可以通过普通的Windows文件访问方法读取,例如:标准文件、fso对象(流和文本文件)、所有基本的PC(vb6/vb.net)文件处理方法,甚至Excel文本(导入)。是的,我知道这可能会破坏对象(这样的文件就可以打开/保存),但我仍然希望这种可能性。最后,一旦满足“访问”标准,设备将阻止进一步访问。

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

    为了简单起见,只需一个密码、一个文件、一次使用和一个用户就可以了,但其他可能的增强包括:(如蛋糕上的糖霜…)

    • 允许打开“n”
    • 拥有多个密码,2个或多个用户,单独行动
    • 思洛密码,让两个以上的用户一起登录以获得访问权限(甚至 至少有来自m的n个用户一起签名以获得访问权限)
    • 应在第一个块访问时给出密码提示,与 调用第一个块的应用程序
    • 密码可以嵌入/自动
    • 将访问绑定到指定的机器/MAC/IP/磁盘序列号(或 其他机器代码)
    • 将访问绑定到指定的程序/应用程序
    • 如果可能,删除并安全地覆盖数据文件

    我对此的第一个猜测是,它需要一个“psuedo设备”驱动程序,作为对std可移动设备驱动程序的扩展(或替换)。驱动程序将按扇区处理每个文件块,如果未经授权,将拒绝服务器进一步解码的块。设备不应提供常规目录列表,但可以向用户提供某种形式的内容摘要(可选)。

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

    对于这样一个设备/系统,我已经找了很长时间,也找不到了。大多数设备和系统工具(例如:iomega/ironkey)似乎可以解锁对文件的访问,但没有限制,即:一旦解锁,就可以读取许多文件。

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

    我是一个“办公室”开发人员,不太熟悉设备驱动程序或DRM——现在我从哪里开始做这样的项目?乔已经有什么可供公众使用的东西了吗?

    谢谢-提姆。

    PS:更新

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

    我确实认识到,没有解决方案是万无一失的,但风险/回报率应该能够劝阻偶然尝试破坏系统的行为。数据没有明确的商业价值。

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

    从对@eriksons深思熟虑的回答的支持率来看,你们说“不可能/不麻烦”,但除了亲自监督数据是否按照我们的意愿使用之外,你们会怎么做?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Christopher    16 年前

    你的方法有几个问题。

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

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

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

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

        2
  •  4
  •   Community Mohan Dere    9 年前

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

    在90年代末,一些公司(消失公司,他们至少有一个竞争对手)试图在通用硬件上发“自毁式”电子邮件,他们花费了数百万美元来开发那些根本不起作用的系统。

    我所知道的唯一可能的解决方案是使用 Trusted Platform Module. 这些是相当普遍的,因为它们是美国政府购买的所有计算机所必需的。然而,他们的能力各不相同。您需要一个支持称为远程认证的东西,它允许软件对自己执行完整性检查。有了这个能力,您就可以编写软件来执行数据销毁策略。但是,我不认为这个特性被广泛使用。我的笔记本电脑有一个TPM,但它不支持这个。

    您还应该知道,有很多人反对“可信计算”,因为它可以用来限制机器的功能。这侵犯了你随意处置你财产的权利。TPMS可能对公司或政府机器有意义,但对个人计算机没有意义。

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

    为多个用户加密数据通常是通过生成一个密钥、用该“内容加密密钥”加密数据,然后用属于每个目标收件人的“密钥加密密钥”(可能是密码)加密密钥(相对较小)。

    需要一定数量的用户输入密码可以用 Shamir Secret Sharing, 正如我在这里学到的。


    基于对这个问题的评论,特别是“邮寄标签打印服务”的类比,我恐怕我的初步回答并不真正相关。

    在这种情况下,我只能看到一个法律解决方案。不允许在合同中存储数据。如果值得起诉他们违反合同,那么就起诉他们。

    从密码学的角度来说,我能想到的最好的办法就是在这样一个“邮件列表”上加上“水印”,这样的信息可以帮助我证明该列表的副本是由某个特定的供应商披露的。知道水印的存在可能会阻止任何蓄意披露,并有助于在意外披露的情况下利用快速结算。这可以在记录中使用隐写技术,也可以在集合中使用假记录。

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