用绘制笔划解密数据的算法

时间:2009-10-23 23:38:11

标签: algorithm encryption drawing

假设我在iPhone上有一个加密文件,每次我要解密它时,我想“画”一个解密符号,而不是用键盘输入。

如果您要求用户在每次需要时绘制符号来解密文件(例如,每次他们启动您的应用程序时),他们可能更喜欢在小键盘上键入20个字符左右的密码,他们仍然会获得一个20字符密码给他们的安全性(取决于他们绘制的形状/符号的复杂程度)。

他们绘制的符号最有可能是一次击打(例如,一旦抬起手指就会结束),但可能非常复杂,以至于其他人很难重复它,即使他们确实看到你画了它有点像每个人的签名是如何独特且难以复制的。实际上,如果它必须防止被复制,这可能会使它过于复杂,所以现在可以忽略它,我们可以假设其他人不会看到符号,因此它是否可以重复无关紧要他们与否。

我想真正的问题是你如何将相同(合理)的笔划一致地转换为相同的密钥(例如哈希值)。在算法中显然应该有一些宽恕的门槛,因为用户不能期望完全重复100%的笔画。

使用符号作为解密方法会为此问题添加一个完整的其他维度。您永远不希望以未加密的形式将生成的哈希值存储在任何位置,因此有人可能能够访问硬盘驱动器的该部分并获取解密密钥,而无需完成整个绘图过程并手动解密文件。您也很可能不想存储有关如何绘制形状的任何信息。

用户可能用作解密符号的中风的一个很好的例子是“&”符号。想象一下,用户每次需要解密文件时都会在iPhone上绘制此符号。每次绘制时,符号的大小可能不同。而且,符号的旋转可以根据用户如何握住他们的设备而不同。理想情况下,在两种情况下,因为符号是相对于用户笔划绘制的,所以它应该能够生成相同的哈希值,从而解密文件。

我认为形状或字符识别之类的东西是类似的算法。用户绘制某些东西(合理地表示形状)然后将其固定为正确的形状,每次绘制时都具有相同的散列值。但是,对于像这样的东西,你很可能需要一个可以绘制的形状数据库,如果你选择像字母表中所有字母的东西,你只能得到26个字母。假设用户只需要绘制一个符号来解密文件,那么你就有一个极不安全的密码,只有26种可能。

我想到的另一件事是你可以分解绘制成小段的符号然后对它们进行符号识别。因此,假设您在数据库中有4个符号:垂直线,水平线和两个方向的对角线。现在,当用户绘制时,每个段被识别为其中之一,然后它们被组合以形成一些散列值。因此,假设用户选择小写字母“r”作为其解密符号。因此,他们首先绘制一条垂直线,然后是垂直线,然后是对角线和右边。这种方法的一个问题是你怎么知道何时将笔划分成单个部分?您可能还需要考虑每个单独段的粗略长度(例如,以40像素为增量)。这样,如果有人画了一个变形的“r”,其中驼峰出现在底部附近,它不会被识别为相同的符号,因此不会解密文件。

第三种方法可能是将屏幕划分为一个网格(不确定是哪个尺寸),只是查看绘制笔划的单元格,并以某种方式使用此数据生成字符串。

关于如何实施这一点的任何其他想法?你听说过这样的事吗?是否存在任何阻碍此类系统工作的根本缺陷?

由于

8 个答案:

答案 0 :(得分:3)

我会尝试分割变体的变体:识别简单的模式 - 我会坚持使用直线和对角线,但理论上你也可以添加圆形,圆弧和其他东西。

你可以非常肯定当一行结束而另一行开始时有8个方向并且你可以检测到方向变化(或者对于更简单的方法,只需检测笔和笔下来并将它们用作行分隔符)。第一行给出了比例因子,因此每隔一行的长度可以表示为一个因子(例如,在通常的L形状中,第一条垂直线将给出“基本长度”b,然后另一条线将具有长度约为0.5 * b)。用户完成后,您可以使用最小因子s来“舍入”长度,这样您就可以得到一个整数长度数组,如[1 * s,2 * s,4 * s,5 * s]。这样可以防止系统过于精确,并且使用基本长度可以使系统在扩展时具有鲁棒性。

现在以某种方式将这些信息(长度和方向)转换为字符串(或哈希值,无论你喜欢什么),即使符号被翻译或缩放,它们对于相同的笔划也是相同的。

此外,您可以为第二行之后的每一行存储2D偏移值(当然也是“舍入”),这样如果不这样做,行也必须在同一位置, L和T最有可能得到相同的字符串(1行上下,1行左右长度0.5)。所以存储位置可以加强整个事情,但是可选。

编辑:

如果您将第一行的角度作为基准角度,您甚至可以使其在旋转时保持稳健。

请注意,如果所有行的长度相同且每个行程最多可达6-8位,则此算法每行仅提供3位,如果存储位置,则更多。这意味着您需要一个大约20-40个笔划的相当复杂的符​​号才能获得128位安全性。

添加更多变化/安全性的简单方法是让用户使用给定调色板中的不同颜色。

为了降低某人观看您的风险,您可以在绘制完每条线后将其消失,或将颜色更改为背景对比度非常低的颜色。

