一、前言
作为一名大前端开发人员,如果只涉猎于大前端领域,多少有点局限性,所以我逐步加入云原生的学习之路。回顾2022年,自己参加了一些关于云原生以及大数据相关的线上、线下沙龙活动,不仅学到了很多自己之前从未了解过的后端知识,而且也认识了很多行业大咖和技术大牛,当然还有很多做技术的小伙伴,总体来看在即将过去的2022,我更多的是收获,还有就是成长。那么本文就来分享一下作为前端开发人员眼中的云原生数据加解密的实现原理,如有不妥之处,请联系作者改正。
二、行业背景
最近几年,不管是互联网企业还是传统的行业,也不管是前端开发领域还是后端开发领域,有关数据安全的领域一直是企业绕不开的话题,其中数据加密是数据安全领域最核心的模块之一。因为凡是涉及到用户安全数据或者商业性敏感的数据,如用户身份证号、手机号、银行卡号、用户账号等敏感的个人信息根据相关部门规定,都是需要进行数据加密保护的,这给企业的网络安全部门以及业务团队都带来了很大的挑战。
三、面临的挑战
作为前端开发者来看,其实在真实业务场景中,相关业务开发团队往往需要针对企业的安全部门需求,自主实行并维护一套加解密的系统, 比如加解密SDK、或者加解密服务提供的OpenAPI,当然这是后端的业务范畴,作为前端开发者只做了解即可。但是在真正实施过程中会发现有很多让人头疼的问题,比如业务代码入侵过于严重,已经上线的业务改造成本过大,改造风险高、不可控等。但是针对这些痛点,一个比较强大的数据库中间件提供了一套完整的透明化解决方案,实现了业务代码零入侵,安全、低风险地无缝进行加密改造。下面就来分享一下关于该中间件的实现原理之我见。
四、实现原理
4.1什么是彩虹桥?
通过参加线下沙龙了解并熟悉了彩虹桥,在我没有接触彩虹桥的时候,和大多数人一样不清楚它的详细概念,后来经过技术专家科普之后才知道彩虹桥的详情。彩虹桥,其实就是基于Apache ShardingSphere二次开发的透明化数据库中间件,通过数据分片、读写分离、加解密等能力对原有数据库进行增强,主要分为中心化部署架构和非中心化部署2种方式。下面是这两种方式的图解:
- 中心化部署架构--Proxy模式
在Proxy模式下,加解密实现模块是在Proxy内部完成,对上层应用完全透明。
- 去中心化部署--JDBC模式
在JDBC模式下,加解密实现模块是在Rainbow内部完成的,对上层应用完全透明。
4.2 概念释义
接下来分享几个核心的概念释义:
- 明文列:主要是用来存储明文的列,用于在加密数据迁移过程中仍可提供服务,在洗数据结束后可删除。
- 密文列:主要是用来存储加密后的数据,是DB中实际存在的真实列名。
- 逻辑列:主要是用来计算加解密列的逻辑名字,是业务代码里面定义的SQL对应的列名。
4.3 加解密过程
加解密的整个过程对于上游业务应用是完全透明化的,主要就是通过彩虹桥的内核模块对SQL进行解析,然后根据加解密规则找出需要加密的字段和所使用的加解密算法对目标字段进行加解密处理后,再将SQL改成于底层DB交互的SQL。
使用彩虹桥,它会把用户请求的明文进行加密后存储到底层数据库,并在用户查询时将密文从数据库中取出进行解密后返回给上游。通过屏蔽对数据的加密处理,从而让用户无需感知解析 SQL、数据加解密的处理过程,用户就像在使用普通数据一样使用加密数据。
上面的加解密的整个过程听起来有点难懂,接下来举个例子说明一下:
业务代码中的SQLselect account from t_user where account = 'xxxxxxx@163.com'
经过彩虹桥改写之后,实际去数据库执行的SQLselect account_cipher as account from t_user where account_cipher = 'xxx'
其中account为逻辑列,account _cipher为密文列,彩虹桥内部把xxxxxxx@163.com经过加密后,把where条件改成account _cipher = 'xxx' ,这里实际查询的是密文列,但是整个上层是无感知的,对业务来说这个字段就是account,实际查询的数据库列是account _cipher。
4.4 加密规则
主要是用于告诉彩虹桥,哪个逻辑表里哪个列用于存储密文数据、使用什么算法加解密、哪个列用于存储明文数据以及用户想使用哪个列进行 SQL 编写,在结合上面的例子看,规则配置就应该是这样的。注意:主要是用来存储明文的列,用于在加密数据迁移过程中仍可提供服务,在洗数据结束后可删除。因为已上线业务改造前,数据库里面存储的只有明文,在改造过程前几个阶段查询所用列都是明文列,一般情况下明文列可以与逻辑列保持一致。
4.5 不支持的内容
虽然彩虹桥的使用解决了很多痛点问题,但是也有一些限制、不支持的情况:
- 加密的字段无法支持查询不区分大小写的功能;
- 加密的字段无法支持计算操作,eg:AVG、SUM 、算术表达式。
- 加密的字段无法支持比较操作,eg:大于、小于、LIKE 等;
五、使用总结
由于现在用户数据隐私越来越受到重视和保护,以及相关部门加强用户隐私信息的保护力度,数据安全不仅仅是一个技术层面的问题,更是一个事关民生民情的大问题,一旦出现数据泄露,尤其是涉及敏感的信息,对用户和企业都可能造成不可估量的损失,所以数据加密的重要性不言而喻。
通过上面内容的分享介绍,可以看出彩虹桥这种方案的亮点所在,虽然作为非专业人士来看这个方案,但是也能看到其中的巨大亮点和优势。相比传统的加解密方案,彩虹桥的这种方案优势非常明显,在自动化 & 透明化数据加密过程,用户无需关注加密中间实现细节,只需要配置自己需要加密的列,还有彩虹桥内置多种加密算法(MD5、RC4等)可配置,且可根据实际需要自定义加密算法进行数据加密,无论是业务改造成本还是密钥安全性上都具备优势。
六、最后
本文借助在云原生领域的知识点来回顾自己2022年的技术进阶之路,虽然对于这个领域还是不太熟悉,也只是学到了皮毛,但是我觉得收获还是很大的,尤其是自己拓展了知识圈,涉猎了自己之前从未接触的领域,非常的有指导意义,受益匪浅。尤其是在跌宕起伏的2022年,回首过去的这一年,经历了太多的至暗时刻,尤其是大环境的寒冬,互联网行业的不景气,只能通过拓展自身技能来保证竞争优势,保持持续学习才是生存下去的根本,所以在新的2023年,需要持续学习下去,继续涉猎新的知识领域,奋斗出来的人生很绚丽!