随机放置圆圈的随机字符串

时间:2014-02-11 10:15:08

标签: security math multi-touch

我有一个我想做的项目这个有趣的想法,但我不确定它的数学部分。这是一个想法:

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

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

  • 将卡放在屏幕上的位置无关紧要,因为卡的尺寸非常小,适合各种屏幕尺寸
  • 我们可以随机定位9“手指”的矩形最佳为4.5cm x 3cm
  • “手指”本身只有在大约6毫米的圆圈时才被识别为触摸(不确定是否可以缩小)

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

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

但我认为这样的方法几乎没有可能的组合(给定相对较小的卡片大小和相对较大的“手指”),并且可以轻松编写程序以生成所有可能的组合并立即打破密钥。我是对的吗?如果是这样,我怎么能改善这个?

感谢您的想法

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

1 个答案:

答案 0 :(得分:2)

你的问题是缺少一些相关的信息:圈子之间需要相隔多远才能让系统区分它们?您对圆形中心的实际期望是什么?而“6mm圆”是指6mm直径还是半径(甚至是圆周)?

缺乏细节,我会做一些非常粗略的近似。我首先要求将两个圆圈放在卡片的对角。这样,您可以通过查找具有最大距离的对来找到它们,并从中计算出卡的方向和大小并对其进行校正。这使得7个手指随机放置。我假设分辨率为1mm,并将自己限制在45×30mm的区域。这意味着每个圆圈39×24 = 936个位置,总共936个 7 ≈6,3×10 20 ≈2 69 组合。好的,这不排除重叠的圆圈。但是由于卡片的覆盖范围仍然很少,所以这不应该太多。我会说64位熵(即2 64 可能的组合)应该是合理的,即使你强制执行非重叠的圆。如果你能真正检测到具有所需分辨率的圆心,那就是。这应该足以满足大多数应用程序的安全性远远优于8个字母的密码,但比通常用于例如密码的对称密钥更差。 AES。

由于所有这些在很大程度上取决于分辨率,因此首先研究这一方面可能是值得的。通常你会获得手指位置的像素坐标,但是假设你总是得到最接近圆心的像素坐标,那就太过分了。因此,您可以从编写一个小应用程序开始绘制一个6毫米的圆圈并记录它接收的坐标。然后在拉出的一个中放置一个6毫米的人造圆圈很多次。查看记录位置与圆心的差异程度。在删除异常值之后,可以最大限度地利用这些差异。我会添加一个或两个像素,以解决由于卡的旋转导致的舍入错误。然后将该像素数转回公制长度。这是您可以期待的分辨率。您可能必须为多个设备执行此操作。如果你确实进行了这些实验,请告诉我你找到了什么,我会相应地更新我的答案。