现已开源|业务0改动即可实现数据加密?有这款神器足矣

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
简介: 全密态Go驱动开源啦

作者:杨逍(软补)

阿里云全密态为什么这么好用?

小王是某物流公司的CTO,出于公司在安全合规方面的业务规划,需要根据以下要求完成业务整改:

  1. 即使数据库账密丢失,黑客也无法拖库。
  2. 研发、运维、DBA等人员无法接触线上敏感客户数据。
  3. 快速上线。


小王为此找到了阿里云瑶池数据库团队,接触到了阿里云全密态数据库,在3天内快速完成了业务测试、改造、上线。在使用全密态数据库的过程中,他惊奇地发现,改造完后虽然从数据库侧读到的数据全是类似“锟斤拷烫烫烫”这样的密文,但是自己的业务应用居然在完全没改动代码的情况下可以正常运行。


他不禁开始奇怪这是怎么一回事。有没有可能阿里云在糊弄自己,客户端读取到的真的是密文吗?如果数据是加密的,怎么可能自己不需要改动业务代码呢?


之前了解到业界处理类似问题的方案,都需要在业务侧做大量的改造。如果是基于传统的数据库自己做端侧数据加密存储的话,存在很多问题,例如大量SQL无法继续支持、业务代码改造成本极高、性能很差......


带着这个疑问,他找到了阿里云的数据库专家,进行咨询。数据库专家听完小王的疑惑,微微一笑,说:“您不用担心,我结合代码,为您解释一下其中的原理。

全密态数据库原理解析

“全密态能力指的是数据全生命周期以密态存在。数据一旦流出可信环境,就总是处于密文状态下的。只有当数据落入正确的人手里,例如数据到达咱们的业务系统客户侧,才会被解密。任何账号通过直连数据库的形式,都是无法读取数据明文的。”


小王问:“那么什么叫做让数据落入正确的人手中呢?产研、运维人员是不是正确的人呢?


数据库专家:“请看图。对于应用终端用户来说,他们是数据的真正所有者,可以看到明文或者是脱敏后的敏感数据。对于应用研发、运维人员以及数据库研发、运维人员来说,他们都只能看到加密后的数据,监守自盗的问题不复存在。”

image.png

数据库专家继续说:“我们全密态功能,是在数据库本身查询流程上做的一个拓展。我们在数据库上集成了一个自研的安全闸口,这个组件会根据用户定义的敏感数据规则,在数据被输出时进行加密。同时,考虑到企业用户往往会给DBA、产研人员一定的阿里云控制台权限,定义规则这个行为本身可以通过阿里云的RAM体系来约束。企业可以根据最小授信原则给DBA、产研人员授权,避免他们恶意篡改规则,以明文形式导出数据。明文数据库加上安全闸口,即为我们的全密态数据库产品。”

image.png

“全密态数据库本身在加密数据的时候,是字段级别的加密。从数据内容的角度来看,我们的网络包完全符合MySQL本身的通信协议,只是对数据内容本身做了替换,如下图所示。”

image.png

全密态数据库通信协议


“在MySQL的文本通信协议中,每一个字段的数据都以字符串的形式保存,其中每个字符串的编码形式为长度加上内容。我们遵循这个原则,在返回数据时,也将密文用这种格式组织。我们遵循MySQL的通信协议,使得全密态数据库兼容了所有业界现存数据库客户端。同时,我们通过有选择地对数据加密,让这些客户端在查询时显示密文。”

注:MySQL有文本协议、二进制协议两种通信机制,本文仅以第一种作例子。

全密态Go驱动开源啦

小王:“全密态数据库果然厉害。不过,为什么公司的业务应用可以在完全没改动代码的情况下正常运行呢?”


数据库专家开心地说道:“嘿嘿,现在我们可以对外进行详细的技术揭秘了。因为,我们的的客户端项目  alibabacloud-encdb-mysql-go-client  终于开源啦!客户端本身支持所有SQL语句,支持MySQL的两种通信协议,且提供标准Go接口,因此完全不需要业务改造即可接入Gorm、Gin等框架。听我下面跟你详细讲述。”

Go语言客户端原理解析

“类似于Java为了让应用程序使用相同的接口接入不同的数据库创造了JDBC,GoLang创造了database/sql/driver系列通用接口。不同的数据库驱动,只需要实现统一的Driver(驱动)及其派生成出来的Conn(连接)、Stmt(语句)、Rows(数据行)类型,就可以让应用程序以统一的接口调用。MySQL社区驱动就是通过这种方式被无数用户使用的。请看下面这幅图,本质上应用侧调用了Rows类的Next接口获取数据。”

image.png

社区MySQL Go驱动UML关系图


“您查看我们全密态数据库Go驱动的代码,可以很清楚发现,我们实现的Driver、Conn等类,其实内部都有一个相应的社区实现类作为成员。”


driver.go文件

// Driver实现:内含MySQL实现类
type EncMySQLDriver struct {
  mysqlDriver *mysql.MySQLDriver
}

“我们利用这些内部的社区实现类实现了大部分的标准接口。例如社区要求的Conn.Begin接口,我们就是直接调用了内部的社区类成员的同名函数。”


connection.go文件

func (c *encmysqlConn) Begin() (driver.Tx, error) {
  return c.conn.Begin()
}

“这种设计,让我们完全不需要关心MySQL本身的连接、事务、SQL等机制,我们只需要专注于加密解密处理本身。之前提到。我们的全密态数据库完全符合MySQL通信协议,因此,在我们的客户端内部我们可以利用社区驱动,调用Rows.Next接口直接读到密文内容。我们需要做的,只是在我们自己实现的Rows.Next接口里,将密文进行解析,再将明文返回给应用侧即可。”

image.png

