一、银行交易中涉及的Https与Ukey
为什么银行要用ukey的方式做交易?https请求交易不是也能保证安全性吗?
这是一个非常好的问题,它触及了现代电子银行安全的核心。HTTPS(基于SSL/TLS)确实能提供很强的安全性,但它和银行U盾(Ukey)解决的是不同层面、不同维度的安全问题。
简单来说,HTTPS保证了交易通道的安全,而Ukey保证了交易指令本身的安全和不可否认性。 它们是互补的关系,而不是替代关系。
下面详细解释一下为什么银行(尤其在中国)如此依赖Ukey这种方式:
1. 核心安全目标的不同
HTTPS (SSL/TLS) 的核心目标:通道安全 (Channel Security)
加密传输:确保数据从你的浏览器到银行服务器的整个传输过程中是加密的,防止中间人窃听(比如在公共Wi-Fi上)。
身份认证:验证你连接的服务器确实是真正的银行服务器,而不是一个钓鱼网站。
数据完整性:保证传输的数据在过程中没有被篡改。
但它不解决的是:你的电脑本身是否安全?你的登录密码是否被键盘记录器窃取了?你的交易指令是否被木马病毒篡改了?(例如,你想转账100元给A,病毒可能把它改成转账10000元给B)。
Ukey (数字证书) 的核心目标:交易安全与不可否认性 (Transaction Security & Non-Repudiation)
强身份认证:Ukey的核心是一个数字证书,它就像你的网络身份证。仅仅有密码(你知道的东西)是不够的,还必须持有这个物理硬件(你拥有的东西),这就是双因子认证(2FA),安全性远高于单纯的密码。
交易签名:这是最关键的功能。当你确认一笔交易时,交易细节(金额、收款方等)会发送到Ukey内部,Ukey用其内部的私钥对这笔特定的交易信息进行数字签名。这个签名具有唯一性:
防篡改:任何对交易信息的微小改动都会导致签名验证失败,银行会拒绝交易。这完美防御了木马篡改攻击。
不可否认:因为签名是由只有你的Ukey才拥有的私钥生成的,事后你无法抵赖说“这不是我发的交易”。这在法律上至关重要。
私钥永不离开:Ukey的私钥是在硬件内部生成和存储的,永远无法被读取或复制到电脑上。即使你的电脑中了病毒,私钥也是安全的。
2. 为什么HTTPS不够?一个简单的比喻
可以把网上银行交易想象成一次重要的邮寄过程:
HTTPS:相当于雇佣了装甲运钞车来运送你的信件。它保证了信件在路途上不会被偷看、被调包或被篡改。非常安全!
Ukey:相当于你在这封信上盖了一个独一无二的、无法伪造的钢印。即使坏人拦截了装甲车(虽然很难),他们也无法伪造你的钢印;即使他们篡改了信的内容,钢印就会对不上,收信人一眼就能看出问题。
银行需要同时做到这两点:既用装甲车运信(HTTPS),也要信上有无法伪造的钢印(Ukey数字签名)。
3. 针对特定威胁的防护
银行的威胁模型非常复杂,面临着专门针对网银的木马和网络犯罪:
钓鱼网站:HTTPS可以帮你验证银行真身,但如果你被欺骗自己输入了密码,HTTPS无能为力。而Ukey即使在这种情况下,对方没有你的物理Ukey也无法完成交易。
中间人攻击 (MitM):虽然HTTPS设计上防止此问题,但复杂的攻击(如某些恶意软件伪造证书)可能得逞。Ukey的交易签名是针对具体内容的,即使攻击者劫持了会话,也无法伪造签名。
木马病毒:这是最大的威胁。键盘记录器可以盗取密码,木马可以篡改网页上显示的内容(让你看到的是转账100元,实际提交的是10000元)。Ukey的签名机制直接粉碎了这种攻击,因为被篡改的交易数据无法通过签名验证。
4. 监管与合规要求
在中国,金融行业的监管机构(如中国人民银行、银保监会)对电子支付的安全性有极其严格的要求。许多规定明确要求对大额交易、企业银行账户等业务必须使用基于硬证书(即Ukey)的双因子认证方式,以确保交易的安全性和法律效力。HTTPS+密码的软认证方式无法达到这个安全等级。
总结对比
结论:
银行使用Ukey不是为了替代HTTPS,而是在HTTPS提供的安全通道之上,再增加一层极其坚固的、针对交易内容和用户身份的安全保护。尤其是对于高价值、高风险的交易(如企业转账、大额个人转账),这种“双保险”是绝对必要的。它虽然带来了一点不便,但为了资金安全,这种代价是被广泛接受的。
随着技术发展,现在很多银行也提供了手机APP认证、动态软令牌等方式作为Ukey的替代或补充,它们同样基于双因子认证的原理,但在便捷性和安全性上各有取舍(手机APP的安全性依赖于手机本身的安全环境)。但对于最高安全级别的需求,物理硬件的Ukey仍然是“黄金标准”。
二、Ukey的工作原理
Ukey(硬件数字证书载体)与CFCA(中国金融认证中心)在银行交易数据签名过程中是如何协同工作的?
整个流程的核心是基于非对称加密原理的数字签名技术,其目标是实现身份认证、数据防篡改和不可否认性。
为了更直观地理解这个复杂的过程,可以通过以下流程图来概览全局,它展示了从证书颁发到交易验证的完整生命周期:
图表
代码
上图展示了CFCA作为“信任锚”的核心价值。现在,我们重点分解交易签名与验证阶段(B、C阶段)的详细步骤:
第一部分:准备工作 - CFCA证书的颁发
在签名任何交易之前,必须先有身份凭证。这个过程如上图“证书颁发阶段”所示:
生成密钥对:在银行办理Ukey时,CFCA的系统(或银行系统在CFCA标准下)会在Ukey内部安全地生成一对非对称密钥:一个私钥和一个公钥。
私钥:永远无法被读出,只存储在Ukey的安全芯片内,用于签名。
公钥:可以公开,用于验证签名。
颁发证书:CFCA将用户的身份信息(如姓名、账号等)和公钥绑定在一起,用自己的CFCA根证书私钥对其进行签名,生成一个用户数字证书。这个证书就是用户的“网络身份证”,证明了“该公钥属于该用户”。
注入证书:这个由CFCA签发的用户证书被安全地载入Ukey中。
至此,Ukey成为了一个既持有自己身份(证书)又能代表自己签名(私钥)的实体。
第二部分:交易签名流程(客户端 - Ukey的作用)
当用户需要进行一笔转账交易时:
构造交易数据:用户在网银界面填写收款人、金额、币种等所有交易要素,点击“确认”。
生成交易摘要:浏览器或网银控件会使用哈希算法(如SM3)对这些交易数据计算出一个固定长度的、唯一的哈希值(摘要)。哪怕交易数据只改动一个标点,这个哈希值都会彻底改变。
发送摘要至Ukey:这个交易数据的哈希值被发送给Ukey。注意:原始交易数据本身并不进入Ukey,这提高了效率且更安全。
验证PIN码:Ukey要求用户输入PIN码(口令)来授权这次签名操作。PIN码错误则流程终止。
内部签名:PIN码验证通过后,Ukey的安全芯片使用其内部永不离开的私钥,对收到的交易哈希值进行加密运算(签名算法,如SM2)。这个运算过程完全在硬件内部完成,生成一个数字签名值。
输出签名:Ukey将得到的数字签名值输出给电脑浏览器。
最终,浏览器会将原始交易数据和数字签名值一同打包,通过HTTPS通道发送给银行服务器。
第三部分:交易验证流程(服务器端 - CFCA的作用)
银行服务器收到数据后,开始进行验证,这个过程严重依赖CFCA的权威性:
分离数据:银行服务器将收到的数据包拆解成原始交易数据和数字签名值两部分。
验证证书链(CFCA的核心作用):
银行系统首先会检查用户证书(随交易请求发送或从库中查询)是否由可信的CFCA颁发。
银行服务器持有CFCA的根证书(公钥)。它用这个根证书公钥去验证用户证书上的签名。如果能成功验证,就证明:
a) 该用户证书确实是CFCA颁发的,是真实的。
b) 证书内的用户公钥是可信的。
验证交易签名:
银行使用从用户证书中提取出的用户公钥,去解密收到的数字签名值,得到的结果我们称为哈希值A。
银行使用与客户端相同的哈希算法,对收到的原始交易数据重新计算一次哈希,得到哈希值B。
裁决:
银行比较哈希值A和哈希值B。
如果二者完全相同,则意味着:
身份认证成功:签名是由该用户证书对应的私钥生成的,而私钥只存在于该用户的Ukey中,所以操作者必然是合法用户。
数据完整性成功:交易数据在传输过程中未被任何第三方篡改。
如果二者不同,则交易立即被拒绝。
总结与关键点
Ukey的职责:安全地存储私钥,并在内部执行签名操作。它不生产证书,而是证书和私钥的安全载体。
CFCA的职责:作为绝对可信的第三方(Trusted Third Party),颁发和管理证书,用自己的信誉担保“证书中的公钥确实属于该用户”。它是整个信任体系的基石。
分工合作:Ukey解决了“如何安全地签名”的问题,而CFCA解决了“如何让银行信任这个签名”的问题。二者缺一不可,共同构成了网银交易安全的核心保障。