USBKey简单的理解就是数字证书的容器,如果用杯子和水的关系就是:USBKEY是杯子、数字证书是水,USBKEY大部分人都见过,以前银行发的比较多,虽然名字各不相同:工行的叫u盾,农行称:K宝,样子都大差不差,例如下图:
最近几年随着支付宝和微信的支付习惯,用户都不习惯带硬件产品(去介质化),银行端USBKEY使用人群越来越VIP化,因为VIP有大资金安全需求,个人端使用量逐年下滑;但在企业端USBKEY还有各种应用,不过中小企业使用UBSKEY面临如下的问题:
1 缺乏USBKEY和证书基本知识
2 预算不是很充足
3 项目周期较短
4 USBKEY使用量小
希望通过本文通俗的讲解,解答客户如下的疑问:
1) USBKEY适用在哪些业务?
2) 项目周期多长?
3) 费用高不高?
下面就开始我们的学习(唠嗑),所有的产品都是因为需求才诞生,那我们先了解哪些场景会用USBKEY:
1 登录
企业里面账户跟密码很容易就被别人记住,定期改密码又会增加记忆难度;用USBKEY增加双因子认证,USBKEY由使用人自行控制,安全性大大提高。但是,”常言”道:安全和便捷是孪生兄弟,相互依存又相互抵触,场景有了,让我们细化:
1)登录用应用端?还是服务器上?
应用端,用户打开应用,插上USBKEY登录,比较常见;
服务器登录普通用户接触比较少,一般都是服务器管理员使用,本地或远程插实现登录服务端,windows下用的是:智能卡登录,Linux、MAC用:PAM模块。
(智能卡登录)
2)安全要求高不高?
安全级别越高越复杂,请参考"常言",两种情况:
● 低安全登录需求(不涉及资金、合同)
可以使用USBKEY私有算法实现,开发简单方便;
也可以不用USBKEY,选择令牌、FIDO、甚至是“谷歌验证器”(毕竟币圈最爱)。
● 高安全登录需求(资金、合同)
涉及钱和法律的事,还是建议使用证书体系,毕竟这个是USBKEY最擅长的领域,也是最安全的体系(PKI公钥基础设施),有兴趣的同学自行研究。
3)国密还是非国密?
最早使用的算法都是外国发明的,密码关系国家信息安全;所以中国建立了自己的专用SM算法,简称国密算法,由国密局推动,USBKEY作为安全代表自然也有对应的应用标准。
2 数据签名
数据签名是USBKEY最核心的应用,这块的崛起源于2004国家建立的《电子签名法》,名字看起高大上,其实类似纸上签字画押,到了数字时代点击按钮确认有效,形式转换了性质没变,更简单有效。背后支撑的体系前面也提到了叫PKI,底层是一系列的密码原理和规范。
3 签章
有了高大上的数据签名,中国的思想里面都是“认章不认人”,把红章加在电子合同里面成了领导们理所当然的需求,厂商也顺势推出各种高难度盖章形式:骑缝章,由此衍生出产业链,涉及:印章生产、印章管理、合同存证、法律援助等。
4 文档加密
USBKEY核心是签名,附带应用是加解密;签名的数据本身是原文,比如签了一份电子合同,原文还是能被别人看到,有些敏感数据无法隐藏;敏感数据隐藏用加密,不过如果USBKEY丢了,解不开就抓瞎了;当然这么硬核的功能肯定有行业应用,应用最多的在招投标,招投标开标之前的金额等信息最为敏感,必须加密。
5 时间戳
专利权有先申请原则,同样的专利先申请先获得,由此看出版本时间的重要性,由此衍生出时间戳应用,时间戳其实就是在签名内加上一个可信的时间,至于怎么证明自己的时间是可信的,这个需要厂家各显神通了。
6 服务端应用
这个应用场景,一般是两台或者多台服务器之间有交互,无需人员干预,但是又要保证SSL或者数据的安全,例如:银企直连,企业端在银行前置机插上USBKEY,实现跟银行安全通讯的同时还能保证重要资金签名,成本低的同时又比较安全。
总结:通过上面的场景启发,希望同学们能够找到适合自己的应用,基于密码的应用当前最有钱景的当属区块链,不过区块链的应用真的是一言难尽。
有了应用场景,下面就是选择哪一款产品的问题,了解产品之前,先看一下USB厂家为什么搞出这么多的产品线。
协议本质就是双方约定的一种交互模式,USBKEY使用的时候,交互过程如下:
涉及2个协议:
1)USB传输协议:
常见的USB协议优缺点:
● hid :
即插即用的,兼容性好、低速
● pc/sc :
微软自定义,单独安装驱动,适配智能卡登陆
● ccid :
新版本协议高速,兼容性略差,适配智能卡登陆
● scsi:
光驱设备,自带安装程序
2)密码应用协议:
● CryptoAPI
微软自定义一套协议,因为windows占有率很高,所以USBKEY都支持这个协议
● PKCS#11
linux和mac上用的,主要是服务端的应用场景,例如服务端交互
● SKF
国家为了安全,启用SM系统算法,对应的制定了USBKEY使用国密规范
● 自定义
有些行业,可能有更高的安全性考虑,定制了一套自定义规范,例如人社、税务等;底层的实现基于以上3个协议。
因为存在这么多的新老协议,每种协议优缺点不同,场景应用也不相同,厂家不可能在同一USBKEY实现所有USB协议和应用接口,所以厂家针对性的分类了产品,飞天诚信典型产品如下:
序号 |
产品 |
USB协议 |
应用协议 |
优点 |
1. |
ePass1000ND |
HID |
私有协议、其他不推荐 |
开发简单、兼容性好、免驱 |
2. |
ePass2000AUTO |
SCSI |
CryptoAPI、PKCS#11 |
自带管理工具、免驱 |
3 |
ePass3000 |
PCSC |
CryptoAPI、PKCS#11 |
支持智能卡登录、高速 |
4 |
ePass3003 |
HID |
CryptoAPI、PKCS#11 |
用户空间大、免驱、高速 |
5 |
ePass3000GM |
SCSI |
CryptoAPI、SKF |
支持国密、高速 |
看到这里应该对USBKEY有了基本的认识,证书方面因本人对java比较熟悉,所以选择java实现证书的操作,java密码实现使用的是JCE框架,比较著名的开源包是BouncyCastle,补充很多JCE里面没有的加解密算法,这里就不在啰嗦了,下面将进入紧张刺激的实战环节。
开始之前让我们先准备一下环境:
1 准备USBKEY
● epass1000ND 用于测试私有协议:
https://detail.tmall.com/item.htm?id=43707701734
● epass3003 用于测试证书功能:
https://detail.tmall.com/item.htm?id=43722580737
2 准备java环境
3 测试内容:
1)私有用法
参考:https://blog.csdn.net/liujoi/article/details/106149928
2)生产证书
参考:https://blog.csdn.net/liujoi/article/details/106158471
3)导入证书\签名\验证
参考:https://blog.csdn.net/liujoi/article/details/106097071
4)时间戳
参考:https://blog.csdn.net/liujoi/article/details/106158501
5)PDF签名
参考:https://blog.csdn.net/liujoi/article/details/106158535
6)CRL
参考:https://blog.csdn.net/liujoi/article/details/106158571