信息指纹
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
##信息指紋的由來
??信息有“指紋”嗎?信息要“指紋”做什么呢?
??"指紋”一般特指我們識別人所采用各種方式的一個總稱。生活中我們需要辨認出周圍的每一個人,即使是非常相似的雙胞胎,因為辨別是我們進行相互交流的前提。無論是通過名字、長相、聲音的辨認,還是通過有技術依據的指紋與虹膜辨認,甚至是通過DNA鑒定,目的都只有一個,就是能準確確認對方。
??可見指紋的首要用途就是識別個體,當然作為指紋特征,需要它是可唯一確定的、不容易更改的、方便攜帶的。另外一個重要用途是檢索,我們需要找哪個朋友的時候,可呼叫他的名字找到他,也可以把他的指紋輸入電腦,很快就查詢到他的詳細信息。
??我們說:信息需要“指紋”的目的也有兩個:一是檢索,二是防止有假。前一個目的容易理解,我們現在都習慣網上搜索,找尋我們需要的各種信息。搜索有兩種模式:一種是將信息都先分類,先選擇信息類別是科技的還是文學的,是文字的還是圖像的;先大類再小類,逐漸細化,直到你找到需要的信息。但這種方式需要對信息做預處理,并且分類要科學,合乎大部分人的邏輯,否則就象迷宮一樣,進去就難出來了。另一種是提供一些搜尋的關鍵字,查詢時不可能拿這些關鍵字與所有的信息原文進行比對,時間上是不可能的,比對的一定是事前整理好的特征信息,能“代表”信息的規律的信息,這就是信息的指紋。所以信息提取指紋是我們在信息海洋中搜尋的前提。這個需求產生了Yahoo、Google、百度等搜索公司。理所當然,信息指紋技術也是搜索公司特別關注的新技術之一。
??信息需要指紋的另一個目的也是互聯網帶來的。我們生活在金錢驅動的階級時代,免費的午餐是沒有的,雖然信息的提供者大多的奉獻的,但當信息的價值顯現時,版權的問題就來了,最起碼的,你使用人家的信息,也應該給人家署名吧,尊敬也好,版權也好,反正信息需要帶上其“出身”的標簽。這在從前是相對容易的,因為信息的載體是紙張、廣播、電視,這些都比較好管理,互聯網的興起,信息變為電子流,一個人人都可以編輯的電子文檔,使用者說是他自己的寫的,你很難說是你的。若能在你發布的電子信息中,生成自身的“指紋”,別人就不容易冒充了。我們聽說過影像光盤中的“電子水印”,就是在視頻信息中隱藏制作者的特別信息,作為識別的“指紋”,但對普通的電子文檔,大家似乎沒有好的方法,現在流行的pdf文檔(只能讀不能改的一種文檔格式,把文字變成類似圖像的信息)是一些廠家提供手冊、說明書的保護方法,但對于互聯網上的豐富信息來說不適用的。
??我們很容易聯想到CA證書的方式,在電子信息中放入證書,具有防篡改和抗抵賴的功效,然而在普通的文檔中,證書與信息本身是很容易分離的,也就是說我只要信息,拋棄證書,把一次“合法”得到的信息,變成自己的,再進行N次復制發布,對信息的擁有者來說,是個“頭痛”的問題。互聯網是一個虛擬的世界,有些現實中的法律與道德規范很難落實,變化各種虛擬的身份在互聯網上就想玩游戲一樣方便。所以信息指紋不僅應該源自信息,信息改變了,指紋就能反應出來;而且還要廉價、容易實現。
??我們都知道互聯網是信息的海洋,但它也有大量的垃圾數據、重復數據,如何有效地在檢索中減少重復、剪除垃圾,就需要信息指紋的技術。比如對一個博客文章的搜索,原始發布的應該最需要的,轉載的基本屬于重復的,引用的則屬于有關聯的,只是偶爾出現該關鍵詞的不相關信息的就是用戶不需要的了。
??從另一個需求角度講,在涉密信息系統中,有一項重要的防護要求,就是高密級的信息不能流向低密級保護的網絡區域,但如何防護卻是個大問題。信息中的密級標識是很敏感的,只是在文檔中標識,則很容易刪除或修改,標識被修改了,防泄密就成了問題。信息指紋具有不可篡改的特性,把密級標識放在信息指紋中,就很容易通過密級過濾的“網絡防火墻”,自動檢索出高密級信息,防止信息的泄密。
??綜觀各種需求與目的,信息不僅需要指紋,而且信息指紋將是互聯網上“信息海洋”的必然技術。
##信息指紋提取的幾種方法
??信息按照其表征特性可以分為:文字信息、圖形信息、圖像信息、語音信息。按照其來源可以分為:文檔信息(正式編寫的信息,有標題、作者、摘要、關鍵字等輔助信息,如正式發表的文章、論文等)、自然信息(隨意記錄或編寫的信息,只有信息的內容,沒有或部分有輔助信息,如八卦新聞、聊天室的帖子、博客的文章等)、再生信息(對各種信息的統計信息,或通過對別人信息的重新編寫,總結、聯想出來的新信息,一般再生信息也都屬于文檔信息,有輔助說明信息)
??統計信息表明:對一個文本信息提取指紋,當選取8個關鍵詞及其詞頻作為其指紋時,準確度在98%以上,查全率在30%左右。這說明要能“概括”該信息,找出其8個使用頻率最高的詞匯,基本可以代表這個信息。
??因此文字信息提取指紋的要素一般為下面信息:
- 標題
- 作者
- 發布時期、修改日期
- 主要關鍵詞
??其中關鍵詞的選取可以有幾種方法:
- 作者提供的關鍵詞
- 作者提供的摘要,或整理人員編寫的摘要
- 提取信息中出現頻率高的8個關鍵詞
- 文章開頭或結尾一段話
- 文章中固定位置的一段話(如第5行的第一句話)
??有了這些代表信息后,便可以形成指紋信息,若再對這些信息進行Hash運算、MD5等方式加密、變化,生成一段定長(如256字節)的信息,就可以作為該信息的“指紋”,經過加密主要是防止對信息內容的篡改和對指紋的替換。這種方法有些象數字簽名技術,但要相對簡單,并且不進行加密運算時的標題等信息可以直接作為檢索的關鍵字使用,
??這里提取信息中的高頻率關鍵詞是一個技術的難點,其原因有兩個:
??文字信息的指紋提取不容易,對語音、圖像指紋的提取就更困難了,因為對圖像、語音的描述本身就比文字要麻煩。一般的思路是:在語音、圖像先進行特征編碼,也就是選取有代表意義的局部,語音中的某段頻率(人的聲音都有自己的音色特點),圖像中的明暗對比強烈的地方、或關鍵圖像的區域等,再對編碼進行變換、加密等處理,形成指紋。下面我們介紹一個圖像提取指紋的簡單方法:色階圖方法
??色階圖(Color histograms):就是從圖像中產生出,可以描述圖像的色彩分布。
??圖像與文本信息不同,是以點陣的色彩存放,信息量非常大,算法的目的就是進行信息簡化,具體步驟如下:
對blue X 對green o對cyan O 對 red + 對magenta @ 對yellow #
對gray100
##小結
??信息指紋是信息時代互聯網上的新興技術,目前還處于起步的階段,但隨著互聯網的繁榮,信息指紋的未來前景是廣闊的。這里只是簡單的介紹,給大家一個思路,離理論探討還相距甚遠。
原文地址:http://zhaisj.blog.51cto.com/219066/117168/
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
總結
- 上一篇: Java判断类和实例的关系
- 下一篇: 如何提升网站的性能?