为什么要进行数据加密? 很简单:为了数据安全!
基本概念 明文:没有经过加密的消息。 密文:使用某种方法被加密的消息。 加密:用某种方法伪装消息以隐藏它的内容的过程。 解密:把密文转变为明文的过程。
现代密码学 密码学 ----研究密码技术的学科,是数学的一个分支,包括密码编码学和密码分析学。 密码编码学----信息隐蔽使消息保密的技术和科学。 密码分析学----破译密码破译密文的科学和技术。 密码学的主要目的 提供机密性—保密 鉴别:消息的接收者应该能够确认消息的来源; 完整性:消息的接受者能够验证在传送过程中消息没有被修改; 抗抵赖 :消息的发送者在消息发送后无法否认其发送过消息。
请注意密码学的目的,这也就是我们使用加密的原因,同时课程的核心也是围绕如何实现这个过程展开的。 密码学的主要目的 机密性:数据保密 鉴别:消息的接收者应该能够确认消息的来源; 完整性:消息的接受者能够验证在传送过程中消息没有被修改; 抗抵赖 :消息的发送者在消息发送后无法否认其发送国消息。
传统的密码学 传统的密码学,使用密码算法,一般是一些数学函数。(一般使用两个函数,一个加密函数一个解密函数),电影风语者中的密码员使用的就是典型的传统密码方法。 传统密码学的缺陷: 1、受限制,只能在一个组织内使用。大家必须知道相应的加解密算法。 2、对人要求过高,一旦一个用户离开组织就会使保密荡然无存。(这就是为什么风语者中:为什么要保护密码员,为什么当密码员被抓的时候,宁可杀死他也不能落到敌人手里的原因。) 3、受限制的密码算法不可能进行质量控制或者标准化。
现代密码系统模型及其特点 现代密码学:使用密钥(KEY)来进行数据加密,加密和解密都使用同一个密钥,运算 都依赖于密钥。算法可以公开,算法的安全性是基于密钥的安全性。 现代密码学:由算法、明文、密文和密钥组成。 特点 加密算法足够强大:仅知密文很难破译出明文。 基于密钥的安全性,而不是基于算法的安全性:知道密文和加/解密算法,很难破译出明文。 算法开放性:开放算法,便于实现和标准化。
密码体制 对称密码体制 加密密钥与解密密钥相同,所以又叫单钥密码。 著名密码算法:DES 非对称密码体制 加密密钥与解密密钥不同 ,而且解密密钥不能根据加密密钥计算出来,所以又叫双钥密码。 著名密码算法:RSA
对称密码 对称密码 :加密密钥与解密密钥相同。 优点是: 安全性高 加解密速度快 缺点是: 随着网络规模的扩大,密钥管理成为一个难点; 无法解决消息确认问题;(不过可以采用一些业务方法弥补,如:商户号终端号等方式但对内部人员无效) 缺乏自动检测密钥泄露的能力。 举例:21.80.66.254 /usr/btssrc/twb/encrypt
非对称密码 非对称密码 :加密密钥与解密密钥不同 ,而且解密密钥不能根据加密密钥计算出来。 优点是:不需要安全信道来传送密钥 。 缺点是:算法复杂,加解密速度慢,一般比单钥密码慢1000倍。
攻击分类 主动攻击 中断 修改 伪造 破坏可用性 破坏完整性 破坏真实性 被动攻击 窃听 获取消息内容 流量分析
算法的安全性 根据被破译的难易程度,不同的密码算法具有不同的安全等级。从理论上来说,所有的密码算法总是可以被破译的,那么,算法的安全性怎么判断呢? 一般来说: 如果破译算法的代价大于加密数据的价值,那么你可能是安全的。 如果破译算法所需的时间比加密数据保密的时间更长,那么你可能是安全的。 如果用单密钥加密的数据量比破译需要的数据量少得多,那么你可能是安全的。 如果一个算法用(现在或将来)可得到的资源都不能破译,这个算法可被认为在计算上是安全的。
加密方式:硬件加密 硬件加解密是商业或军事上的主流 (1)速度问题:不占用主机处理器资源。 (2)安全性:可进行物理保护。 (3)易于安装:不需使用计算机的电话、传真、数据线路; 计算机环境下,使用硬件加密可对用户透明,软件实现,需要在操作系统深层安装,不容易实现。
加密方式:软件加密 缺点:安全性差、速度慢、造价高。 优点:使用灵活、修改方便、可移植性好。 采用软件加密时,密钥管理的手段必须可靠,通常对管理人员的要求较高。(特别对软件开发人员)
银行卡网络系统的安全需求 保证用户密码(PIN)的安全。国际信用卡组织在信用卡业务安全规范中有相当明确的要求:“PIN不允许以明码的形式出现在网络系统中的任何地方!”。所以,PIN在生成、存储、传输过程中必须全程保密。 保证交易信息在传输、交换过程中的完整性。 安全的密钥管理。这是保证上述两点的必要条件。
银行网络解决之道 建立基于硬件加密设备的安全体系,是解决银行卡网络系统安全的有效办法。 现在的银行卡网络安全系统采用的是基于DES/3DES算法的对称密码体制。
DES算法 DES算法来自IBM。 DES被NBS(美国国家标准局)采用。 DES被NSA(美国国家安全局)密密修改过,安全性有很大幅度降低。(原DES密钥采用112位,NSA将其修改为56位)。 经过修改的DES算法成为美国联邦标准。 IBM持有专利,但同意其他公司在制造、实现和使用中使用他们的知识产权。 由于DES被NSA修改过,是否存在后门,一直是一个难解的密团。 DES设计之初定义为硬件实现从而实现国家垄断,但由于DES算法的细节被NBS对外公布,最终被程序员利用软件实现了DES算法,NSA认为DES算法的出现是他们20世纪最大的错误。(或许说标准对外的公布)
DES算法描述 DES算法是一个分组加密算法,它以64位为分组对数据加密。64位一组的明文从算法的一端输入,64位的密文从另一端输出。DES算法是一个对称算法:加密和解密用的是同一算法。 DES算法的密钥通常为64位,通常用16个16进制的数表示,但每个16进制数的第8位都用作奇偶校验,所以密钥的实际长度是56位,如:6D969D8710FAAE83 DES将密钥作用于明文,经过16轮计算得到密文 DES算法流程图 DES的解密算法和加密算法相同,二者不同的是48位子密钥输入的顺序不同,加密是k1……k16的顺序,解密是K16….K1的顺序。
三级密钥体制 银行卡网络安全系统采用了三级密钥管理体制,从上而下依次是主密钥、密钥交换密钥、数据密钥。上级密钥用于加密下级密钥,具体来说: 主密钥用于加密密钥交换密钥和数据密钥作本地存储; 密钥交换密钥用于加密数据密钥作网络传输; 数据密钥用于对数据进行加解密。
三级密钥体制示意图
三级密钥体制
三级密钥体制说明 第一层,LMK为本地主密钥, 共有50对不同的LMK,它是采用双倍标准的DES密钥(长达112位),它是存放在HSM机内的,它的作用是对所有在本地存放的其它密钥和加密数据进行加密,不同对的LMK用于加密不同的数据或密钥。由于本地存放的其它密钥和加密数据,都是在LMK加密之下。因此,LMK是最重要的密钥。 第二层,通常称为密钥加密密钥或传输密钥(Key-encrypting key),包括TMK、ZMK等密钥。它的作用是加密在通讯线上需要传递的数据密钥。从而实现数据密钥的自动分配。在本地或共享网络中。不同的两个通讯网点使用不同的密钥加密密钥(KEK),从而实现密钥的分工管理,它在本地存放时,处于本地LMK的加密之下。 第三层,通常称为数据加密密钥或工作密钥。包括TPK、TAK、 ZPK、ZAK、PVK、 CVK等密钥,它的作用是加密各种不同的数据。从而实现数据的保密,信息的认证,以及数字签名的功能,这些数据密钥在本地存放时,处于本地LMK的加密之下。
LMK本地主密钥 本地主密钥是存入在HSM机内的50对LMK的集合。在HSM机器以外的地方不会以明文形式存放,它采用双倍标准DES密钥(长达112位)实现三重数据加密。所有的密钥和加密数据存放在本地时都必须经过LMK进行加密。 HSM投入运行时,必须先产生和装载LMK。 LMK的产生需要银行三位主要的管理人员参与产生,每人输入三组数据(二组十六位的十六进制数,一组八位的十进制数)。。HSM利用这三组数据通过一定的运算产生50对LMK存放在HSM机内的EPROM里供HSM使用。HSM在运行的过程中一旦被打开,这时机内所有LMK就会自动销毁,HSM允许LMKS可改变,但改变后所有通过LMKS进行加密的密钥和数据,需要解密后使用新的LMKS进行加密。更换LMK是一件风险极高的工作,一旦出错,会造成整个银行加密体系的失效。
LMK本地主密钥 产生过程
ZONE MASTER KEY (ZMK) 区域主密钥 Zone Master Key (ZMK)是处于三级密钥体系的第二级是加密密钥用的密钥,适用于广域网网络中,同一个广域网网络中任何两个通讯网点之间均共用不同的ZMK。ZMK用于加密底层需要传送的数据密钥(ZPK),这样远地密钥就能自动进行交换(无须人工干预)。该密钥可以长期不更改,通常二年更新一次 。本地存储时,ZMK是通过LMK04-05进行加密的。
区域主密钥(ZMK)的产生 在产生ZMK的时候存在交换中心和成员行的概念,如果在中行网络里,总行就是交换中心,我行就是其中的成员行,在银联网络里银联就是交换中心,中行就是其成员行了。 ZMK的产生,是由交换中心提供两组或者三组16位16进制的明文给各成员行,各成员行收到后,由成员行两名或三名业务主管分别持有,输入本行的加密机,加密机产生被LMK加密后的ZMK密文和CHECK VALUES,将密文抄下,保存到主机数据库里。CHECK VALUES用于与交换中心进行核对明文输入是否输入正确。
什么是CHECK VALUES? 由于LMK和ZMK以及TMK的产生都是由两组或者三组由不同人持有的明文输入加密机后产生的,但如果在输入过程中一旦输入错误会造成整个密钥体系无法正常工作,如何避免这种问题呢? CHECK VALUES就是起到校验输入的明文是否正确的作用,它通过一个加密机通用的算法对明文进行计算得出的一个值,交换中心提供明文时一般会提供相应的CHECK VALUES,或者让成员行将自己加密机产生的CHECK VALUES发给交换中心,由它确定明文是否正确。 需要了解的是:只要明文是一致的CHECK VALUES一定是一样的。CHECK VALUES一致表示输入的明文是正确的,由此产生的相应密文才是正确的。
ZONE PIN KEY(ZPK) 区域工作密钥 区域PIN密钥是一个数据加密密钥,适用于共享网络,它通过ZMK加密在两个(或多个)通讯网点之间进行自动分配(交换密钥),ZPK用于加密两个通讯网点之间需传输的PIN,这样就实现了PIN的保密。ZPK需要经常性地定期更改,在本地存储时(本地指交换中心),它是通过LMK06-07进行加密的。
TERMINAL MASTER KEY (TMK) 终端主密钥 终端主密钥是一个加密密钥用的密钥,(处于三级密钥体系的哪一层?)使用于局域网络中。可以人工地或自动地在以前安装过TMK的基础上分配给通讯的双方且保持双方之间的对称性,它用于在局域网内对新产生的底层的数据加密用的密钥加密(TPK),然后由主机端传输到ATM或POS或其它相似的终端。TMK可以长期不作改动,通常一到二年更换一次,本地存储时通过一对LMK14-15进行加密。 注意TMK和ZMK的区别。
TERMINAL PIN KEY (TPK) 终端PIN密钥 (终端工作密钥) 终端PIN密钥是一个数据加密用的密钥,(处于三层密钥体系的第三层)适用于局域网络中,它是在局域网内通过TMK加密,由终端数据受理者自动分配到终端且保持通讯双方之间的对称性。TPK用于加密在局域网内终端和终端数据受理者之间传送的PIN。本地存储时通过一对LMK14-15进行加密的。TPK需要经常性地定期更换,通常每天更换一次。
TERMINAL AUTHENTICATION KEY (TAK) 终端认证密钥 (MAC KEY) 终端认证密钥是一个数据加密用的密钥,适用于局域网内。它在局域网内通过TMK加密由终端数据受理者自动分配到终端,TAK用于局域网内终端与终端数据受理者之间传送信息时,生成和校验一个信息认证代码(Message Authentication Code),从而达到信息认证的目的。TAK需要经常性地更换,通常每天更换一次,本地存储时通过一对LMK16-17进行加密。 (MAC算法在后面介绍)
PIN VERIFICATIONE KEY (PVK) PIN 校验密钥 PIN 校验密钥是一个数据加密密钥,用于生成和校验PIN校验数据,同时校验一个PIN的可靠性。传送时PVK通过TMK或ZMK加密;存放本地时,它通过一对LMK加密。
CARD VERIFICATION KEY (卡校验密钥) 卡校验密钥(CVK)类似于PIN校验密钥,仅仅是用卡的信息取代了PIN。其主要作用就是校验卡的磁道信息的即通常所说的CVV校验。
实现PIN的安全 发卡过程中PIN的产生 PIN的修改过程 交易过程中PIN的保护
发卡时客户密码生成过程示意图 (FOR AS400)
PIN的生成过程(AS400) 主机向密码机发送产生并打印用户PIN的指令; 密码机接到指令后,在内部用随机数自动产生一个PIN值; 密码机在内部用PVK密钥加密PIN,把PIN的密文输出送给主机,主机将PIN的密文存入用户数据库中;同时密码机将PIN的明码直接输出到专用打印机上,打印在密码信封之内 用户拆开密码信封,得到卡密码。 需要注意的是密码的生成和校验的过程有许多不同的方法,我行AS400的加密方法和SBS的加解密的方法就不相同。
AS400 PIN的生成过程 AS400加密方式使用的是IBM3624方法 该方法产生PIN的基本要素为一个A/C (16位的十进制的客户帐号或卡号,如A/C不足十六位,则可由银行自行决定如何填充,使其达到十六位)和一个PVK (产生PIN的密钥), 一个A/C和一个PVK通过DES算法, 即得出一个16位的十六进制数, 根据不同银行的要求来规定PIN的长度, 例如6位PIN则取前六位数。用DECIMALISATION十进制表将该6位十六进制数转为6位十进制数, 即得到一个六位十进制的原始密码PIN(即发卡时卡的原始密码)。但原始PIN是不存放在主机的数据库中的, 在数据库中只存放A/C、PVK和偏移量。 需要注意的是: 1、我行传送的16位A/C是使用信用卡卡号的倒数第二位开始向前数12位帐号后补4个0来实现的。 2、只要帐号不变生成的原始密码是不变的。
我行A/C帐号的组成 5183766500009205 使用信用卡卡号的倒数第二位开始向前数12位帐号:376650000920
偏移量的作用 由于采用IBM3624的加密方法计算出来的原始密钥是不变的,但客户需要改密的时候该如何实现呢?偏移量( OFFSET)为此引入这种加密方法,OFFSET 为一个六位(或者7位)十进制的中间数, 它的作用为客户更改密码时, 通过OFFSET 的变化来保证NATURAL PIN不变, 工作原理是PIN+OFFSET得出客户现在的PIN, 在这个加法中每一位是对应相加的, 但不进位。OFFSET存放在主机的数据库中。其实客户改密只是改变的存放在数据库中的偏移量。 个人密码产生的图示 改密的过程
SBS个人PIN的产生过程 SBS借记卡的加密过程非常简单,它直接调用加密机的BA指令,将一个客户输入的6位的明文密码和借记卡帐号(12位的)使用加密机LMK02-LMK03进行加密产生密文,将密文存放在数据库内。 调用的函数说明
SBS借记卡PIN的修改过程 将借记卡插入本行的ATM,并输入旧密码PIN-OLD和新密码PIN-NEW。 ATM终端用PIN密钥TPK加密PIN-OLD和PIN-NEW,并将加密后的PIN组成消息,发往SBS主机; SBS得到交易消息,命令加密机在内部,用与ATM约定的PIN密钥TPK解密PIN-OLD,再将主机从用户数据库中提取的该客户PIN-OLD的密文用PVK密钥解密;之后,比较这两个PIN,如果相同,则用PVK加密PIN-NEW,将PIN-NEW的密文返回给主机,同时返回正确应答,客户修改密码成功;否则,密码修改错误应答,客户修改密码失败。
PINBLOCK的计算 PINBLOCK就是个人PIN在网络传输过程中加密后一种结构。 PINBLOCK的产生有许多的算法 (1)国际格式ISO DP/9564/1—FORMAT 0或ANSI X98 (2) DOCUTEL格式 (3) IBM格式 (4) NCR格式 我行采用的是ANSIX98标准。
PINBLOCK ANSI98算法 首先把PIN(P1。。。Pn),其长度(n 一般是4-6之间)+PIN+及填补值(F)合成一组16位的字串,再以帐号(除校验位)最后12位数字(A1。。。A12)和以“0”填补右边的一组数字异或(EOR),便得到一串16位的十六进制的数据。使用TPK进行DES运算得到PINBLOCK
PINBLOCK产生示意图
PINBLOCK与验密(以SBS后台为例) int verify_pin_tpk_lmk(char *tpk_lmk, char *pin_block, char *pin_fmt, char *pan, char *epin); 输入: tpk_lmk 为本地主密钥LMK14-15加密下的终端PIN密钥TPK pin_block TPK加密下的PIN BLOCK pin_fmt PIN BLOCK格式 pan 主帐号(HSM使用主帐号的最右12字节不包含校验字节) epin 为本地主密钥LMK02-03加密下的PIN 密文 输出: 返回值: 0 函数正常返回 -1 函数返回错误 调用加密机指令: BC/BD
交易过程中PIN保护示意图
假设成员行N(发卡行)的客户,将信用卡插入成员行A(受理行)的ATM,并输入个人密码PIN。 ATM终端用PIN密钥TPK加密PIN,并用加密后的PIN组成消息,发往受理行的主机; 受理行主机识别出不是本行的卡后,命令加密机在内部用与ATM约定的密钥TPK解密PIN,再用交换中心下发的PIN密钥ZPK1重新加密PIN,送出交给主机。主机组成新的消息发往交换中心 交换中心识别出是N行的卡,先命令加密机在内部用与A行(受理行)约定的PIN密钥ZPK1解密PIN,再用与N行(发卡行)约定的PIN密钥ZPK2重新加密PIN,送出交给主机。主机组成新的消息发往N行; N行得到交易消息,命令加密机在内部,用与交换中心约定的PIN密钥ZPK2解密PIN,再将主机从用户数据库中提取的该客户PIN的密文用PVK密钥解密;之后,比较两个PIN,相同则返回正确应答,允许A行受理此次交易,否则,返回拒绝受理的应答,通常客户PIN的校验方式与PIN的存储方式有关。
消息完整性鉴别 (MAC的运用) 为了防止数据在网络传输中被篡改,保证数据的完整性,使得有意或无意地篡改信息后可以被发现,这些都必须通过信息的认证来实现。信息认证的过程就是MAC产生和校验的过程,信息认证处理支持ANSIX9.9或ISO8730或ISO8731标准,采用DES算法生成32 bits MAC(有时要求64 bits现在一般都采用64bits) ,MAC不需要隐含,直接附加在一个信息报文的后面,随报文一起传送,下面将具体描述产生和校验MAC的方法。
MAC的产生 产生MAC 的算法,首先将需要传输的消息按8字节进行分组,在结尾不足8字节的做补0处理,然后进行分组加密,加密结果与下一分组异或,作为下次加密的输入。 当主机收到完整数据后,将除去MAC的数据进行与1相同的运算得出MAC与送上来的MAC进行比较,如果相等则数据没有被修改。 如果消息在传送过程中被改动,不论是删除、插入、替换、换序,都会导致消息鉴别码MAC的改变。
MAC产生的示意图
MAC的计算过程
MAC鉴别过程
假设成员行N(发卡行)的客户,将信用卡插入成员行A(受理行)的ATM,并输入个人密码PIN。 ATM终端组织交易消息,并用TAK对消息进行MAC运算,得到MAC1,然后将消息和MAC1一起发往受理行的主机; 受理行主机收到交易消息后,命令密码机用TAK计算消息的MAC值,并与收到的MAC1进行比较,如果比较结果不同,则中止交易。否则,受理行主机识别出不是本行的卡后,命令加密机用交换中心下发的ZAK1重新计算消息的MAC值,得到MAC2,送出交给主机。主机将交易消息和MAC2发往交换中心; 同样,交换中心调用密码机,先用ZAK1验证MAC2的正确性,验证通过后,再用与N行(发卡行)约定的ZAK2重新计算消息的MAC值,得到MAC3,送出交给主机。主机将交易消息和MAC3发往N行; N行得到交易消息,调用密码机,先用ZAK2验证MAC3的正确性,验证通过后才允许交易继续,否则,中止交易。
我行现有的银行卡网络结构
我行各种KEY的产生过程 获得工作密钥的过程
数据加解密的过程 我行银行卡网络加密传输的过程
密钥的安全管理 密钥的产生 密钥分发 密钥的验证 密钥的存储 密钥的使用范围 密钥有效期 密钥销毁
密钥的产生 好的、强的密钥必须具有随机性,这是它们最重要的特性之一。基本上所有的现代密码的安全性都依赖于密钥产生的不可预测性,实际密码应用中的密钥必须是不可预测的,并且具有足够的长度。为了得到随机的数据,必须要由随机源来产生随机的比特流。例如可以用噪声发生器来产生随机数,密码机一般都是采用这种方法生成随机数。
密钥分发 在实际应用中,有些密钥必须进行手工分发,如密钥加密密钥。 如何保证这些密钥在分发过程中的安全呢?
利用安全信道分发密钥: (1)直接面议或通过可靠信使递送 (2)将密钥分拆成几部分分别传送
密钥的验证 检查值法 发送方和接收方用密钥加密某个数,得到密钥的检查值,通过比较检查值来验证密钥。 奇偶校验法 生成密钥时使密钥符合奇校验,使用密钥时,检查密钥的每个字节是否符合奇校验。
密钥的存储 最安全的方法是将密钥存放在物理上安全的地方,例如密码机内。 根密钥:放到密码机机内。如果要放到密码机外,可分解成N个部分,分别交给不同的人进行保管。 对于其它密钥,如果不能放在密码机内,可以用根密钥加密之后,放到密码机外。
密钥的使用范围 限制密钥的使用范围,可以减小破译密钥的价值,也可以减少密钥泄露带来的损失。 限定密钥的使用区域 。 限定密钥的功能 。 限定密钥的使用期限。
密钥有效期 所有密钥都应该有一个使用期限,不应该无限期使用。长期使用同一个密钥是不安全的。 可在线加密更换的密钥,一般满足下列条件之一,就应进行更换: 节点登录和签到时,应更换新的密钥。 使用一定时间后,如一天。 使用一定次数后,如加密1000笔交易后
密钥销毁 如果密钥必须定期替换,旧密钥就必须销毁。旧密钥是有价值的,即使不再使用,有了它,攻击者就能读到由它加密的一些旧消息。所以,密钥必须安全地销毁。
特别提示 在开发阶段,密码机一般都使用一组明的测试密钥,以方便查错和调试,在投产时,应更换所有密钥。如果使用测试密钥投产,会留下安全隐患。 密钥应由用户自己控制。密钥的更换应由用户自己来完成,不得由软件开发商代理。
谢谢大家!