全密态MySQL Go客户端UML关系图


“对应用侧来说,则完全不需要关心底层的驱动实现,只需要引入我们的开源包即可。”


获取全密态mysql go客户端

go get github.com/aliyun/alibabacloud-encdb-mysql-go-client@latest

“参照我们的README.md您很快就可以跑起来一个demo。由于我们实现了Go语言的标准接口,客户端本身可以一键接入Gorm、Gin等GoLang常见Web框架,稳定性、易用性都已经通过了客户验证。”

为什么要开源

小王听完,赞叹道:“这个客户端设计还真是巧妙。不过,这么棒的技术,你们为什么决定开源呢?


数据库专家认真地回答道:“首先我们相信,作为云厂商,在给用户带来安全产品的时候,开源透明、公开的精神能增强用户对我们的信任。坦诚和互信常常是连在一起的,通过阅读我们的开源代码,用户可以更加相信我们产品的安全性、可靠性、稳定性


其次,在Go的世界里,闭源的项目是没法直接通过Go的包管理机制透出的。在此前,全密态数据库对客户输出时,采用的是将压缩包放在文档界面的形式,这种形式增加了客户集成程序包的复杂度,对线上业务的部署也增加了难度。出于客户第一的价值考虑,我们最终选择了开源。


小王感叹:“确实,代码全部开源,我们客户使用起来也更加放心,对项目更加可控。必须要给阿里云点一个大大的赞!”


快来关注

全密态数据库基于用户的设置,实时对业务敏感数据进行字段级加密,将业务数据资产与传统DBA、运维等未授权人员进行了隔离,保障客户数据安全。全密态数据库客户端基于社区驱动、开源的密码库,实现了标准的Go语言数据库驱动接口,助力客户系统代码0改造接入全密态数据库,为客户提供了高度的易用性。当您的数据库中有数据需要被保护时,可以使用RDS MySQL和PolarDB MySQL的全密态数据库功能

了解更多

全密态数据库PolarDB MySQL 🔗 https://help.aliyun.com/zh/polardb/polardb-for-mysql/user-guide/confidential-engine/


全密态数据库RDS MySQL 🔗 https://help.aliyun.com/zh/rds/apsaradb-rds-for-mysql/fully-encrypted-database/


全密态数据库Go客户端开源地址见Github 🔗 https://github.com/aliyun/alibabacloud-encdb-mysql-go-client

相关文章
|
Web App开发 JavaScript 前端开发
NaCl 更安全、更易用、更快速的开源加密库
NaCl (氯化钠,盐) 是一个易用高速的库,可用于网络通讯、加密揭秘、签名等应用。NaCl 的目标是提供构建保密工具所需要的核心功能。当然,已经有其他库提供这方面的功能。不过 NaCl 在安全性、易用性和速度上都有所提升。
432 0
NaCl 更安全、更易用、更快速的开源加密库
|
2月前
|
数据安全/隐私保护 C++
c++实现http客户端和服务端的开源库以及Base64加密密码
c++实现http客户端和服务端的开源库以及Base64加密密码
|
Java PHP 数据安全/隐私保护
|
存储 安全 算法
Conceal —— Facebook推出的android数据加密的开源APIandroid数据加密的开源API
现如今很多的智能手机,都支持把应用安装到SD卡中,这会帮用户节省很多空间,但是许多黑客也会利用这一点窃取用户的隐私。一般情况下,应用都有SD卡的读写权限,当然他也可以读取到其他应用,存储在SD卡上的数据。这意味着如果你安装了恶意的应用,他就可以轻易的获取SD卡上的所有数据。
348 0
Conceal —— Facebook推出的android数据加密的开源APIandroid数据加密的开源API
|
安全 测试技术 数据安全/隐私保护
|
2天前
|
存储 安全 网络安全
网络安全与信息安全:漏洞与加密技术的关键知识
在当今数字化社会中,网络安全和信息安全问题日益突出。本文深入探讨了网络安全漏洞的类型与防范策略,以及加密技术在信息安全中的关键作用。通过提高安全意识和技术防护手段,保护个人和组织的信息免受攻击和泄露的威胁。 【7月更文挑战第4天】
|
4天前
|
算法 安全 网络安全
网络安全&密码学—python中的各种加密算法
数据加密是一种保护数据安全的技术,通过将数据(明文)转换为不易被未经授权的人理解的形式(密文),以防止数据泄露、篡改或滥用。加密后的数据(密文)可以通过解密过程恢复成原始数据(明文)。数据加密的核心是密码学,它是研究密码系统或通信安全的一门学科,包括密码编码学和密码分析学。
|
2天前
|
存储 安全 算法
网络安全的守护者:漏洞管理、加密技术与安全意识的融合之道
在数字化时代的浪潮中,网络安全成为保护个人隐私和企业资产的关键防线。本文深入探讨了网络安全的三大支柱:漏洞管理、加密技术和提升安全意识。通过分析最新的研究报告和统计数据,揭示了网络威胁的演变趋势,同时提供了防御策略和技术手段的科学解析。文章旨在为读者提供一套综合性的网络安全防护方案,强调在不断变化的网络环境中,持续更新知识和技能的重要性。
|
2天前
|
安全 网络安全 量子技术
网络安全新纪元:漏洞、加密与安全意识的三重奏
在数字化时代的浪潮中,网络安全成为维护信息资产的重要防线。本文深入探讨了网络安全的三大关键要素:网络漏洞、加密技术及安全意识。通过分析最新的研究数据和案例,揭示了网络攻击的常见模式、加密技术的发展趋势以及提升个人与企业安全意识的有效策略。文章旨在为读者提供一套全面的网络安全知识体系,帮助构建更为坚固的信息安全防线。
10 0