12

如何使用模糊容差加密/解密?

我希望能够在 InkCanvas 上使用 Stroke 作为我的加密密钥,但是当再次解密时,用户不必绘制完全相同的符号,只需相似即可。这可以在 .NET C# 中完成吗?

--- 更新(9 月 9 日) ---

我理想中想要的是一种加密算法,它可以接受基于某些基本密钥和定义允许差异的函数的特定范围内的任何密钥。

我在本地进行所有加密/解密,所以我不需要通过电线安全地发送任何东西。而且我不想存储用于加密的密钥,所以我没有什么可比较的。我可以想出一些方法来为每个相似的笔划生成相同的键,但如果想要接受任何类型的符号(不仅仅是字母),这并不容易。另一种选择是加密密钥是否可以通过设计以某种方式接受类似的密钥,我不知道这是否可能......?

4

7 回答 7

2

好的。让我们把你的问题分成两部分。

1) 模糊 2) 加密

现实情况是,这两个概念都相对较旧,并且它们的实施已经存在多年。每个都很好地处理了手头的问题,但这并不意味着将这两者结合起来是一个好主意。我相信您必须将解决方案分为两阶段。

首先,现有的加密标准非常适合使用 SINGLE EXACT 密钥保护数据。在您的情况下,您需要对称加密算法,例如 AES 或 Rijndael。

解决方案的模糊部分也不是那么难。与任何其他模糊识别技术一样,您需要进行特征提取并创建要传递给加密算法的向量。您需要在功能中构建模糊性。例如,笔划的数量、每个笔划的起点的象限、每个笔划的曲线系数等。这足以构建一个 32 位向量以传递给加密算法。

更新

我将尝试使其更具说明性:

2 位表示笔划数:1、2、3、+3,转换为 00、01、10 和 11

第一个笔画开始的象限的 2 位:TopLeft、TopRight、BottomLeft、BottomRightt 编码为 00、01、10 和 11

第一个笔画结束象限的 2 位:同上

2 位用于第二笔画开始的象限:同上。如果没有第二次冲程,则为 00。

2 位用于第二笔画结束的象限:同上。如果没有第二次冲程,则为 00。

2 位用于第三笔画开始的象限:同上。如果没有第三笔,则为 00。

2 位用于第二笔画结束的象限:同上。如果没有第三笔,则为 00。

2 位用于第一个笔画的曲线:直线-> 00 ... 漂亮的圆形-> 11。这不会很容易,您可以将弯曲度降低到 2 并只使用一点,但它是“吸一口,看看”。

所以这是16位。您现在可以将其余部分保留为零,然后尝试看看它是如何工作的。

希望这可以帮助。

于 2010-09-15T13:02:28.033 回答
1

有许多允许模糊秘密的加密方案。通常,开发这些方案是为了利用生物特征信息(即指纹、视网膜扫描)来保护机密,但底层方案更普遍适用。这种方案的一个例子是 由 Juels 和苏丹提出的模糊保险库方案。

于 2010-09-07T18:05:21.397 回答
0

使用某种形式的OCR(光学字符识别)将 Stroke 转换为常规文本,然后使用该文本作为键。只要用户将任何经过 OCR 处理的内容绘制成完全相同的文本,他们就可以再次解密。

于 2010-09-07T15:08:05.970 回答
0

如果您将笔画编码为图像,则可以使用模糊算法来检测图像之间的相似性。当然,如果您要使用这种方法,您应该使用 2 路加密方法而不是 1 路哈希,以便可以检索原始图像。

于 2010-09-07T15:27:26.487 回答
0

这里的问题是用于加密的密钥(Stroke 或从 Stroke 派生的东西)必须与加密消息一起发送。否则,解密协议无法将解密笔画与原始笔画进行比较。

所以假设Alice想要加密一些消息M。她是唯一应该解密消息的人,所以 Bob 不在照片中。Alice 生成一个模糊加密密钥Ke并加密M成为MeEncrypt(M,Ke) = Me。发送的消息是(Ke,Me)。在接收方,Alice 生成模糊解密密钥Kd。一些算法检查Ke ~ KdMe解密:Decrypt(Me,Ke) = M. 请注意,这是对称加密;Kd仅用于检查它是否“充分等于” Ke

