数据加密机主要用于实现对主机应用层数据加/解密、消息来源正确性验证、密钥管理等。全国大多数商业银行,城市一卡通系统、公交卡系统、社保卡系统、加油卡系统,金融IC卡系统、电子联行系统、综合业务系统、信用卡系统、银证转帐系统、企业银行系统、网上证券交易系统都有应用.
在1996年以前,国产的数据加密机尚未产生,国内银行均采用国外的加密产品,主要是英国的RACAL(雷卡)和加拿大的ATALLA品牌。这两个公司有着较长的从事金融信息安全的研究和为金融业提供信息安全产品的历史,其产品可适应金融信息安全的各种要求,方便地和各种计算机硬件平台和软件平台接口,技术比较成熟。为彻底解决我国金融交易的安全问题,并同时做到和国外金融业务接轨。1996年国家信息安全主管部门指定两家最具实力的科研机构(总参56所和电子部30所)进行研究开发,这两家单位在同年先后推出了各自的金融数据加密机(总参56所的SJL06型,电子部30所的SJL05型),两种机型都属于信源加密设备,并均通过了国家密码管理委员会的鉴定.
目前在社保领域用到的国内加密机主要有成都卫士通信息安全技术有限公司的SJL05型, 广州江南科友科技股份有限公司的SJL06型,北京江南歌盟科技有限公司的SJL22型。
1. 成都卫士通
成都卫士通信息产业股份有限公司成立于1998年,由中国电子科技集团公司第30研究所发起成立。所以SJL05加密机也叫做30所加密机,主要应用在珠海社保,韶关社保,贵州省,内蒙古,天津市,重庆市等。SJL05加密机在社保发卡取密钥过程指令如下:
- 取出指定的次主密钥一SHSMK1和次主密钥二SHSMK2;
- 用SHSMK1对分散数据做指定次数的分散,得到子密钥SubKey;
- 用SHSMK2对SubKey做3DES加密,得到密文CsubKey;
- 用SubKey对8字节0做3DES加密,得到校验码CheckValue;
- 返回CsubKey和CheckValueE的前四个字节.
<span style="font-family:Microsoft YaHei;">LoadEncmc(suo30) ;;30所加密机 JMJ=LINK(172_16_0_239,6666) ;;连接加密机 注意IP的表示方式 PAD=0102030405060708 ;;导密钥指令中用户自填充数据 TKA=0003 ;;次主密钥索引二 ATR=0000000000000000 CPKEY=SENDCMD(JMJ,B060+PAD+0170+TKA+01+ ATR,36) 对于STK采用B0A0指令,如下: CKEY=SENDCMD(JMJ,B0A0+PAD+0173+TKA+02+DispKey+ATR,36) CKEY=COPY(CKEY,1,32) ECB_3DES_DE(CKEY,TKEY,DEKEY) STK=COPY(DEKEY,1,16)</span>
从加密中离散密钥后返回密钥值和校验值,通过校验值,我们可以检测密钥值是否离散正确。以30suo加密机为例,校验值计算如下:
<span style="font-family:Microsoft YaHei;">INDEX[004C]=94851AB5439C41A250D35A3B5787C3F4 VERIFY=AAD0DF47 TPKEY=11111111111111111111111111111111 ECB_3DES_DE(INDEX[004C],TPKEY,KEY)// KEY=9E8870C9ADF00B6E462483A4F187D292 ECB_3DES_EN(0000000000000000,KEY,VERIFY_)//VERIFY_=AAD0DF4744BB32A4</span>
所以在从加密机导出密钥后,首先需要验证密钥是否和TPKEY(传输密钥)匹配。
2. 科友SJL06
56所加密机密钥索引号为5位。对于16字节的密钥,其指令如下:
<span style="font-family:Microsoft YaHei;">ip=172_16_0_220 port=2000 LoadEncmc(56suo) JMJ=LINK(IP,PORT) PAD=0102030405060708 TKA=0000 kid=10410 CPKEY=SENDCMD(JMJ,5A0122101+kid+ATR+0000123456781234567805+84D4000124,36)</span>
对于STK取指令不同,如下:“
<span style="font-family:Microsoft YaHei;">kid=10502 CPKEY=SENDCMD(JMJ,5A0122100+kid+0000123456781234567805+84D4000124,36) CPKEY=COPY(CPKEY,1,32) ECB_3DES_DE(CPKEY,TPKEY,EPKEY) stk1=COPY(EPKEY,1,16) ECB_SDES_EN(ATR,stk1,EPKEY)</span>
3. 歌盟SJL22
北京江南歌盟科技的SJL22加密机主要应用在宁夏社保等。社保密钥索引号为6位,取密钥过程指令如下:
<span style="font-family:Microsoft YaHei;">kid=01013A 0084000008(RAM+9000) CPKEY=SENDCMD(JMJ,2UFF02+kid+0002+FSYZ+ATR+0918+000A010000000A77+000D+RAM+84D4000124,100) CPKEY1=COPY(CPKEY,13,64) ECB_3DES_DE(CPKEY1,TPKEY,EPKEY) key=COPY(EPKEY,19,32)</span>
文/闫鑫原创