数据安全的边界在哪里(字节安全团队自研敏感信息保护方案)

为什么要自研 DLP:

随着信息技术的飞速发展,互联网已成为日常办公、通讯交流和协作互动的必备工具和途径。与此同时,随着数据经济的大规模增长,也频频引发数据泄露、数据滥用等严重数据安全事件。

对拥有海量数据和信息的字节跳动来说,数据的存储安全和传输安全有着更高的要求。外加字节的业务模型之多、脱敏需求复杂,当前 DLP 产品在敏感信息的识别规则和高效率脱敏处理上无法达到需求。

为了更好保障字节跳动旗下的数据安全和隐私安全,字节跳动安全团队自主研发了一套敏感数据保护方案——GoDLP。作为字节跳动在数据脱敏保护方向成功的实践案例,字节安全团队希望用开源的方式向大家分享我们的研究成果,与行业一同成长。

字节的 DLP 是怎样的?GoDLP 的介绍

GoDLP 提供了一系列针对敏感数据的识别和处置方案, 其中包括敏感数据识别算法,数据脱敏处理方式,业务自定义的配置选项和海量数据处理能力。GoDLP 能够应用多种隐私合规标准,对原始数据进行分级打标、判断敏感级别和实施相应的脱敏处理。

GoDLP 的能力如何?

GoDLP 能够广泛支持结构化(JSON 数据、KV 数据、golang map)和非结构化数据(多语言字符串)。

  • 可实现敏感数据自动发现

GoDLP 内置多种敏感数据识别规则,可覆盖市面 80%以上识别规则,最大程度识别敏感数据

数据安全的边界在哪里(字节安全团队自研敏感信息保护方案)(1)

  • 灵活的敏感数据脱敏处理

GoDLP 支持多种脱敏算法,用户可自行根据需求进行脱敏处理

数据安全的边界在哪里(字节安全团队自研敏感信息保护方案)(2)

  • 业务自定义配置选项

除默认的敏感信息识别和处理规则外,业务可根据实际情况,配置自定义的 YAML 规则,GoDLP 能够根据传入的配置选项,完成相应的数据处理任务。

数据安全的边界在哪里(字节安全团队自研敏感信息保护方案)(3)

GoDLP 的性能表现

下方数据是在开启全部敏感数据类型情况下的结果:

  • 针对 1K 的文件,用时需 4.1 毫秒,占用 128.6k 的内存
  • 1M 的文件,用时为 4.1s,内存占用 118.6MB

序号

文件大小

执行时间

内存占用

1

1K

4.1ms

128.6KB

2

10K

41.4ms

1257.4KB

3

100K

406.9ms

12.3MB

4

1M

4.1s

118.6MB

测试环境:8 核虚拟机,Linux,amd64,Intel(R)Xeon(R)Platinum8260CPU@2.40GHz;代码版本:v2.0.0

GoDLP 在字节的实践

当前 GoDLP 已在字节跳动进行了丰富的实践。已接入的业务线涵盖抖音、电商、飞书、火山引擎、云安全、财经、教育、游戏等诸多业务线。

如何使用 GoDLP

git 开源项目地址:https://GitHub.com/bytedance/godlp

第一步,使用go get 命令安装 godlp 模块。

go get github.com/bytedance/godlp@latest

第二步,参考 README 中的 API 文档进行敏感数据操作。

如下代码会对字符串进行脱敏,更详细 API 例子可以参考源代码中的 mainrun/mainrun.go 文件。

package main import ( "fmt" dlp "github.com/bytedance/godlp" ) func dlpDemo() { caller := "replace.your.caller" if eng, err := dlp.NewEngine(caller); err == nil { eng.ApplyConfigDefault() fmt.Printf("DLP %s Demo:\n\n", eng.GetVersion()) inStr := `我的邮件是abcd@abcd.com, 18612341234是我的电话 你家住在哪里啊? 我家住在北京市海淀区北三环西路43号, mac地址 06-06-06-aa-bb-cc 收件人:张真人 手机号码:13900000000` if outStr, _, err := eng.Deidentify(inStr); err == nil { fmt.Printf("\t1. Deidentify( inStr: %s )\n", inStr) fmt.Printf("\toutStr: %s\n", outStr) //eng.ShowResults(results) fmt.Println() } eng.Close() } else { fmt.Println("[dlp] NewEngine error: ", err.Error()) } } func main() { dlpDemo() }

第三步,编译运行,会获得如下效果。

% go run main.go DLP v1.2.15 Demo: 1. Deidentify( inStr: 我的邮件是abcd@abcd.com, 18612341234是我的电话 你家住在哪里啊? 我家住在北京市海淀区北三环西路43号, mac地址 06-06-06-aa-bb-cc 收件人:张真人 手机号码:13900000000 ) outStr: 我的邮件是a***@********, 186******34是我的电话 你家住在哪里啊? 我家住在北京市海淀区北三环西路**号淀区北三环西路**号, mac地址 06-06-06-**-**-** 收件人:张****** 手机号码:139******00

后续计划

GoDLP 会长期维护更新,欢迎各位同行一起沟通交流。

感谢与交流

GoDLP 项目从立项开始,一路走来,离不开其中辛苦付出的开发同学们,这里向为 GoDLP 写下代码的字节跳动内部同学,致以最诚挚的感谢。

欢迎大家通过 GitHub 或飞书扫码加入字节官方 GoDLP 交流群,进行后续的交流和反馈。

数据安全的边界在哪里(字节安全团队自研敏感信息保护方案)(4)

第四期字节跳动技术沙龙

聚焦《字节云数据库架构设计与实战》

正在火热报名中!

4 位字节工程师倾情分享

3 小时 技术盛宴“码”力全开

扫描下方二维码免费报名

数据安全的边界在哪里(字节安全团队自研敏感信息保护方案)(5)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页