文 / 财付通支付科技有限公司技术总监 何畅
财付通支付科技有限公司 吴怡
2020年1月1日《中华人民共和国密码法》的正式实施,将密码应用和管理的基本制度及时上升为法律规范,填补了我国密码领域长期的法律空白,标志着密码安全与合规正式纳入到国家网络安全监管体系中。在此之前,商用密码应用因缺乏法治化、科学化、规范化的贯彻落实,进而造成业界对密码安全的关注度远远不够。从严格合规的角度来看,过去不少信息系统在密码安全方面都可能存在一定的安全隐患。例如:使用已淘汰或非核准的密码算法;使用未经评估且存在隐患甚至恶意后门的开源项目;密码应用方案缺乏整体、专业的安全性评估等。近年来,在一系列与密码相关的法律法规、行业标准的出台以及政府相关部门的大力宣传引导下,密码应用不断深入和拓展,成为了信息系统安全升级的重要契机,也对各行业系统的密码应用安全提出了更高的要求。金融、政务、交通、能源等涉及国计民生的重要领域首当其冲面临着密码安全升级的新挑战。
财付通商用密码的开发背景
由于财付通支付科技有限公司(以下简称“财付通”)的系统涉及用户体量庞大,端到端覆盖的密码应用场景众多,既包括了移动终端、IoT嵌入式物联网设备,也包括了服务端、网页端、小程序等,进而在商用密码改造升级的过程中面临着一系列的技术挑战,且通过行业现有的技术方案不足以稳定、高效地解决。例如:商用密码行业产品生态普遍以硬件为主,软件密码相关标准发展相对滞后,导致安全合规的软件密码产品缺失;商用密码中间件生态不够完善;缺乏从终端到系统形成闭环支撑的密码产品;高并发业务系统存在的密码算法性能问题;在密码升级改造过程中系统连续性和稳定性的问题等。为了系统性地解决这些问题,财付通于2018年成立了商用密码自研与改造项目(以下简称项目),旨在贯彻落实国家密码战略与密码行业标准框架下,自主研发商用密码相关技术以支撑完成全链路密码改造升级。
财付通商用密码的技术目标
在行业生态薄弱的情况下,为了低成本、高效地实现多业务场景中的商密应用升级,项目既要着力解决好性能、兼容性、安全性和易用性的问题,也要丰富商用密码组件和服务生态。项目为解决这些难题,确定了三个主要的技术目标:第一,实现跨平台、高性能的通用软件商密算法引擎,实现核心算法跨端支持;第二,完善商用密码算法的技术中间件,形成完整的商用密码技术闭环;第三,打造适合财付通业务技术架构的商用密码产品,以自研软件产品获得国家密码管理局认证,为财付通密码升级奠定安全与合规基础。
财付通商用密码的技术路线
在整体的技术路线上,项目坚持密码技术要自主可控的指导思想,摆脱长期以来对国外开源项目的依赖,通过自研的方式打造商用密码算法引擎,并结合硬件资源形成密码基础底座。自研引擎采用自底向上的跨平台设计,在跨平台的同时保证高性能的优化空间,在搭建商用密码基础底座的同时,还需要获得国家密码管理局认证,进而确保其合规性。此外,项目在密码基础底座之上搭建了密码服务组件层,形成商密服务中间件矩阵,研发了一系列易于接入的中间件模块,包括:支持商用密码算法体系的安全控件、加密键盘等用户端密码组件;支持商用密码SSL的跨平台网络通信密码套件,签名、验签后台密码服务;支持商密PKI/CA体系的密码认证服务等。在应用层通过对核心算法引擎与密码组件服务进行了进一步封装,形成密码应用服务中台,提供面向业务的一站式接入能力,满足各业务线的商用密码技术应用和安全合规需求,实现业务闭环。
财付通商用密码解决的关键问题
项目在实施过程中要集中技术力量解决一些关键的行业性技术问题,而这些问题传统的密码厂商过去可能没有完全感知或关注到,主要有以下几个问题。
1.提供方案统一且兼容不同平台技术指标要求的多语言接入能力
业界的开源项目和商业化产品普遍存在诸多问题,使其无法完全满足财付通业务和性能等多方面的要求,进而面临众多挑战:首先是场景多样性问题,项目需要支撑财付通前后端各种技术要求不同的应用场景,如服务端需要满足高计算性能要求、移动终端对性能要求相对不高却对安装包大小非常敏感、IoT物联网设备(如智能手表)对运行时的峰值内存要求极其苛刻,如何在解决这些问题的同时又能保证方案一致性的第一个挑战;其次是语言栈的问题,由于不同的业务模块使用不同的语言栈,如何提供满足不同语言要求的同时保证低维护成本成为方案的第二个挑战;再次是如何在满足跨平台多语言的同时,最大程度地保留计算性能的优化空间。
为了解决上述各项挑战,项目完全自研了跨平台的商用密码算法引擎。在架构设计上,引擎将密码运算的底层通用数学算子抽象出来,基于不同架构的汇编指令及扩展指令分别对其进行了汇编层的实现和优化,使得项目在计算密集的部分拥有非常高的性能。出于对兼容性和性能的考虑,引擎在计算层和实现层使用底层语言实现了更上层的密码运算和编解码功能。在接口层,引擎则针对底层语言实现不同语言的接口桥接层,这种自底向上的设计,可以在挖掘性能优化空间的同时,实现广泛的跨平台和多语言覆盖。整体的架构均采用模块化的设计,进而可以做到在编译期就根据不同的产出目标进行各子模块的组装。得益于上述设计方案,此算法引擎在兼容信创CPU时,可以非常低成本地做到针对信创CPU的汇编级优化。
2.解决SM2/SM4密码算法实现性能低效的问题
业界一些开源项目的SM2实现普遍基于椭圆曲线密码学传统实现方案,在算法层面缺少新理论成果的落地实现,在算法与工程优化实践上的结合仍然不够。项目在解决该性能问题时把整个算法做到数学算子级别的细粒度拆解,针对每一个层级和算子的计算过程去结合近些年的最新研究成果,并通过工程实现来对多种优化方法进行测试、筛选和参数特化及调优,再把这些算法优化手段紧密结合不同架构的运行环境进行工程调优,最后找到在SM2算法上性能表现最好的优化方案,将SM2的整体性能提升80%。
SM4算法通常用于实际业务数据加解密,涉及调用数据量大且频繁,对性能要求高。而业界实现的算法性能比国际算法相差较大,尤其是国际算法在很多通用CPU上有专用的AES硬件加速,如果从AES算法升级到SM4算法势必会给业务升级改造带来很大的性能压力。财付通在SM4算法的优化路径上,借鉴了国内外分组密码算法的先进优化思路,并且利用已有的CPU和GPU硬件能力深度结合工程手段进行优化,例如引入了并行查表、同构映射、比特切片等新思路。最终,SM4性能在各平台取得了突破,缓解了高流量、高并发业务的性能压力。
3.探索既能满足安全要求,又能满足易用性要求的密钥保护方案
在大部分应用中,密钥管理任务通常都集中在后台系统侧,但是在需要双向身份认证的业务中,不可避免地需要在用户终端侧进行密钥保护。在终端应用场景保护密钥有较多传统方法,但均难以同时满足安全、合规与易用性等要求。例如:移动终端的TEE方案不支持国密算法,且生产厂商为境外厂商存在安全合规风险;通过UKEY等硬件外设造成应用场景受限等。而常规的纯软件方案往往存在因子泄露、白盒攻击和反编译逆向等风险。
财付通在探索该解决方案中,主要通过引入协同签名机制和白盒算法来实现终端侧的密钥保护:协同签名通过密钥分割机制将完整的私钥分割成两段,而在用户终端侧仅出现私钥分片;白盒算法则是将密码算法进行分割,将密钥隐藏在算法的某个步骤中,然后进行可逆的置乱编码,并且在运算过程添加随机变量,使得攻击者即使获得运行时内存映射也无法得到原始密钥,同时增加了侧信道攻击的防御能力。这两种机制的结合大幅提升了用户终端侧的密码安全等级。
综上所述,财付通通过完全自主研发的商用密码算法引擎和中间件矩阵,高效率、低成本地支撑了财付通金融支付业务完成全链路密码改造升级,达到了同时满足性能、稳定性、兼容适配、安全合规等方面的要求,对其他大型系统的密码升级改造也有一定的借鉴意义。自研技术成果先后获得三项国家密码管理局商密产品认证,获得深圳市金融创新一等奖和中国人民银行金融科技发展奖二等奖。除金融领域外,财付通自研的商用密码技术成果也被多个行业标杆产品,如微信、企业微信、腾讯视频、腾讯会议等使用,并通过一些商业化合作的方式赋能行业的其他合作伙伴,实现了自研技术从金融行业走出去的目标。
声明:本文来自金融电子化,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。