天天看點

《大資料原理:複雜資訊的準備、共享和分析》一一2.6 單向哈希函數

2.6 單向哈希函數

單向哈希函數是一種字元串轉換算法。由于轉換後的字元串不能通過哈希值計算獲得原字元串,是以稱之為“單向”哈希函數。常用的單向哈希函數是md5和sha(标準雜湊演算法)。任何字元串都可以計算哈希值,包括人名、檔案、其他單向哈希函數等。對于給定的字元串,計算出的哈希函數始終相同。

這裡給出幾個md5算法執行個體。

單向哈希函數值看似是随機ascii字元序列。請注意輸入字元串中的微小變化會産生完全不同的單向哈希輸出結果,例如,小寫字母變成大寫字母,多了一個空格或注釋符等。執行個體中的第一個和最後一個輸入有相同的單向哈希輸出(ri0avtiailwns8+nvkhfa),這是因為這兩個輸入相同。事實上,隻要算法相同,那麼兩個相同的輸入都将生産相同的哈希函數值。無論輸入的字元串長度是多少,生成的單向哈希函數輸出長度不變,對于md5算法而言,都是22個字元。也就是說,任何長度的字元串、檔案或者文檔都生成相同長度的單向哈希函數結果。

單向哈希函數可以代替個人資料記錄的辨別符。這允許大資料資源随着時間的推移,繼續在特定的一條記錄裡積累資料,即使這條記錄已去辨別化。這裡給出它的工作原理28,某條記錄的辨別符是單向哈希函數的輸入,現在這條記錄的主要辨別符是一個單向哈希序列。此時,該記錄所在資源的資料管理者,不能通過檢視該記錄确定與之相關的個體,因為,原始辨別符已被一串不熟悉的序列所取代。

無論采用哪種雜湊演算法,同一個辨別符總是産生相同的單向哈希序列。就像患者再次到醫院看病時,新的病曆記錄是在同一個患者辨別符下建立的。假設新的病曆記錄是未辨別的,同時,該記錄對應的原始的患者辨別符被它的單向哈希值所替代,這條新的病曆記錄可與之前具有相同哈希函數值的記錄合并。采用這種方法可以不用知道人名,而将屬于該個體的去辨別的記錄全部收集起來。下一章将詳述記錄去辨別的方法。

單向哈希函數可以解決某些實際問題。如果有人碰巧有原始辨別符的完整清單,那麼,給每一個列出的辨別符實施單向哈希變換将非常簡單。哈希變換會生成一個查找表,該表可以将去辨別化後的記錄映射回原始辨別符,這是一種稱為“字典攻擊”的政策。為了使去辨別操作有效,原始辨別符序列必須保密。

繼續閱讀