8.5 使用密钥

    软件加密是可怕的。一台微机在一种程序控制下的时代已过去了,现在有Macintosh系统7、Windows NT和UNIX,谁也说不准什么时候操作系统将会中止加密的运行,将一些东西写在磁盘上,和处理另外一些急需的工作。当操作系统最后回头加密那些正被加密的东西时一切好象还是那么好。没有谁意识到操作系统已把加密应用程序写到磁盘上,并同时将密钥也写了下来。这些密钥未被加密,在计算机重新覆盖那个存贮区之前它一直留在磁盘上,或许几分钟,或许几个月,甚至永远。当攻击者采用好的工具彻底搜索该硬盘驱动器时,密钥可能还放在那里。在一个可抢先的、多任务环境中,你可以设置你的加密操作足够高的优先权以防止被中断。尽管这样可以减轻危险度,但仍有风险。

    硬件实现更安全。如果受到损害,许多加密设备被设计成能够擦出密钥,例如IBM PS/2加密卡有一个包含DES芯片、电池和内存的环氧单元。当然,你得相信硬件制造者正确地实现了这些特征。

    在一些通信应用中,如电话加密机,可以使用会话密钥(Session Keys)。会话密钥是指用于一次通信会话——一次单独的电话通话,通话完毕就抛弃的密钥。这种密钥使用一次后不再储存,并且如果你使用一些密钥交换协议将密钥从一端传到另一端,在使用之前也不会被储存。这样就减小密钥被损害的可能性。

控制密钥使用

    在一些应用中控制怎样使用会话密钥是有意义的,有的用户需要它或许仅仅是为了加密,有的或许是为了解密,而会话密钥应该被授权仅用于某一特定机器或时间。运用这些限制的一个方案是在密钥后面附加一个控制向量(Control Vector,CV)——用它来标定密钥的使用和限制(参见24.1节)[1025,1026]。对CV取单向Hash运算,然后与主密钥异或;把得到的结果作为密钥对会话密钥进行加密,再把合成的加密了的会话密钥跟CV存在一起。恢复会话密钥时,对CV取Hash运算再与主密钥异或,最后用结果进行解密。

    该方案的好处是CV可以任意长,并且总是以明的方式与加过密的密钥一起储存。本方案假定硬件防窜改和用户不能直接得到密钥。本系统进一步的讨论请参见24.1节和24.8节。