狗也会使用键盘输入你的帐号密码,或者使用你的数字签名。
直到你拥有一台具有生物特征识别能力的智能手机。
具有唯一性、可用于身份识别的生物特征有指纹、声纹、人脸、眼虹膜,目前智能手机普遍采用指纹识别。
指纹识别
由于指纹具有唯一性,因此通过比对指纹特征即可识别真实身份。指纹识别技术最早用于识别罪犯——办理身份证时,你的指纹已经永久存储在国家安全部门的数据库里。所以,老实点吧,韩国整容师也帮不了你。
指纹传感器负责采集指纹特征,当你启用指纹识别能力时,它会扫描并存储你的一个或多个手指的指纹特征数据,用于日后比对。
智能手机指纹识别主要用途是指纹解锁,免除输入密码解锁手机的烦恼。密码太短,容易被人偷窥;密码太长更烦恼,而且容易忘记。拿起手机,轻轻抚摸一下指纹传感器,手机瞬间解锁,是不是很爽?
密码泄漏,换个密码即可。但指纹终身不变,无法更换,一旦泄漏,后果严重。因此,指纹特征数据是机密信息,应予特别保护。
为保护指纹特征数据,指纹的采集、存储和比对都必须在一个可信执行环境(Trusted Execution Environment,简称TEE)内部进行。TEE独立于智能手机操作系统之外,也与网络绝缘,敏感数据只进不出,是一只孤傲的铁公鸡。它忠于使命(手机出厂后TEE的功能规格无法变更),严守机密,是指纹识别的安全基石。
智能手机操作系统不能获取指纹特征数据,仅能请求TEE执行指纹采集、存储或比对等预设功能,TEE执行请求后向操作系统返回“成功”、“失败”或“错误”等结果信息,操作系统根据结果信息作出反应(例如,指纹比对成功则解锁手机,否则请求TEE重试),或把结果信息反馈给相关应用软件处理。
方便且安全,似乎很完美。
但是,指纹特征数据并非绝对可控(例如,你喝水的杯子表面有你的指纹,你工作单位或生活社区门禁系统服务器也可能有你的指纹),有心人获取指纹特征后制作一个完全相同的手指模型,狗也可能冒充你;
指纹识别技术还存在一定的误识率(低于1/10000,毕竟大于0);
TEE理论上非常安全可靠,但万一呢?2015年HTC One Max错把用户指纹图形文件备份到手机不安全区域,2016年华为P系列手机TEE设计纰漏致其指纹锁被黑客攻破……还有谁?……
总之,指纹识别“成功”后,你不一定是你,仍可能是一条狗——尽管只有一丢丢的可能性,毕竟大于0。
为此,智能手机增设一套强制安全规则,必要时临时禁用指纹识别,要求用户输入解锁密码。例如,苹果手机的规则是,设置或新增指纹前、开机或重启动后、锁定48小时后、156小时未使用密码解锁且4小时未使用指纹解锁后、连续5次指纹识别失败或远程锁定后,苹果操作系统(iOS)就会要求你验证一次解锁密码。安卓操作系统(android)也有类似安全规则,大同小异。
如果指纹识别仅用于解锁手机,以保护你的敏感数据(例如,你与隔壁老王的私密照片或聊天记录),那么做足以上保护措施已经非常安全了。
但是,你的中国梦决不止于此,也不应止于此。当你拥有不要密码的安全手机,很快就会想要没有密码的安全互联网。例如,指纹登录?指纹支付?感谢你,你的贪婪和懒惰,是推动社会进步的动力。
指纹支付
或许,你已经体验过指纹支付,甚至相当熟悉它了:轻轻抚摸一下指纹传感器,瞬间支付成功,是不是很爽?与指纹解锁过程似乎没有区别,支持指纹解锁的智能手机,自然就能支持指纹支付,对吧?
不对。
指纹解锁是智能手机本地确认你的身份,指纹支付则是支付服务提供商(通过网络连接智能手机)远程确认你的身份。责任主体、信任链条和安全风险等级全都不一样,你说支持就支持?你咋不上天呢?
支付服务提供商(微信支付、支付宝、Apple Pay等)首先要问,你的智能手机可以信任吗?万一,智能手机操作系统被黑客入侵后动了手脚,操作系统可能“欺上瞒下”——不向TEE发出指纹比对请求,而直接给支付软件返回指纹比对结果——“成功”,意味着指纹识别系统已被劫持(架空),但支付软件不知道这事,仍根据操作系统返回的指纹比对结果完成支付,如果导致财产损失,谁的责任?
支付服务提供商接着要问,你的联网环境安全吗?如果不安全,网络传输途中被黑客篡改了数据,如果导致财产损失,谁的责任?
支付服务提供商还要问你,你的智能手机是否有他人指纹?例如,你常把手机给10岁的儿子玩游戏,为了省事,你让儿子录入了指纹。你与儿子的指纹都能解锁手机,但你显然不会允许他乱动你的微信钱包,否则他有机会让你一夜回到解放前。
重新回答,指纹支付是不是并没有你想象的那么简单?无知则无畏,你啥都不知道,在你眼里就啥都很简单,不知道网络安全专家为了帮你守护钱包死了多少脑细胞。
为保证指纹支付安全,还需要做这三件事:
指纹识别结果增加指纹编号(仅允许开通指纹支付所用手指使用指纹支付);
防止伪造指纹比对结果(设备侧信任);
防止虚报指纹比对结果(网络侧信任)。
指纹编号不难解决(需手机厂商提供支持),但如何防止伪造和虚报指纹比对结果?
答案就是:“数字签名”机制。
数字签名
数字签名是只有发送者才能产生的、他人无法伪造的一段数字串,这段数字串同时也是对发送者所发信息真实性的可信证明。
听起来很玄,但如何实现?你得先知道“非对称加密”技术。
加密就是以某种规则改变原文以生成密文,这套规则称为加密算法。加密算法必须可逆,以便反向执行以恢复原文,恢复过程就是解密。
加密算法必须公开,否则无法用于互联网。但公开算法后,岂不是任何人都可以解密了?别担心,加密算法会引入一个加密参数,只有知道加密参数的人,才能解密。加密参数和解密参数相同,这个参数就是所谓密钥。你可以把加密算法理解为保险箱,密钥则是保险箱的钥匙。
问题来了。如何把这把“钥匙”安全可靠地交给对方?没啥好办法,只能面交,网络传递很可能泄漏给第三方。你还必须为每个接收者设定不同的密钥,以及密钥泄漏后或周期性更换密钥。很烦,也不靠谱——可能第三方已经知道密钥了,而你和对方都还蒙在鼓里呢。
办法总是有的。数学家发明了一种加密算法,它使用两个关联密钥,用任一密钥加密的密文,必须用另一密钥解密。这就好办了:你保留其中一个密钥(私钥),只有天知地知你知,另一个密钥则完全公开(公钥)。任何人都可以使用你的公钥加密,但只有你能解密,因为解密所需私钥只有你知道,从而轻松实现保密通信,妈妈再也不用担心你的密钥被狗叼走了。
由于加密和解密使用不同密钥,它叫非对称加密算法,它是互联网信息安全的核心和基石。
跑题了是不?说好的“数字签名”呢?你别急,再撑一杆咱就上岸了。
刚才提到,你有一个全世界所有人都没有的东西:你的私钥。没错,你就用它给自己所发信息“签名”。但你不能晒自己的私钥,它是见光死的。咋整?
根据定义,数字签名要解决两个问题,一是发送者身份(未被冒充),二是信息的真实性(未被篡改)。
为此,我们先得了解一下“数字摘要”。所谓数字摘要,就是根据某种公开算法计算出你信息全文的唯一标识。只要信息被增加、删除或改动一个字节,这个标识就会改变。你可以把数字摘要理解为信息的“特征码”。
接下来,数字签名及其验证方法就简单了。
数字签名:计算拟发信息的数字摘要,并用你的私钥加密数字摘要,然后把加密后的数字摘要与拟发信息合并发给对方。“加密后的数字摘要”就是你对拟发信息加注的“数字签名”。
数字签名验证:对方收到后,计算已收信息的数字摘要(与你的计算方法相同),并用你的公钥解密你的数字签名、获得你计算出的数字摘要,然后比较这两个数字摘要,如果完全一致则通过验证、确信已收信息系你发出且未被篡改,否则不予信任。
这就是基于非对称加密算法的“数字签名”原理,它与“加密”是反着来的:加密是对方用你的公钥加密,你用自己的私钥解密;签名则是你用自己的私钥加密,对方用你的公钥解密。
玄不?不过如此。
但是,还有一个关键问题没有解决:你用数字签名证明你是你了,但你的公钥是你自己发布的,在互联网环境下,对方仍然不能确定你是谁,你仍可能是一条狗。
因为,你俩之间,缺一个“证人”:权威的数字证书颁发中心。
你的私钥和公钥应该来自某个权威的数字证书颁发中心,该中心负责审核你的真实身份,给你的公钥和个人身份信息加注该中心的数字签名,你就有了“数字证书”,你把这个含有你的公钥和个人信息的数字证书发给对方,对方用该中心的公钥验证你的数字证书,就知道你是谁了。反之亦然。
地球人太多太多,权威的数字证书颁发中心单枪匹马恐怕忙不过来,它就用上述方式给它信任的其它机构颁发一个数字证书,授权对方代理它对外颁发数字证书。这样,权威的数字证书颁发中心就成了“顶级中心”,对方就是“二级中心”。以此类推,还有“三级中心”、“四级中心”、……互联网空间基于数字签名的可信身份认证体系就形成了。“顶级中心”就是“互联网公安部”嘛,其它依次是“公安厅”、“公安局”……
好玩对吧?但请别忘了来时的路:引入数字签名,解决指纹支付时“防止伪造和虚报指纹比对结果”的问题。
现在,这个问题已经解决:借用智能手机的指纹锁保护你的私钥,确保只有真正通过指纹比对后才能获取和使用你的私钥,并继续下一步。期间所有信息都使用你的私钥加注数字签名,构建一个完整的信任链,能够实时感知来自设备或网络的安全风险,支付服务提供商就能放心地帮你买买买了。
支付服务提供商唯一能做的选择题是:信任哪个“顶级中心”?
这是信任问题,也是利益问题。
顶级中心
支付宝与华为等厂商联合建立一个名叫“互联网金融身份认证联盟”的组织,简称IFAA。他们说:信任上海市数字证书认证中心,它就是我们的“顶级中心”。
微信支付比较“强势”,自定指纹支付安全标准SOTER,免费开放。他们说:我不跟你们玩。我把每台智能手机都做成独立的“顶级中心”,这个顶级中心的私钥,微信不知道,手机厂商不知道,机主本人也不知道。它就是“天”,人类无法掌控。
谁更安全?
显然微信支付的方案更安全,至少理论上如此:它的认证体系排除了人的介入;去中心化,即使出了问题也仅影响一台手机;SOTER设计思想和方法完全公开,并已开放源代码,以表明其对安全承诺的信心。
IFAA授权的上海市数字证书认证中心毕竟由人来管理,而且它是全局保密中心,一旦出了问题,整个信任体系就崩塌了。其次,IFAA的方案透明度极低,其接入能力也暂未向普通开发者开放,仅限联盟成员接入。
不过,为了确保每台智能手机的顶级私钥“天知地知你不知我也不知”,微信要求手机厂商在生产线上使用工具软件自动生成向每台手机的TEE安全存储区域写入顶级私钥,并把自动生成的相应顶级公钥和手机设备编号上传给微信服务器,以备日后验证数字签名。
上传到微信服务器的信息,不是手机的顶级私钥,更不是用户指纹,而是可以公开的顶级公钥,在手机厂商生产线上就完成了。手机指纹锁仅用于保护顶级私钥,不存在获取并上传用户指纹的必要性和可能性。支付宝同样需要手机上传公钥和设备编号,不过不是在生产线上完成的。上传公钥的用途是日后验证来自设备侧的数字签名,与包括用户指纹在内的用户个人隐私毫无关系。
华为方面为什么拒绝支持微信SOTER?本人推测,华为与微信的关系不太好,或微信不愿向华为付费,或华为与支付宝的关系太好了(排他条款)。
华为方面拒绝支持微信SOTER后为什么抛出谬论“某互联网厂商要求把用户指纹上传服务器做指纹比对”?本人推测,用户要求支持微信指纹支付的压力山大,华为方面没有担当,把锅甩给微信,简单粗暴。如果不是这个因素,那么,
事出无因,必有妖孽。