标题：CPU卡密钥管理系统
介绍
在传统的密钥管理系统中，密钥通常是存储在设计机或磁盘里，并借助于网络、磁盘以邮件的方式进行传递。为了安全起见，通常在传递之前，必须先将所要传递的密钥进行加密处理，接收方收到后再对其进行解密处理。由于采用这种方式时仍然需要传递密钥，只是具体的密钥对象改变了，因此安全性还是没有明显地提高；即命名采用专门的硬件加密机器进行加密处理，但由于储存和传递环节的影响，其安全性能仍等同于软件加密效果，为此有必要提高储存和传递环节的安全性。
虽然传递密钥比较安全的做法是采用非对称加密体制，用己方私钥和对方公钥进行双重签名加密，对方用其私钥和已公钥进行解密处理。采用这种方法来传递密钥比较麻烦，实现起来非常困难，不仅要求通信双方要有已方的公钥和私钥，而且还要获得对方的公钥。公钥和私钥的产生比较复杂和困难，而且通常还需要作为公证的第三方介入。目前绝大多数的通信双方都没有这些条件，并且它们之间的通信绝大多数是一次性的。考虑到上述原因，往往不采用非对称加密体制，而仍然采用实现方法和途径都相对简单和容易得到的对称加密体制。
采用对称加密体制时，加密密钥和解密密钥是相同的或相关联的，因此对其存储和传递的安全性要求非常高。如前所述，采用传统方式进行加密处理时，其效果等同于软件加密效果，在安全性方面不如硬件直接加密的效果；由此可以看出，如果我们既用硬件设备进行加密处理，又用专门的硬件设备来存储和传递密钥，这样就可以极大地提高密钥系统的安全性。目前能满足这两种要求，而且得到业界广泛认可的器件只有CPU智能卡。CPU卡具有硬件加密结构，可以作为加密器件使用；而且其特殊的软件体系-COS（Chip Operation System）又为数据存储和操作提供了较高的安全性，可用于小批量数据的存储。
CPU卡的安全功能
CPU卡作为智能卡家族中最新的成员，由于具有较高的安全性和应用方便性，得到越来越广泛的应用，CPU卡的安全性不仅体现在其硬件结构上，而且其软件系统COS也保证了应用的安全性，同时还提高了应用的方便性和灵活性。
CPU卡的加解密功能由内嵌的硬件加密协处理器来完成，具有很高的安全性。目前，CPU卡一般采用DES加密算法。DES算法是一种迭代分组密码算法，它加密时把明文以64比特为单位分成块，然后用密钥把每一块的明文转化为64比特密文。使用的密钥长度为64位，其中有效长度为56位（有8位用于奇偶校验）。为了进一步提高安全性，CPU卡通常采用三重DES算法加密，采用的密码长度为128位。
在应用时，CPU卡的安全性是由其COS的安全体系来保证的，它涉及到卡中信息的访问控制机制和保密机制。智能卡之所以能够迅速地发展并且流行起来，其中的一个重要的原因就在于它能够通过COS的安全体系给用户一个较高的安全保证和应用方便性。COS安全体系在概念上包括三部分：安全状态、安全属性和安全机制[1]。智能卡在安全状态满足安全属性的要求，通过执行操作指令，在安全机制的作用下，从当前的安全状态转移到下一个安全状态。
系统结构和功能
CPU卡密钥管理系统的主要功能是提供各种密钥的生成机制和加密算法，并将生成的密钥存储在具有密钥导出功能的CPU智能卡，即SAM（Security Access Module）卡中。密钥的发行采用梯级生成、下发方式，即由上级生成下一级所需的各种子密钥，并以卡片的形式，采用线路加密的方式传递给下一级，极大地提高了系统的安全性和应用的方便性。根据功能，系统分为：根密钥系统、主密钥系统、初始化密钥系统和SAM卡密钥系统。系统结构具有一定的伸缩性，可以根据实际需要进行裁减，减少或增加分级层次，通常不超过三级传递关系（图中所示即为三级），以免系统过于复杂。在我们投入实际使用的系统中，根据用户要求和系统规模，取消了初始化密钥系统这一级而只采用了二级传递关键，使系统结构更加紧凑，实现起来更加简单容易。
根密钥系统的主要功能是生成系统最初的原始母密钥，即根密钥，它由系统安全管理员输入的系统安全字（由安全管理员自由决定）来生成；主密钥系统则用分散因子对根密钥进行分散加密，得到了主密钥；而初始化密钥系统则对主密钥再进行分散加密，得到工作密钥系统所使用的工作密钥；SAM卡密钥系统则直接由根密钥导出SAM卡密钥，将其直接用于工作密钥系统，以控制和配合工作密钥的使用。
系统将生成的各种密钥存储在相应的CPU智能卡中。根据钥卡和主密钥卡采用具有密钥导出功能的SAM母卡；而SAM卡密钥则采用不具有导出功能的SAM卡来储存。SAM瞳是种加强了密钥安全功能的CPU卡，它支持密钥多级分散功能，比普通CPU卡具有更高的安全性。工作密钥则直接存放于实际工作系统所使用的普通CPU卡中。
系统在生成相应的密钥时，同时生成相应的认证密钥，将其存储在相应的认证卡，以控制和配合密钥卡的使用。如图2所示，密钥卡必须通过其证卡的相互认证（外部认）证后才能正常使用；而密钥认证卡使用的合法性由个人身份识别号PIN保护，只有正确核心对PIN后才可以使用。
而空白卡片的合法性，则是由产生商认证卡来验证的。生产商认证卡通常是生产厂商制作的，其中存放着生产商传输代码，它也是由PIN保护的，正确核心对PIN后才可以使用。由此可以看出，系统中每一张卡的使用都必须过相应的认证，成功验证其合法性后，才能投入正常使用，极大地保证系统的安全性。
相关算法
在本系统，加密算法主要采用非常成熟的、强度比较高的DES算法。为了进一步提高系统安全强度，在实际系统中，采用的是以DES算法为基础的3DES算法。关算法简介如下。　3.1 3DES算法3DES算法用两个密钥（KL和KR）对明文（X）进行3次DES加密/解密[2]。
3DES的加密方式：Y=DES(KL,DES-1(KR,DES(KL,X)))
对应的解密方式为：X=DES-1(KL,DES(KR,DES-1(KL,Y)))
其中DES（K，X）表示用密钥K对数据X进行DES加密，DES-1（K，Y）表示用密钥K对数据Y进行解密（以下同）。　3.2 分散算法为了支持分级加密传递功能，CPU卡还采用了密钥分散算法，它是指将一个双长度（16字节）的密钥MK，对分散数据进行处理，推
导出一个双长度的密钥DK（DKLDKR）。其算法如下[3]：
推导DK左半部分DKL的方法是：
·将分散数据的最右16个数字作为输入数据；
·将MK作为加密密钥；
·用MK对输入数据进行3DEA运算。
推导DK右半部分DKR的方法：
·将分散数据的最右16个数字求反，作为输入数据；
·将MK作为加密密钥；
·用MK对输入数据进行3DEA运算。　3.3 原始密钥的生成算法第一步，输入种子A和种子B：由两个独立的人各输入一个16位数（或少于16位），分别作为SeedA和SeedB；
第二步，计算种子C：SeedC=SeedA◎SeedB；
第三步，密钥种子的初始化：
·KEYINIT=常量
·Seed=DES-1（DES（DES-1（KEYINIT，SeedC）,SeedB），SeedA）
·设K3=Seed
第四步，密钥种子的生成：
·K0=DES-1（DES（DES-1（K3,SeedC），SeedB），SeedA）K3
·K1=DES-1(DES(DES-1(K0,SeedC)，SeedB），SeedA)
·K2=DES-1(DES(DES-1(K1,SeedC)，SeedB），SeedA）
·K3=DES-1(DES(DES-1(K2,SeedC),SeedB),SeedA)
第五卡，密钥种子的检验：
·K4=K0+K2不是弱DES密钥；
·K5=K1+K3不是北DES密钥；
·K4不等于K5；
第六卡，主密钥生成：
·A=K0K1
·B=K2K3
·MK=A+B，MK即为生成的原始密钥
重复执行从第四步以第六步，直到所有的原始密钥全部生成。
本系统采用了成熟、安全性高的加密算法和完美的体系结构，其安全性是由CPU的安全性和DES算法的完全强度来保证的。经过国内某单位两年多的实际运行，证明本系统较好地贯彻了“秘密在于密钥”的思想，具有较高的完全性和先进性，主要表现为如下几个特点：
（1）采用完全性高的CPU卡作为密钥的产生、存储和传递介质，保证了密钥数据的安全性；CPU卡独特的安全体系保证了其中的数据不会被非法操作；
（2）利用硬件加密技术，对整个过程中所使用的临时变量进行加密处理，并对传递过程进行线路加密，保证了在生成和传递过程的安全性；
（3）分级传递结构，使系统具有一定的扩展性，既支持独立系统，也可用于分布式系统；
（4）系统具有自愈合功能，对关键数据进行备份，保证了系统具有一定的抗毁能力；
（5）系统结构简单、实现方便、性价比较高。