Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用模糊容差算法的笔划作为加密密钥_C#_.net_Language Agnostic_Encryption_Fuzzy Comparison - Fatal编程技术网

C# 使用模糊容差算法的笔划作为加密密钥

C# 使用模糊容差算法的笔划作为加密密钥,c#,.net,language-agnostic,encryption,fuzzy-comparison,C#,.net,Language Agnostic,Encryption,Fuzzy Comparison,如何使用模糊容差进行加密/解密 我希望能够使用InkCanvas上的笔划作为加密密钥,但当再次解密时,用户不必绘制完全相同的符号,只需绘制相似的符号。这可以在.NETC中完成吗 ---更新(9月9日)--- 理想情况下,我想要的是一种加密算法,它可以根据某个基本密钥和定义允许差异的函数接受特定密钥范围内的任何密钥 我在本地做所有的加密/解密,所以我不需要通过电线安全地发送任何东西。我不想存储用于加密的密钥,所以我没有任何东西可与之比较。我可以想出一些方法为每一个相似的笔划生成相同的键,但是如果一

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

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

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

理想情况下,我想要的是一种加密算法,它可以根据某个基本密钥和定义允许差异的函数接受特定密钥范围内的任何密钥


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

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

如果将笔划编码为图像,则会有。当然,如果要使用这种方法,应该使用双向加密方法,而不是单向散列,以便可以检索原始图像。

有许多加密方案允许模糊秘密。通常,开发这些方案是为了保护生物特征信息(即指纹、视网膜扫描)的秘密,但基本方案更普遍适用。这类计划的一个例子是
由Juels和Sudan提出。

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

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

当然问题是,
Ke
以明文形式与消息一起发送,因此可以简单地获取密钥并解密
Me
。但是,需要在接收端使用
Ke
将其与
Kd
进行比较。那么,我们如何在不被Eve窃听的情况下,将
Ke
与消息一起发送呢?我们可以创建一个
Ke
的散列,并通过以下行发送:
(散列(Ke),Me)
。然而,在接收端,无法根据
散列(Ke)
验证
Ke
Kd
之间的“充分平等”

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

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

Alice生成
Ke
、一条消息
M
和一个唯一的id
id
Ke
与我们的数据库Trent一起存储,还有
Id
M
使用常规加密方案加密,该方案使用
Ke
作为密钥:
Me=Encrypt(M,Ke)
。发送给接收者的消息是
(Me,Id)

在接收端,Alice接收消息
(Me,Id)
。Alice生成
Kd
。基于
Id
,我们从Trent获得了相应的
Ke
,并将其与
Kd
进行了比较。如果有匹配项,我们解密
Me
M=decrypt(Me,Ke)

现在唯一的问题是当你有一个可以进入特伦特的入侵者。他可以根据随机id向特伦特索要
Ke
值。为了防止出现这种情况,您不应该在消息中包含
Id
,这样消息就会变成
(Me)
。现在,您必须想出一个策略,仅通过使用
Kd
从特伦特获得候选人
Ke
。这当然是可能的,因为您可以将
Kd
与数据库中的所有
Ke
进行比较,返回最“相似”的
Ke
并尝试将其作为解密密钥。该策略假设每个人的中风(或Ke)都有足够的差异


上述策略借鉴了生物特征加密,即将生物特征数据存储在数据库中,并使用该数据识别或认证个人。试着在谷歌上搜索一些额外的信息。

正如我在一封邮件中指出的那样