即使密码系统的任何细节已为人悉知,只要密钥未泄漏,它也应是安全的。
密钥管理就是在授权各方之间实现密钥关系的建立和维护的一整套技术和程序。在一定的安全策略指导下完成密钥从产生到最终销毁的整个过程,包括密钥的生成、建立(分配和协商)、存储、使用、备份/恢复、撤销、更新、存档和销毁等。
密钥生成是密钥生命周期的基础阶段:
(1)密钥的生成一般首先通过密钥生成器借助于某种噪声源产生具有较好统计分析特性的序列,以
保障生成密钥的随机性和不可预测性,然后再对这些序列进行各种随机性检验以确保其具有较好的密码特性。
(2)用户可以自己生成所需的密钥,也可以从可信中心或密钥管理中心申请,密钥长度要适中。
(3)不同的密码体制,其密钥的具体生成方法一般是不相同的,与相应的密码体制或标准相联系。
密钥的建立就是使密钥安全(完整、保密)到达密钥使用的各实体对象,通常分为密钥分配和密钥协商。密钥分配一般是建立在接收方B对于发送方A信任的基础上,是由发送方A直接发送密钥,而在密钥协商中,接收方B对发送方A可能就不是那么信任了,由发送方A选择一部分密钥发送,接收方B也选择一部分密钥发送,两部分密钥进行组合,然后进行保密传输。在密钥协商中,任何一方都不可能提前知道密钥的内容。
密钥的安全存储是针对静态密钥的保护,通常有两种方法:
(1)基于口令的软保护;
文件形式或利用确定算法加密。
(2)基于硬件的物理保护;
存入专门密码装置中(存储型、智能型)。
利用密钥进行正常的密码操作,如加密、解密、签名等,通常情况下,密钥在有效期之内都可以使用。密钥使用应注意使用环境对密钥的安全性的影响。
密钥备份是指密钥处于使用状态时的短期存储,为密钥的恢复提供密钥源,要求安全方式存储密钥,防止密钥泄露。从备份或存档中获取密钥的过程称为密钥恢复。若密钥丧失但未被泄露,就可以用安全方式从密钥备份中恢复。
密钥撤销则是若密钥丢失或在密钥过期之前,需要将它从正常使用的集合中删除。在密钥有效期快结束时,如果需要继续使用相应密码体制,为保证密钥的安全性,该密钥需要由一个新的密钥来取代,这就是密钥更新。密钥更新可以通过再生密钥取代原有密钥的方式来实现。
当密钥不再正常使用时,需要对其进行存档,以便在某种情况下特别需要时(如解决争议)能够对其进行检索。存档是指对过了有效期的密钥进行长期的离线保存,密钥的后运行阶段工作。
对于不再需要使用的密钥,要将其所有复本销毁,而不能再出现。
(1)使用前状态:密钥不能用于正常的密码操作。
(2)使用状态:密钥是可用的,并处于正常使用中。
(3)使用后状态:密钥不再正常使用,但为了某种目的对其进行离线访问是可行。
(4)过期状态:密钥不再使用,所有密钥记录被删除。
(1)会话密钥(Session Key)
在一次通信或数据交换中,用户之间所使用的密钥,是由通信用户之间进行协商得到的。它一般是动态地、仅在需要进行会话数据加密时产生,并在使用完毕后立即进行清除掉的,也称为数据加密密钥。
(2)密钥加密密钥(Key Encrypting Key)
一般是用来对传输的会话密钥进行加密时采用的密钥,又称为二级密钥(Secondary Key)。密钥加密密钥所保护的对象是实际用来保护通信或文件数据的会话密钥。
(3)主密钥(Master Key)
对应于层次化密钥结构中的最高层次,它是对密钥加密密钥进行加密的密钥,主密钥应受到严格的保护。
假设A希望传递密钥K给B:
(1)随机选取素数P>K,选取ZP*中随机数a,计算Ka,将(Ka, P)发送给B;
(2)B收到A发送的信息后,选取ZP*中随机数b,计算(Ka)b,将((Ka)b)发送给A;
(3)A收到B发送的信息后,计算((Ka)b)a的{-1}次=Kb, 将Kb发送给B;
(4)B收到A发送的信息后,计算(Kb)b的{-1}次=K;
两个用户(主机、进程、应用程序)在用对称密码体制进行会话密钥Ks分配,需有共享的密钥加密密钥。用户A和B共享密钥加密密钥的方式:
(1) A、B事先共享一个对称密钥(无中心)。为避免重放攻击,优化版的无中心的密钥分配会在消息的最前面加上一段随机数或时间戳,一起加密。
(2) A和B分别与第三方C共享对称密钥(有中心)。密钥分配中心(KDC)与所有用户预设共享密
钥加密密钥,用户A与KDC有共享的密钥KAT,用户B与KDC有共享的密钥KBT;会话密钥KS可以由通信双方选取,亦可由KDC选取。
网络中用户(主机、进程、应用程序)在用非对称密码体制进行会话密钥Ks分配,则每个用户需要事先选定自己的公钥/私钥(PK,SK)对作为密钥加密密钥。
密钥协商是保密通信双方(或更多方)通过公开信道的通信来共同形成秘密密钥的过程。一个密钥协商方案中,密钥的值是某个函数值,其输入量由两个成员(或更多方)提供。密钥协商的结果是:参与协商的双方(或更多方)都将得到相同的密钥,同时,所得到的密钥对于非参与方都是不可知的。
A的签名算法为SigA,签名验证算法为VerA;B的签名算法为SigB,签名验证算法为VerB。设p是一个大素数,g∈Zp是模p本原元, p和g公开,所有用户均可获取,并可为所有用户所共有。
①用户A随机选取一个大数a ,0≤a≤ p-2.计算Ka=ga (mod p),并将结果传送给用户B。
② 用户B随机选取一个大数b ,0≤b≤ p-2.计算Kb=gb (mod p) ,然后计算K= (Ka)b (mod p) 和EB=EK[SigB(ga (mod p), gb (mod p))]。用户B将(PKB, gb (mod p), EB) 传送给用户A。
③ 用户A先计算K= (Kb)a (mod p) ,解密EB ,再验证B签名的VerB有效性。确认有效后,计算EA=EK[SigA(ga (mod p), gb (mod p))]。最后,把(PKA, EA)发给用户B。
④ 用户B解密后,验证A的签名VerA的有效性。