当然,问题在于它Ke与消息一起以明文形式发送,因此Eve可以简单地获取密钥并解密Me。但是,Ke接收方需要将其与Kd. 那么我们如何在KeEve 无法窃听的情况下随消息一起发送呢?我们可以创建一个散列Ke并通过以下行发送它:(Hash(Ke),Me)。但是,在接收方,将无法验证 .KeKd基于Hash(Ke).

我们可以设计一些算法来生成一个基于Ke这样的值,如果Ke ~ Kd -> V(Ke) ~ V(Kd)(如果KeKd相似,则生成的值是相似的)。我们将消息发送(V(Ke),Me)给接收者。但是,Eve 现在根据 确定相对Ke容易V(Ke)。她从一个随机候选键开始:KeC并使用我们的算法,确定一个V(KeC). 如果它看起来V(Ke)与消息中的完全不同,她会对候选人进行一些大刀阔斧的改变,KeC然后再试一次。随着她越来越接近消息,她对等V(Ke)进行了较小的更改。KeC

Ke因此,如果我们允许与消息一起发送,就不可能创建一个安全的加密方案。这意味着Ke必须将其交给受信任的第三方Trent 。在这种情况下,Trent 可以是应用程序的数据库。所以现在方案变成如下:

Alice 生成Ke一条消息M和一个唯一的 id IdKe与我们的数据库 Trent 以及Id. M使用Ke用作密钥的常规加密方案进行加密:Me = Encrypt(M,Ke). 发送给接收方的消息是(Me,Id)

在接收方,Alice 接收到消息(Me,Id)。爱丽丝生成Kd. 基于Id,我们Ke从 Trent 中得到对应的,并与 进行比较Kd。如果匹配,我们解密Me: M = Decrypt(Me,Ke)

现在唯一的问题是当你有一个可以访问特伦特的入侵者马洛里时。他可以向 Trent 询问Ke基于随机 id 的值。为防止这种情况,您不应将其包含Id在消息中,以便消息简单地变为(Me). 现在你必须想出一个策略来Ke从 Trent 只使用Kd. 这当然是可能的,因为您可以Kd与数据库中的所有Ke' 进行比较,返回最“相似”Ke并尝试将其作为解密密钥。该策略假设每个人的 Stroke(或 Ke)差异很大。

上述策略是从生物特征加密中借用的,您将生物特征数据存储在数据库中并使用它来识别或验证个人。尝试在 Google 上搜索生物特征加密以获取更多信息。

于 2010-09-07T18:38:23.643 回答
0

正如我在评论中指出的,我不知道模糊加密是一个成熟的话题,所以让我们横向思考一下。由于您在本地进行加密/解密,硬件实现怎么样?也就是说,您购买一台平板电脑来进行生物识别,并在其中保存一个传统的加密密钥。它会是这样的:

  1. 平板电脑设置为kiosk模式,即有基础加固,防止UI切换应用。它还可以防止物理盗窃和篡改(例如,它存储在保险库中)
  2. 用户插入包含加密文件的 USB 密钥。
  3. 平板电脑从元数据字段(例如,如果您不介意过度工程的话,从用于加密X509 证书中)检测出预期的绘图。
  4. 平板电脑通过适当的生物识别魔法对用户进行身份验证。
  5. 平板电脑解密文件并提供存储或在屏幕上浏览。

请注意,第 5 步是安全链的薄弱环节,因为针对文档查看器(例如 Acrobat Reader)的攻击正变得越来越 普遍。最好使用某种沙盒方案,例如 VMWare 实例。

于 2010-09-14T07:57:44.333 回答
0

一种简单的方法是对有关密钥的大量信息进行编码,然后确定它的匹配程度。示例信息,假设您可以将用户的输入转换为线/弧/点的近似值:

直线
数 封闭区域
数 使用的绘图量。

x 轴上点的标准偏差。
y 轴上点的标准偏差。
绘制形状大小的标准偏差。

封闭区域的排序列表。

等等。

因此,不是表示图像,而是表示图像的属性。模糊之处在于您为这些属性中的每一个赋予准确度分数,添加或乘以或以其他方式组合总准确度级别,并在超过某个阈值时接受密码。

于 2010-09-15T15:44:27.617 回答