智能卡操作系统的加密算法命令
发布时间:2013-03-20 来源:未知
对于很多应用来说加密算法命令是十分重要的。例如,它们使智能卡可比较容易用做加密和解密设备或用 于验证数字签名。许多智能卡操作系统有其自已执行加密算法的命令组。因为没有这类功能的标准,出现了 诸如ENCRYPT(加密),DECRYPT(解密),SIGN DATA(签署数据)和VERIFY SIGN ̄ATURE(验证签名)等 智能卡命令。然而,同时有两条专门处理加密算法的命令已规定在ISO/IEC 7816-8标准中。
在下述材料中,也会述及在ISO/IEC 7816-8标准中的其他加密命令,因为这是目前对于此类命令惟一有效 的资料,然而,在撰写此书时这些标准尚未完成;其状态为委员会草案CD(Committee Draft)。这意味着在还不错终版本出现之前,仍有某种可能做一些小修改,甚至会出现大的变动。
在ISO/IEC 7816-8标准中与加密有关的功能分解在两条命令之间,MANAGE SECURITYENVIROMENT(达成安全 环境)命令允许在实际执行加密算法之前先设定各种一般的条件,这条命令传送一“模板”给卡,此模板中 含有相关的参数。它们一直保持有效
对于很多应用来说加密算法命令是十分重要的。例如,它们使智能卡可比较容易用做加密和解密设备或用于验证数字签名。许多智能卡操作系统有其自已执行加密算法的命令组。因为没有这类功能的标准,出现了诸如ENCRYPT(加密),DECRYPT(解密),SIGNDATA(签署数据)和VERIFYSIGN ̄ATURE(验证签名)等智能卡命令。然而,同时有两条专门处理加密算法的命令已规定在ISO/IEC7816-8标准中。
在下述材料中,也会述及在ISO/IEC7816-8标准中的其他加密命令,因为这是目前对于此类命令惟一有效的资料,然而,在撰写此书时这些标准尚未完成;其状态为委员会草案CD(CommitteeDraft)。这意味着在还不错终版本出现之前,仍有某种可能做一些小修改,甚至会出现大的变动。
在ISO/IEC7816-8标准中与加密有关的功能分解在两条命令之间,MANAGESECURITYENVIROMENT(达成安全环境)命令允许在实际执行加密算法之前先设定各种一般的条件,这条命令传送一“模板”给卡,此模板中含有相关的参数。它们一直保持有效,直到被一条新的MANAGESECURITYENVIROMENT命令所取代。模板本身含有TLV编码的数据对象,它允许在参数传输中的高度可变性(而遗憾其复杂性)。图1ISO/ICE7816-8中有关加密功能的命令:MANAGESECURITYENVIRONMENT利日PERFORMECURITYOPERATION的基本原理
在加密功能的所有选项用MANAGESECURITYENVIRONMENT命令都设置要当后,可调用PERFORMSECURITYOPERATION(执行安全操作)命令,用此命令可实现大量的安全操作,只要它们都受到智能卡操作系统的支持。这一命令的可能选项的数量是如此巨大,因此并非所有受到的支持都是强制性的。虽然PERFORMSECURITYOPERATION只用一个指令字节编码,然而却由参数字节Pl来区分其8项基本不同的功能。这样做的理由是剩下可用以给命令编码的命令字节数在这时已经感到比较紧张了。
这两条命令的功能见表1~表9,图1则说明了它们运行的基本原理。表1遵照ISO/IEC7816-8的MANAGESECURITYENVIRONMENT的功能
由于PERFORMSECURITYOPERATION命令以很多不同的方式应用,我们在下面将按照不同的选项来分别叙述其功能,而不对它们做过细的描述。
PERFORMSECURITYOPERATION的COMPUTECRYPTOGRAPHICCHECKSUM(计算加密代码和)选项是用来求加密的校验和(CCS)的,它通常被称为MAC(报文鉴别码)。所用之填补以及密钥或由操作系统隐含给出或可经MANAGESECURITY-ENVIRONMENT命令提供。与此命令相对应的选项为VERIFYCRYP-TOGRAPHICCHECKSUM,它计算传输数据的加密代码和并和也在命令中传送的基准值相比较。这项操作的结果是符合/不符合,并回给终端。表2遵照ISO/IEC78168的PERFORMSECURITYOPERATION的选项COMPUTECRYPTOGRAPHlCCHECKSUM的功能表3遵照ISO/IEC7816-8的PERFORMSECURITYOPERATION的选项VERIFYCRYPTOGRAPHICCHECKSUM的功能
两个选项ENCIPHER和DECIPHER对数据提供了纯粹的加密和解密,ENCIHER选项用来对命令中传送的数据加密。根据操作系统提供的选项,可先行传送MANAGESECURITYENVIRONMENT命令,以选择所用加密算法。类似地,也必须用传送的参数在发布命令之前先行设置要当加密算法的模式。对于字组加密算法,尚可在ECB与CBC模式间选择。由于传送给卡的数组的长度没有必要精确地为加密算法字组大小的整倍数,故必须由一个补充参数规定填补方法,同样重要的是智能卡中算法用于加密数据的密钥的存储地址。表4遵照ISO/IEC7816-8的PERFORMSECURITYOPERATION的选项ENCIPHER的功能 表5遵照ISO/IEC7816-8的PERFORMSEOURITYOPERATION的选项DECIPHER的功能
ENCIPHER的逆操作是DECIPHER,用此功能可使传送的数据以和ENCIPHER中所用的相同模式被解密。当然智能卡必须知道相应的密钥,算法模式和填补模式,这些信息必须用一条MANAGESECURITYENVIRONMENT命令传送给卡的操作系统。
由于把公开密钥算法引人到智能卡的应用中,这就需要有适当的命令来使用这一新的有效功能。智能卡特别适合于签名的应用,因为签名的算法的秘密密钥可以安全地存在存储器中,而它不能被读到。ISO/IEC7816-8标准说明了命令的四种选项可用于数字签名。
PERFORMSECURITYOPERATION命令的HASH(散列)选项可用于计算散列值,命令或是传送要散列的数据,或是传送在智能卡之外已算出的散列值以及需用于还不错后一步计算的数据。在后一种情况,对还不错后字组的散列计算是在卡中执行的,这种方法的好处是散列值可以在卡外能显然较快形成,但还不错后一步仍在卡内进行。从纯粹加密的观点看来,这仅仅提供了少量额外的安全性,但可稍微限制操纵散列值的可能性,被广泛用在实际中。
由于散列的数据量通常大于一条命令中所允许的数据字段的还不错大长度,比⒋SH选项中使用了“7级”(Level-7)链接,意即数组可在应用级上逻辑地链接在一起。还不错终的散列数组中含有一个标记以通知命令散列操作至此字组结束。
这一命令选项还有着它自己的选项,计算出的散列值可以或是在对命令的响应中立即传送给终端,或是存储在卡中供后继的命令使用。像在前面的命令中所述的那样,所用的填补和密钥需用一条在先的MANAGESECURITYENVIRONMENT命令予以规定。表6遵照ISO/IEC7816-8的PERFORMSECURTYOPERATION的HASH选项的功能
COMPUTEDIGITALSIGNATURE选项可用来签署数据,要签署的数据串通常都已经被压缩成散列值,必须传送给智能卡。除非前一条是PERFORMSECURITYOPERATION命令的HASH选项,其结果已经存在于卡中。COMPUTEDIGITALSIGNATURE选项也允许把要签署的数据直接传送给卡。在签名产生之前先把它们散列。对大量的数据,可随HASH选项采取“7级”散列。表7遵照ISO/IEC7816-8的PERFORMSECURITYOPERATION的COMPUTEDIGITALSIGNATURE选项的功能
若散列值之长度并不对应于公开密钥算法的输人数据长度,则必须予以填补。对此选项亦由MANAGESECURITYENVIRONMENT命令中的参数规定,它也用来确定所用之密钥。
验证COMPUTEDIGITALSIGNATURE选项的功能由VERIFYDIGITALSICNATURE选项提供。原理上,任何一台足够快的数字计算机都可用来验证签名,因为所需密钥是公开的。然而,在许多情况下公开密钥的有效性必须首先用一个另外的数字签名予以验证。这确实和安全性有关,而且不应在不安全的计算机上进行。对数字签名的验证,其相关的公开密钥必须或是已为智能卡隐含地知道,或是经命令选项VERIFYCERTIFICATE(验证凭证)明显地使卡获得。要验证的数据可以直接传送给VERIFYDIGITALSIGNATURE或以相关的散列值的形式传给,所有其他参数则和COMPUTEDIGITALSICNATURE选项是一样的。
在开放系统中,验证数字签名的公开密钥通常用凭证当局的秘密密钥予以签署。公开密钥的可靠性在使用前必须被验证,因为这是惟一的方法以确信密钥不是伪造的。这项验证必须在安全的环境中进行,例如在智能卡中,否则有可能遭受到控制。ⅦⅢⅣCERTIπCATE(验证凭证)命令选项专门提供对签署了的公开密钥的验证。一旦公开密钥被验证为真实可信的,就可以或是把它永久存在智能卡中,或是紧接着用一条VERIFYDIGITALSIGNATURE命令来使用它。
如果智能卡的操作系统支持产生非对称加密算法密钥对的产生,则此过程可用ISO/IEC7816-8的命令GENERATEPUBLICKEYPAIR(产生公开密钥对)来启动,其具体功能见表10。密钥产生需用之所有参数,必须先用MANAGESECURITYENVIRONMEN命令设置妥当。
图2表明了以上所述的命令如何可以用来产生一个数字签名和验证。