2009-12-11 88 views
1

問題看起來很簡單:只需分配一個id並用二進制表示即可。爲每個用戶分配一系列唯一位的算法?

問題出現是因爲用戶能夠將0位更改爲1位。爲了澄清,散列可能從0011到0111或1111,但從不從1010.每一位具有相同的改變機會並獨立於其他改變。

如果用戶假設用戶比特位被篡改的比例很低,那麼你需要存儲什麼才能從hash - > user進行存儲?我也假定在某些情況下失敗,所以正確的解決方案應該有一個可接受的錯誤率。

我估計被篡改的最大位數約爲總集合的30%。

我猜可以接受的錯誤率取決於所需散列的數量和每個散列設置的位數。

我擔心有足夠的操作ID不能從哈希重建。我想問的問題是我可以使用哪些安全防護裝置或獨特的定位系統來確保發生這種情況。

+0

您能否解釋一下「將0位更改爲1位」的含義?那麼由此產生了什麼問題?你認爲「低位篡改百分比」是什麼? – 2009-12-11 03:40:01

+0

我試圖編輯更多信息。 – Mark 2009-12-11 03:47:06

+3

他意味着位可以由惡意用戶設置,但從未清除。例如,也許使用微小的金線代表「清除」位;用戶可以使設備過載以熔化導線,設置該位,但是沒有辦法跳過連接以再次清除位。 – erickson 2009-12-11 03:50:49

回答

2

你的問題並不完全清楚。

你是說你想基於用戶標識的散列來驗證用戶,但是擔心用戶可能會改變散列中的某些位?

如果這是個問題,那麼只要您使用經過驗證的散列算法(如MD5),用戶操縱其散列位以獲取其他用戶ID的風險非常低。

如果這不是你所追求的,你能否澄清你的問題?

編輯

閱讀您的澄清後,它看起來像你可能會Forward Error Correction後,一個家庭的算法,允許你改變重建數據。

從本質上講,使用FEC,您將每個位編碼爲一系列3位,並在再次解碼時應用「多數贏」主體。編碼時,將「1」表示爲「111」,將「0」表示爲「000」。解碼時,如果大部分編碼的3位都爲零,則將其解碼爲零。如果大多數編碼的3位爲1,則將其解碼爲1.

+0

我不擔心用戶操縱他們的ID來匹配其他人,我擔心有足夠的操作ID不能從哈希重建。我想問的問題是我可以使用哪些安全防護裝置或獨特的定位系統來確保發生這種情況。 – Mark 2009-12-11 03:52:58

+0

當然,在這種情況下,「多數贏」並不完全是正確的策略,因爲「101」必須指示被篡改爲0.您也可能想要連續使用多於3個比特,因爲三比特的概率一排被翻轉是不可忽略的。 – 2009-12-13 06:48:33

+0

前向糾錯算法假定位可以隨機翻轉(即由於調制解調器上的線路噪聲或驅動器上的硬件故障)。如果這些位真的只能從0變爲1而不是從1變爲0,那麼Jason是正確的,你會認爲111以外的任何東西最初都是0.我仍然不理解只能翻轉位的用例在一個方向,但這是一個不同的問題。 – 2009-12-14 04:44:04

0

所以你試圖分配一個「唯一的ID」,即使它變成了別的東西,它仍然是一個唯一的ID?如果唯一的「篡改」是將0改爲1(但反之亦然)(這看起來相當不合理),那麼通過爲每個用戶分配一個特定的位,可以得到一個有效的'ID',設置該位在該用戶的ID中爲零,並且在每個其他用戶的ID中爲一個。

因此,用戶的任何擺弄都會導致他們自己的ID被破壞,但不允許冒充其他人。

+0

我喜歡這裏要去的地方,但我不會喜歡爲每個正在使用的ID設置一個位。 – Mark 2009-12-11 03:46:34

1

爲每個用戶分配一個具有相同位數的ID。

通過這種方式,您可以立即檢測是否有篡改發生。如果您在任何兩個ID至少爲2n之間另外創建Hamming distance,則在設置了小於位的情況下,您將能夠重建原始ID。

0

兩個ID之間的距離(必須更改以從一個單詞到另一個單詞得到的位數)稱爲漢明距離。錯誤糾正代碼可以糾正多達這個距離的一半,並仍然給你原來的單詞。如果您認爲30%的位可能被篡改,這意味着2個字之間的距離應該是位的60%。這將剩餘40%的空間用於ID。只要你隨機產生給定位數的40%的ID(還包括糾錯部分),你應該能夠恢復原始ID。

+0

哎呀,沒有看日期 – tomato 2013-06-06 11:04:55

相關問題