數學之美(系列十三) 之 資訊指紋及其應用

2021-04-20 08:09:18 字數 1321 閱讀 9956

2023年8月3日 上午 11:17:00

發表者:吳軍,google 研究員

任何一段資訊文字,都可以對應乙個不太長的隨機數,作為區別它和其它資訊的指紋(fingerprint)。只要演算法設計的好,任何兩段資訊的指紋都很難重複,就如同人類的指紋一樣。資訊指紋在加密、資訊壓縮和處理中有著廣泛的應用。

我們在圖論和網路爬蟲

假定**的平均長度為一百個字元,那麼存貯 200 億個**本身至少需要 2 tb,即兩千 gb 的容量,考慮到雜湊表的儲存效率一般只有 50%,實際需要的內存在 4 tb以上。即使把這些**放到了計算機的記憶體中,由於**長度不固定,以字串的形式查詢的效率會很低。因此,我們如果能夠找到乙個函式,將這 200 億個**隨機地對映到128 二進位即 16 個位元組的整數空間,比如將上面那個很長的字串對應成乙個如下的隨機數:

893249432984398432980545454543

產生資訊指紋的關鍵演算法是偽隨機數產生器演算法(prng)。最早的 prng 演算法是由計算機之父馮諾伊曼提出來的。他的辦法非常簡單,就是將乙個數的平方掐頭去尾,取中間的幾位數。比如乙個四位的二進位制數 1001(相當於十進位制的9),其平方為 01010001 (十進位制的 81)掐頭去尾剩下中間的四位 0100。當然這種方法產生的數字並不很隨機,也就是說兩個不同資訊很有可能有同一指紋。現在常用的 mersennetwister 演算法要好得多。

資訊指紋的用途遠不止**的消重,資訊指紋的的孿生兄弟是密碼。資訊指紋的乙個特徵是其不可逆性, 也就是說,

無法根據資訊指紋推出原有資訊,這種性質, 正是網路加密傳輸所需要的。比如說,乙個**可以根據使用者的cookie 識別不同使用者,這個 cookie 就是資訊指紋。但是**無法根據資訊指紋了解使用者的身份,這樣就可以保護使用者的隱私。在網際網路上,加密的可靠性,取決於是否很難人為地找到擁有同一指紋的資訊, 比如乙個黑客是否能隨意產生使用者的 cookie。從加密的角度講 mersennetwister,演算法並不好,因為它產生的隨機數有相關性。

網際網路上加密要用基於加密偽隨機數產生器(csprng)。常用的演算法有 md5 或者 sha1 等標準,它們可以將不定長的資訊變成定長的 128 二進位或者 160 二進位隨機數。值得一提的事,sha1 以前被認為是沒有漏洞的,現在已經被中國的王小雲教授證明存在漏洞。但是大家不必恐慌, 因為這和黑客能真正攻破你的註冊資訊是還兩回事。

資訊指紋的雖然歷史很悠久,但真正的廣泛應用是在有了網際網路以後,這幾年才漸漸熱門起來。

數學之美 系列十三 資訊指紋及其應用

資訊指紋及其應用 吳軍,google 研究員 任何一段資訊文字,都可以對應乙個不太長的隨機數,作為區別它和其它資訊的指紋 fingerprint 只要演算法設計的好,任何兩段資訊的指紋都很難重複,就如同人類的指紋一樣。資訊指紋在加密 資訊壓縮和處理中有著廣泛的應用。我們在圖論和網路爬蟲 現在常用的m...

數學之美 系列十三 資訊指紋及其應用

2006年8月3日 上午 11 17 00 發表者 吳軍,google 研究員 任何一段資訊文字,都可以對應乙個不太長的隨機數,作為區別它和其它資訊的指紋 fingerprint 只要演算法設計的好,任何兩段資訊的指紋都很難重複,就如同人類的指紋一樣。資訊指紋在加密 資訊壓縮和處理中有著廣泛的應用。...

數學之美 系列十三 資訊指紋及其應用

2006年8月3日 上午 11 17 00 發表者 吳軍,google 研究員 任何一段資訊文字,都可以對應乙個不太長的隨機數,作為區別它和其它資訊的指紋 fingerprint 只要演算法設計的好,任何兩段資訊的指紋都很難重複,就如同人類的指紋一樣。資訊指紋在加密 資訊壓縮和處理中有著廣泛的應用。...