security - 来自随机放置的圆圈的随机字符串

标签 security math multi-touch

我对一个我想做的项目有一个有趣的想法,但我不太确定它的数学部分。想法如下:

  • 制作一张塑料卡,当其靠近电容屏时可以模拟 9 指多点触控手势
  • 根据“9 指”的位置,确定某种唯一的字符串并将其用作应用的加密/解密 key

这样我就可以打开一个应用程序,用卡触摸屏幕,它就会获得授权。 但问题是:

  • 将卡片放置在屏幕上的哪个位置并不重要,因为卡片会非常小以适应各种屏幕尺寸
  • 我们可以随机放置 9 个“手指”的矩形最佳尺寸为 4.5 厘米 x 3 厘米
  • “手指”本身只有在大约 6 毫米的圆圈内才会被识别为触摸(不确定是否可以做得更小)

我想我们可以找到左上角的“手指”,并从中得到所有其他“手指”的 X 和 Y 差异。然后将结果数字连接成字符串并将其用作解密/加密 key 。所以基本上:

key = concat(X2 - X1, Y2 - Y1, X3 - X1, Y3 - Y1, ...)

但我认为这种方法可能的组合很少(给定相对较小的卡片尺寸和相对较大的“手指”),并且人们可以轻松编写一个程序来生成所有可能的组合并立即破解 key 。我的说法正确吗?如果是这样,我该如何改进?

感谢您的想法

更新1:实际上在iOS上尝试过。结果并不乐观,因为每次检测到的“手指”都不同。它们之间的距离变化很大(多达 40 像素!)。所以我想这并不像我预期的那么容易,因为操作系统似乎每次对相同的两个圆圈检测到的触摸都不同。

最佳答案

您的问题缺乏一些相关信息:圆圈需要相距多远,系统才能区分它们?您实际上可以期望圆心的分辨率是多少? “6mm 圆”是指 6mm 直径或半径(甚至周长)吗?

由于缺乏细节,我会做一些相当粗略的近似。首先,我要求将两个圆圈放置在卡片的相对角上。这样,您可以通过寻找距离最大的一对来找到它们,并据此计算卡片的方向和大小并进行纠正。这样就剩下 7 个手指可以随机放置。我假设分辨率为 1mm,并将自己限制在 45×30mm 区域。这意味着每个圆有 39×24=936 个位置,总共 9367≈6,3×1020≈269 组合。好的,这并不排除重叠的圆圈。但由于该卡的覆盖范围仍然相当稀疏,因此这应该不算太多。我认为 64 位熵(即 264 可能的组合)应该是合理的,即使您强制执行不重叠的圆。如果您确实能够以所需的分辨率检测圆心,那就是。对于大多数应用程序来说,这应该足够安全。比 8 个字母的密码好得多,但比通常用于例如密码的对称 key 差。 AES。

由于所有这些在很大程度上取决于分辨率,因此可能值得首先调查该方面。通常,您会获得手指位置的像素坐标,但假设您总是获得最接近圆心的像素坐标,那就太期望了。因此,您可以首先编写一个小应用程序,绘制一个 6 毫米的圆并记录它收到的坐标。然后将一个 6 毫米的人造圆放入多次绘制的圆中。查看记录的位置距圆心有多远。也许在删除异常值之后,取这些差异的最大值。我会添加一两个像素,以解决由于卡片旋转而导致的舍入误差。然后将该像素计数转换回公制长度。这是您可以期待的分辨率。您可能需要对多个设备执行此操作。如果您确实进行了这些实验,请告诉我您的发现,我将相应地更新我的答案。

关于security - 来自随机放置的圆圈的随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21698915/

相关文章:

javascript - 按顺时针方向排序点

android - 在我的应用程序上禁用多点触控

java - Servlet - isUserInRole()

Oracle:我需要对序列授予什么权限?

jquery - JAX-RS 只需要检查授权

c# - 为什么 .NET 在 String.Format 中使用与默认 Math.Round() 算法不一致的舍入算法?

c - 统一认证库

算法限制分析和使用积分

javascript - 在 Unity 中创建交互式 UI

iphone - 以多次触摸开始的触摸给出了错误的位置