我需要非常非常快速的一對一算法。該算法不需要牢不可破。合理的強度已經足夠,但它必須閃電般快。我將用硬件來實現它。面積也是一個問題,所以它不應該使用太多的邏輯。需要非常快速的一對一算法,可能需要加密
它應該是一個函數f_N(x),它的輸入是一個N位數,其輸出是一個N位數。 N是一個常數,可能在20-70之間。該功能必須是一對一的。 (即可逆的,這意味着解密是可能的解密速度是無關緊要的)。
我需要加密在3ns以下,這是約333M每秒輸入。例如,DES的速度大約爲每秒50Mbits。我需要每秒333M 輸入。
到目前爲止,我一直在使用約6輪的Feistel密碼。這似乎需要約3ns。
對此提出建議?
更多音符
出現了一些問題,所以我會解釋。我需要把密鑰放到哈希表中。標準方法是對輸入鍵進行散列處理,並將結果作爲索引放入表中。表中的每一行都必須存儲原始密鑰。 Information theory告訴我們表中的行實際上不需要與輸入鍵一樣寬,而是與輸入鍵一樣寬,在表的地址中的位數不會少於。例如:
- 輸入:X(N位)
- 散列:X%128(8個比特)
- 驗證:地板(X/128)(N-8位)
這將是愚蠢的CPU整數通常是相同的寬度,但我在硬件上做。
x%128是一個很容易破解的散列。事實上,如果輸入鍵只在前幾位有所不同,那麼您將在意外中破解散列。我想要一個在事故中不會被破壞的散列,甚至可能很難有意破壞。我也試過LFSR。 LFSR很快,但是兩個等長的LFSR會生成線性相關的哈希結果。 (如果f(x)和g(x)爲兩個不同的多項式給出相同的散列值,則f(x + 1)和g(x + 1)容易相關)。位輸入和V位,H位輸出(V + H = N),在這裏很難找到兩個長度爲N的輸入,這樣兩個輸出將輸出相同的H.加密符合法案,因爲它使輸出與輸入長度相同並且很難反轉。除了加密以外的東西也可能工作,儘管看起來我想要的幾乎就是加密的定義。
對不起,沒有解釋所有這些預先。希望這可以澄清事情。
對Andrew Hare的帖子的評論意味着你需要一個加密散列。這很重要,因爲R.A.的回答(TEA)不適合作爲散列--XBox安全性非常依賴於它。 – MSalters 2009-05-04 12:29:59
如果需要散列而不是加密算法,請*相應地編輯您的問題,因爲它們有很大的差異。但是你確實提到它需要是可逆的... – 2009-05-04 12:58:25
你沒有解釋你的6輪feistel密碼的問題。這聽起來很不錯。 – 2009-05-04 13:53:29