2.6 单向哈希函数
单向哈希函数是一种字符串转换算法。由于转换后的字符串不能通过哈希值计算获得原字符串,所以称之为“单向”哈希函数。常用的单向哈希函数是MD5和SHA(标准哈希算法)。任何字符串都可以计算哈希值,包括人名、文件、其他单向哈希函数等。对于给定的字符串,计算出的哈希函数始终相同。
这里给出几个MD5算法实例。
单向哈希函数值看似是随机ASCII字符序列。请注意输入字符串中的微小变化会产生完全不同的单向哈希输出结果,例如,小写字母变成大写字母,多了一个空格或注释符等。实例中的第一个和最后一个输入有相同的单向哈希输出(Ri0aVTIAilwnS8+nvKhfA),这是因为这两个输入相同。事实上,只要算法相同,那么两个相同的输入都将生产相同的哈希函数值。无论输入的字符串长度是多少,生成的单向哈希函数输出长度不变,对于MD5算法而言,都是22个字符。也就是说,任何长度的字符串、文件或者文档都生成相同长度的单向哈希函数结果。
单向哈希函数可以代替个人数据记录的标识符。这允许大数据资源随着时间的推移,继续在特定的一条记录里积累数据,即使这条记录已去标识化。这里给出它的工作原理28,某条记录的标识符是单向哈希函数的输入,现在这条记录的主要标识符是一个单向哈希序列。此时,该记录所在资源的数据管理者,不能通过查看该记录确定与之相关的个体,因为,原始标识符已被一串不熟悉的序列所取代。
无论采用哪种哈希算法,同一个标识符总是产生相同的单向哈希序列。就像患者再次到医院看病时,新的病历记录是在同一个患者标识符下创建的。假设新的病历记录是未标识的,同时,该记录对应的原始的患者标识符被它的单向哈希值所替代,这条新的病历记录可与之前具有相同哈希函数值的记录合并。采用这种方法可以不用知道人名,而将属于该个体的去标识的记录全部收集起来。下一章将详述记录去标识的方法。
单向哈希函数可以解决某些实际问题。如果有人碰巧有原始标识符的完整列表,那么,给每一个列出的标识符实施单向哈希变换将非常简单。哈希变换会生成一个查找表,该表可以将去标识化后的记录映射回原始标识符,这是一种称为“字典攻击”的策略。为了使去标识操作有效,原始标识符序列必须保密。