单向函数
乍听上去,单向函数似乎没有用,因为您无法从单向计算的密文中找回明文.为什么要计算一个无法解开的密码呢?当然,几乎是单向的函数是非常有用的,因为从本质上讲,所有的公钥函数都是带“天窗”的单向函数.公钥密码术的良好候选函数,是那些在一个方向上容易计算,而在另一个方向上除非您知道某些秘密否则极难计算的函数.因此,我们发现公钥算法是基于因式分解与其它较难的数学窍门的. 【程序编程相关:CA发布共享安全控件解决方案】
散列算法是单向函数.也就是说,它们接收一个明文字符串,将它转换成一小段无法用来重建原始明文的密文.显然,要使这种函数起作用,转换中必需丢失一些数据. 【推荐阅读:数字军工信息安全管理案例】
正如结果所表明,真正的单向函数也是有用的.这些函数通常叫做 散列函数,其结果通常称为 密码散列值. 密码校验与. 密码指纹或 消息摘要.此类函数在许多密码协议中起着重要作用. 【扩展信息:北京石景山区政府城域网内网安全案例】散列函数
其构思就是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文.理论上,所有可能的明文将散列成一个唯一的密文,但实际上通常发生的不是那样.大多数时候,几乎有无穷多个不同的字符串可以产生完全相同的散列值.但是,对于一个好的密码散列函数来说,在实践中应该很难有两个可理解的字符串散列相同的值.好的散列函数的另一个特性是输出不以任何可辨认的方式反映输入.
散列函数通常产生恒定大小的摘要.许多算法产生很小的摘要,但是,算法的安全性很大程度上取决于结果摘要的大小.我们推荐选择那些提供不小于 128 位摘要的算法.sha-1 提供 160 位散列,是一种可以使用的好散列函数.
可以使用散列函数来确保数据完整性,这很象传统的校验与.如果您公开发布一个文档的有规律密码散列,则任何人都可以检验该散列,假设他们知道散列算法的话.人们在实践中使用的大多数散列算法是公开发布与为人熟知的.再次提醒您,使用专用密码算法,包括散列函数,通常是一个坏主意.
因特网分发
考虑一下分发在因特网上的软件包的情况.在不远的过去,通过 ftp 得到的软件包是与校验与关联的.其思想是下载软件,然后运行一个程序来计算您的校验与版本.然后可以将自行计算的校验与与 ftp 网站上得到的校验与相比较,以确定两者匹配并确保传输连接上(over the wire)的数据完整性(各种各样).问题是这种过时的方法根本就不加密.首先,有许多校验与技术可以恶意修改下载程序,并可能导致修改过的程序产生完全相同的校验与.其次,带有其相关联(保护极差)校验与的软件包的“特洛伊”版本可以轻易地在 ftp 网站上发布.密码散列函数可以用做老式校验与算法的随便替代物.它们具有一个优点,就是使篡改投递代码变得极其困难.预先警告您 ― 这种分发方案还有一个问题.如果作为软件消费者,不知何故下载了错误的校验与,您会怎么办?例如,假设我们分发了“xyzzy”软件包.一天夜里,一些黑客闯入了分发机器,并将 xyzzy 软件换成了一个稍作修改的版本,其中包含恶意的特洛伊木马.攻击者也将我们公开分发的散列替换成带有特洛伊副本的散列发行版.此时,当某个无辜的用户下载目标软件包时,将得到恶意的副本.受害者也下载了密码校验与,并针对软件包测试它.它进行检测,而恶意代码看起来安全可供使用.显然,如果我们不能确保散列本身不被修改,仅仅散列不能成为完整的解决方案.简而言之,我们需要一种认证散列的方法.
... 下一页