資訊指紋及其應用

2021-06-15 22:37:13 字數 1244 閱讀 9520

——摘自google黑板報

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

發表者:吳軍,google 研究員

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

我們在&wd=%ce%e2%be%fc+%ca%fd%d1%a7%d6%ae%c3%c0&ct=0

假定**的平均長度為一百個字元,那麼存貯 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 以前被認為是沒有漏洞的,現在已經被中國的王小雲教授證明存在漏洞。但是大家不必恐慌, 因為這和黑客能真正攻破你的註冊資訊是還兩回事。

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

數學之美 資訊指紋及其應用

前面在介紹網路爬蟲時說道為了避免重複爬取,爬蟲需要維護乙個url表來標記是否已經訪問該url。乙個問題是這個url只是我們用於驗證是否訪問,而沒有其他作用。但網頁url長度很長,佔據100位元組左右,這大大浪費了資源。所以需要我們對url進行資訊壓縮,要求壓縮後的url佔據記憶體少,且不會出現重複問...

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

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

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

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