答案 1 :(得分:2)

使用可能具有小错误的关键材料加密数据的问题已经被广泛研究。 特别地,存在许多使用生物测量数据(例如指纹或视网膜扫描)作为关键来保护数据的提议。一种典型的方法是使用适当的纠错码,获取原始密钥材料K,计算其综合症并仅存储综合症。一旦你获得了你的关键材料K'的第二次读数,如果K和K'足够接近(那么“足够接近”当然取决于纠错方案),该综合症可用于从K'恢复K.)

为了帮助您入门,这是一篇提出fuzzy vault scheme的论文。这是使用“模糊”密钥的加密方案的一般提议。当然,您仍然需要检查如何从足够稳定的图形中提取特征以使用这种纠错方案。您还必须检查可以从这些图纸中提取多少熵。密码就像熵一样糟糕,它们可能仍然很难被击败。

答案 2 :(得分:1)

手写识别通常会考虑笔划的持续时间而不是实际长度等。

虽然它与压力敏感性有关,但我认为你可能会看到一些与你在想的相似的概念...... .... jdadesign.net/safelock/

这不是完全相同的主题,但它是目前最让人想到的事情。

答案 3 :(得分:1)

我认为你不能从手绘符号中获得足够的“位”来执行安全加密。正如您所注意到的那样,您必须考虑到足够的污点,才能容忍绘图中的自然变化。换句话说,你必须丢弃笔画中的噪音,将它们平滑成可重复的信号。但是噪声(高熵)会产生更好的加密密钥。

这样想。如果您确实将手势分解为向上,向下,向左和向右的片段,则每个片段将代表2位信息。对于AES密钥,符号将需要64个这样的段。这是一个非常复杂的记忆手势。如果通过连续重复多个段(“右,右,右......”)来简化它,则会产生一个糟糕的(可预测的,非随机的)密钥。

答案 4 :(得分:1)

我有另一个想到这个。我不是一个comp-sci人,但会像这样的工作。

让我们说用任何符号或“模式”来绘制。您需要分析的唯一可行的事情是touchBegan,touchMoved和touchEnded事件中生成的模式中的所有点。

所以......让我们把生成的所有点,无论是100还是1,000,000,它都没关系。

将它们分成几组,根据需要分组。我假设的越多越好,但是对于这个例子,让我们将它们分成4组。对于100分,组1将包含点1> 1。如图25所示,组2包含26> 50等等。

对于每个组,使用所有点来计算平均位置。

如果将画布空间划分为网格,并将“平均位置”绘制到最近的坐标上,它可能会更好。

然后检查所有组之间的相对距离。所以在1,2 1,3 1,4 2,3 2,4 3,4之间。

您现在拥有尽可能多的不同点,以及有关这些点的信息以生成密钥。平均值和网格应该有助于平滑一些(如果不是全部的话)熵。

您可能需要让用户多次绘制他们的模式,并将每个组与之前尝试的组进行比较。这样,您就可以确定用户可以一致地绘制哪些组。它还具有培训用户绘制图案的额外好处。

我怀疑你拥有的点和群体越多,这就越准确。

事实上,我打算自己尝试一下。

答案 5 :(得分:0)

手势。

http://depts.washington.edu/aimgroup/proj/dollar/

您可以为特定手势定义自己的算法。 EG一个圆圈,

1.找到起点 2.找到最左边,最右边和最远的点并获得近似半径。 3.检查所有与半径相对应的误差范围(25%?) 4.如果半径结束,则表示您有一个圆圈。

垂直直线: 1.检查起点和终点X和Y位置。 2.将中间点与开始和结束的x和y进行比较。 3.如果它们大致在相同的X坐标上,但是Y坐标上升或下降,则表示您有垂直线。

等等,对于更复杂的手势越来越复杂。

您甚至可以组合手势。所以假设你有一个6个手势的算法。您可以将它们组合以形成不同的符号。创建手势的顺序可能很重要,增加了额外的安全层。

答案 6 :(得分:0)

如果您获取了笔划的所有x,y坐标并对它们执行了某种线性2路操作,该怎么办?然后你可以计算一个'近似'哈希值,如果在笔画在......之内计算出的数字...比如你的近似值的10%,那么你就授予了访问权限。

答案 7 :(得分:0)

这一切都取决于你试图阻止什么样的攻击。如果您想要完全加密,假设攻击者可以完全访问加密文件,那么您需要相当多的熵来实现相当程度的保护。假设您获得了正确的算法,那么您可以将两个输入的输入熵的功率(其上限是不同可能输入的数量)乘以密钥设置过程所花费的时间,除以攻击者拥有多少计算能力,并获得攻击者通过强力破解加密所需的时间。

例如,类似于android的9单元图形解锁方法可能会让你获得大约16位的熵。让我们假设您使用5秒的CPU时间来计算加密密钥。然后使用普通PC,需要5 * 2 ** 16/20秒,或大约4.5小时才能破解。输入中的任何熵损失或密钥设置和加密的低效率都会很快降低到几分钟,更不用说是否使用了计算机集群。

坦率地说,这并不比仅仅以晦涩的文件格式存储文件并希望没有人想出来更好