2014-02-11 169 views
2

我有這個有趣的項目想要做的想法,但我不確定它的數學部分。這裏的理念是:來自隨機放置的圓圈的隨機字符串

  • 製作的塑料卡,將模擬9手指多點觸摸姿態時舉行反對基於「9手指」放置電容屏
  • ,確定某種獨特的字符串並將其用作應用程序的加密/解密密鑰

這樣我就可以打開一個應用程序,用卡片觸摸屏幕並獲得授權。 但這裏有一個問題:

  • 它不應該不管你在哪裏放置在屏幕上的卡,因爲卡會非常小,以適應不同的屏幕尺寸
  • 中,我們可以隨機定位的矩形9「手指」將最佳地4.5釐米×旁邊3cm
  • 「手指」本身,如果它是關於

我想通6mm的圓(不知道這是否可以做得更小)只識別爲觸摸我們可以找到左上角的「手指」並獲得其他任何「手指」X.和Y不同。然後將結果數字連接成一個字符串並將其用作解密/加密密鑰。所以基本上:

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

但我認爲這樣的做法將有很少的可能的組合(賦予相對小卡的尺寸和相對大的「手指」)和一個可以很容易地編寫一個程序來生成所有可能的組合和立即破除密鑰。我對嗎?如果是這樣,我該如何改進呢?

感謝您的想法

更新1:真正嘗試過了iOS上。結果並不樂觀,因爲每次都會檢測到「手指」的不同。它們之間的距離差異很大(多達40個像素!)。所以我猜這不像我預期的那麼容易,因爲操作系統似乎每次都檢測到相同的兩個圓圈。

+0

由於這聽起來像是你要定位移動設備,你有沒有考慮用內置攝像頭掃描矩陣碼? – MvG

+1

這對最終用戶(我)來說太麻煩了,也是 - 這是一個有趣的項目,關鍵字是「有趣」:)這只是我想要嘗試的。 – Marius

回答

2

你的問題是缺乏一些相關的信息:需要多大的距離才能使系統仍能區分它們?你可以真切地期望圓形中心有什麼決議?通過「6mm圓圈」,你的意思是6mm直徑或半徑(甚至圓周)?

缺乏細節,我會做一些非常粗略的近似值。我首先要求將兩個圓圈放在卡的對角。這樣,您可以通過查找具有最大距離的對來找到它們,並從中計算卡的方向和大小並進行更正。這留下7個手指隨機放置。我會假設1毫米的分辨率,並將自己限制在45×30毫米的區域。這意味着每圈39×24 = 936個位置,共計936個≈6,3×10 ≈2組合。好的,這並不排除重疊的圈子。但由於該卡的覆蓋範圍相當稀少,所以不應該太多。我認爲64位熵(即2 可能的組合)應該是合理的,即使你強制執行非重疊的圓圈。如果你真的可以用所需的分辨率檢測圓心,那就是。對大多數應用來說,這應該是足夠的安全性遠比8個字母的密碼好,但比通常用於例如8個字母的對稱密鑰更差。 AES。

由於所有這些都非常依賴於解決方案,因此可能需要首先對此方面進行調查。通常你會得到你的手指位置的像素座標,但它會期望太多,以至於你總是得到最接近你的圓心的像素座標。所以你可以先寫一個小的應用程序,繪製一個6mm的圓圈並記錄它接收的座標。然後在其中放置一個6毫米的人造圓圈。觀察記錄的位置與圓心的距離有多遠。取出這些差異的最大值,可能是在刪除異常值後。我會添加一個或兩個像素,以解決由於卡片旋轉而導致的舍入錯誤。然後將該像素數恢復爲公制長度。這是您可以預期的分辨率。您可能必須爲多個設備執行此操作。如果您確實執行了這些實驗,請告訴我您發現的內容,然後相應地更新我的答案。

+0

MvG,謝謝你的回覆。不幸的是,我還不知道圈子應該離開多遠,但它們不應該重疊甚至是碰觸。考慮到這一點,只有第一個圈子會有很多可能的位置,而其他所有的圈子可能有更少的選項,對嗎? – Marius

+0

@Marius:筆記我更新了我的問題。後者的圈子可能會有更少的選擇,但不會發熱。你可以把所有的圈子放在一個30×12mm的帶子裏,並留出空間。所以沒有被圓圈覆蓋的區域總是大於30×33mm,即使是最後一圈。這是我基於64位或更多的最後一個近似值的思想。 – MvG

+0

糟糕,沒有注意到你的答案的變化。不知何故,很難相信在這樣一個小範圍內有這麼多可能的組合,但是再一次,我對數學完全無能爲力,所以我只相信你對此的看法。 – Marius