一、介绍
项目建设中数据安全是非常重要的一环,但是大家对于数据安全这个主题可能不够了解,从而在项目的整个生命周期中,产生一些的安全问题。 这里按照个人经验、查阅资料、国家标准等,总结了一些对于数据安全的看法。
二、国家标准
国家针对信息安全,发布了一系列的标准文件,这些标准文件都非常具有参考意义,非常适合在项目过程中作为参考,这里附上网站:openstd.samr.gov.cn/
2.1、 等保
"等保" 是指 "信息安全等级保护",它是我国的一项国家标准,全称为 "信息安全技术 信息系统安全等级保护基准",编号为 GB/T 22239-2008。这项标准的目标是确保信息系统的安全,防止信息系统受到威胁,包括来自计算机病毒、黑客攻击、数据窃取等的威胁。
该标准目前已经废止,但是在业内认可度依旧很高,很多项目都需要进行二级或者三级等保。
等级保护分为五个级别,一级最低,五级最高。每个级别都有相应的保护措施,包括技术措施和管理措施。等级越高,所需的保护措施就越严格。
-
一级保护:面向的是一般的信息系统,要求实施最基本的安全保护措施,防止非法信息泄露和非法操作。
-
二级保护:面向的是大多数信息系统,要求实施一定的安全保护措施,防止有技术能力的威胁主体通过网络对信息系统进行攻击。
-
三级保护:面向的是关乎国家安全、社会秩序、公共利益等的信息系统,要求实施严格的安全保护措施,防止有较高技术能力的威胁主体通过网络和物理手段对信息系统进行攻击。
-
四级保护:面向的是关乎国家安全、社会秩序、公共利益,且需要实施特别严格保护的信息系统,要求防止有极高技术能力的威胁主体通过网络和物理手段对信息系统进行攻击。
-
五级保护:面向的是国家秘密信息系统,要求实施最严格的安全保护措施,防止任何形式的攻击。
2.2、 国密算法
国密算法是我国国家密码管理局发布的一套密码算法标准,包括SM1、SM2、SM3、SM4、SM9等。这些算法主要用于信息安全领域,包括数据加密、数字签名、消息认证等。
在国产化大趋势的背景下,在项目中使用国密算法进行加解密是非常加分的, 在一些特殊行业,可能会强制要求使用国密算法,禁止使用国外的AES、RSA、MD5等加密算法。
部分国密算法标准文件
- GB/T 35276-2017:《信息安全技术 SM2密码算法使用规范》
- GB/T 32905-2016:《信息安全技术 SM3密码杂凑算法》
- GB/T 32907-2016:《信息安全技术 SM4分组密码算法》
- GB/T 41389-2022:《信息安全技术 SM9密码算法使用规范》
三、国际标准
3.1、GDPR
《通用数据保护条例》(General Data Protection Regulation,简称GDPR)为欧洲联盟的条例,前身是欧盟在1995年制定的《计算机数据保护法》。
该条例对隐私数据的界定、使用、保护、安全都制定了规则,如果涉及境外项目,需要严格遵守该标准。
四、具体措施
针对项目实施的过程中的数据安全设计,这里提供了一些思路参考。
4.1、 存储加密
数据加密可以说是项目中最常用的数据安全保护的手段了 ,其主要分为:对称加密、非对称加密、摘要加密等集中非常常用的加密手段。 当然除了这些开源的加密方式,一些商业公司还会提供一些在项目中认可度更高的加密方式,如:量子加密等。
4.1.1、 数据加密存储
在项目中应该对一些敏感数据进行加密存储,避免明文存储导致的数据泄露,而产生严重后果。 这里我们最常用的手段就是:对称加密,常用的对称加密有:AES(国际)、SM4(国密)。
4.1.2、 图片加密存储
文件加密在项目实施中非常容易被忽略,一般的项目对于数据的安全要求比较高,一般对文件的加密要求会低很多。
4.1.2.1、 元数据
可以通过在图片存储的过程中中设置元数据的方式,来追踪图片的来源和使用情况,比如可以在图片的元数据中增加版权信息。
但是这种方式增加的元数据是可以被修改处理的,不过也算是一种比较简单的保护方式。
这里可以使用apache的开源组件来处理元数据
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-imaging</artifactId>
<version>1.0.0-alpha5</version>
</dependency>
4.1.2.2、 水印
在图像的使用过程中,可以通过增加水印的方式来对图像进行保护,避免图像文件被泄露之后被肆意传播。
图像水印技术包括:可见水印和不可见水印
- 可见水印:这是最常见的类型,通常是半透明的文字或图像,覆盖在原始图片上。它的目的是在不干扰原始图像的前提下,向查看者显示图片的所有权信息。这种水印可以防止未经授权的使用,因为它明确地标记了图片的来源。
- 不可见水印:也被称为数字水印,它通常是一种嵌入到图像中的信息,只能通过特定的算法或工具才能检测到。这种水印的优点是它对图片的视觉效果没有影响,同时可以提供更强的保护。因为即使图片被修改或压缩,数字水印通常也能保持不变。
这两个方式可以混合使用、也可以单独使用某一种,具体看使用场景的需求,可见水印可以通过:java.awt.Graphics2D或者hutool等工具类实现
4.1.2.3、 图像加密
图像的存储方式有很多种,比如:FTP,分布式对象存储,Base64等,现在主流的方案可能是使用分布式对象存储,分布式存储产品本身就提供了图像的保护技术,这里针对Base64这种存储方式,可以使用图像加密,将图片转化为Base64的格式之后再使用数据加密方式进行加密存储。
4.1.2.4、 许可证和版权声明
这种方式方式不需要从技术层面进行保护,单却是一种更直接的保护方式,使用法律的方式来对图像进行保护。
4.2、 传输加密
除了数据存储需要进行安全性保护外,在数据的传输过程中我们也应该对数据进行加密或者脱敏传输。
4.2.1、 数据加密
这里的传输加密针对的是客户端向服务端传输。数据传输过程中的加密是非常重要的,避免被抓包软件抓取用户提交的数据。 传输加密可以采用,非对称加密的方式进行保护,公钥加密,私钥解密。常见的非对称加密方式:RSA(国际)、SM2(国密)。
4.2.2、 数据脱敏
当服务端往客户端返回数据的时候,因为这些数据都是需要在客户端展示的,所以这里做数据加密没有意义,不过针对一些敏感数据可以采用数据脱敏的方式,避免隐私数据在互联网中传输。 这里可以自己通过代码实现,也可以借助一些开源组件避免重复造轮子,比如:hutool。
4.3、 访问控制
访问控制需要确保只有授权的用户才能获取到,这里包括:户权限管理、密码策略和身份验证机制等,这项非常常见,绝大部分系统都会有登录、鉴权、权限控制这些东西,开源的组件可以说非常多了,包括:shiro、springsecurity等,还有一些国内开源的组件都可以使用。
4.4、 审计日志
审计日志用于记录和分析用户的活动行为,可以检测和防止恶意行为,以及确定数据是否已被不当地访问或修改,审计日志应该设计权限控制,只有审计人员有权限进行访问。当系统数据遭到泄露时,可以通过排查审计日志来对泄露源进行追踪。
4.5、 数据备份
数据备份考虑的不再是数据泄露的风险,而是数据丢失的风险,不过我们现在使用的一些数据库组件,对象存储组件都具备容灾能力,比如:mysql可以采用主备的方式,一些分布式的数据库本身都会将数据在各个节点间备份。
4.6、 数据销毁
这部分其实在大部分项目中很少涉及,因为项目中的数据都是属于客户的数据资产,轻易是不会销毁或者删除的,单如果真的有这种特殊的情况出现,我们需要保证数据被删除之后无法被恢复。这里最常用的方式就是数据擦除,这里将敏感数据反复进行加密再写入数据库,以此来增加数据的恢复难度,甚至是无法恢复。
六、安全性测试
安全性测试可以为系统的安全性兜底,避免一些细节方面的安全性问题,常见的安全扫描软件:OWASP ZAP (开源)、AppScan(商用)、OpenVAS (开源),这些软件可以按照需要使用。
七、总结
项目中的数据安全是整个项目生命周期中最为重要的一环,不论是从项目建设初期,还是项目运维期间,都是需要持续关注的问题,上面总结了一些本人在项目过程中以及查阅相关资料了解到的数据安全相关的知识。
上述的这些内容,作为研发人员在系统设计时,可以预先考虑到一些安全问题,提前规避,项目人员在数据一些材料时也可以作为参考,输出一些更具依据和说服力的材料。