2. 基础概念:对称加密、非对称加密、哈希函数及其在数据库中的应用

这一章我们来聊聊最基础的三样东西:对称加密、非对称加密、哈希函数。说实话,很多人在讲数据库安全时容易跳过这些底层工具,直接去谈策略。但我个人的经验是——不把这些概念嚼透了,后面密钥边界模型根本搭不起来。

2.1 对称加密:又快又简单,但有个硬伤

对称加密,说白了就是加密和解密用同一把钥匙。我刚开始做数据库加密时,第一个想到的也是它——性能好,实现简单。

常见的算法包括:

  • AES(Advanced Encryption Standard)—— 现在用得最多的,密钥长度128/192/256位
  • DES —— 太老了,别用了,我见过有人还在用,被我一顿劝改成了AES
  • SM4 —— 国标,国内项目有时会强制要求

对称加密在数据库里的典型场景:字段级加密。比如客户的身份证号、银行卡号,存入前用AES加密,读取时再解密。

举个例子,MySQL里用AES加密一个字段:

-- 加密
INSERT INTO users (id_card, id_card_enc)
VALUES ('123456', AES_ENCRYPT('123456', 'my_secret_key'));

-- 解密
SELECT AES_DECRYPT(id_card_enc, 'my_secret_key') FROM users;

嗯,这里要注意:密钥如果硬编码在代码里,或者存在配置文件中,等于没加密。我在一个项目里就见过直接把密钥写在SQL脚本里的…… 当时我后背一阵凉。

对称加密的硬伤:密钥分发问题。你和对方怎么安全地共享这把钥匙?如果在网络上明文传,那还不如不加密。这也是为什么后面会引入非对称加密,专门解决这个问题。

2.2 非对称加密:公私钥一对,安全分发

非对称加密有一对密钥:公钥加密,私钥解密。公钥可以随便给别人,私钥自己藏好。

常用算法:

  • RSA —— 经典,但密钥长度2048位起,速度慢
  • ECC(椭圆曲线) —— 同样安全强度下密钥更短,性能更好
  • SM2 —— 国标椭圆曲线算法

但别忘了,非对称加密在数据库里很少直接用来加密大量数据。为什么?因为太慢了。你想想看,每个字段都拿RSA去算一遍,查询响应时间马上爆炸。

我记得一个真实场景:我们当时需要给一批敏感文件加密,业务方坚持用RSA直接加密每个文件。我测了一下,50MB文件加密耗时超过30秒…… 后来改成了混合方案:用AES加密文件,用RSA加密AES密钥。这才是业界标准做法。

数据库中的混合用法:用非对称加密保护对称密钥,对称加密保护实际数据。这其实就是密钥边界模型里“密钥分层”的雏形。

2.3 哈希函数:单向的,不能解密

哈希函数跟加密不一样,它是单向的。你输入任意长度的数据,它给你输出固定长度的摘要。你不能从摘要反推出原文。

常见的哈希算法:

算法 输出长度(位) 安全性状态 典型用途
MD5 128 已破解,不应使用 无
SHA-1 160 已不建议使用 无
SHA-256 256 目前安全 数据完整性校验、数字签名
SHA-3 可变 安全 新兴标准
SM3 256 国标安全 国内合规项目

哈希在数据库里的应用太广泛了:

  • 密码存储:不能存明文密码,存的是密码的哈希值。而且还得加盐(salt),防止彩虹表攻击。我曾经优化过一个老系统,他们用SHA-256直接哈希密码…… 不加盐。我直接跟他们说,这跟明文没什么区别。
  • 数据完整性校验:比如你存一个大文件,先算哈希存下来。读取时再算一次,一比对就知道有没有被篡改。
  • 去重/索引:把长文本哈希成短值,用来快速判断是否重复,或者做分表路由。

避坑指南:我曾经见过一个团队,用MD5哈希做密码存储,而且还不用盐。结果数据库泄露后,攻击者只用一晚上就把80%的密码还原了。后来我帮他们改成bcrypt(一种慢哈希算法),虽然慢了点,但安全多了。

2.4 三者在数据库安全中的协作关系

搞清楚了每个工具的特点,我们来看看它们怎么配合。下面这一张图,我建议你多看两眼,因为它基本概括了密钥边界模型的核心思想。

数据库加密密钥边界模型基础概念协作图 对称加密 (AES) 加密/解密用同一个密钥 非对称加密 (RSA/ECC) 公钥加密,私钥解密 哈希函数 (SHA-256) 单向不可逆,定长输出 密钥保护 完整性校验 数据库应用层 字段加密 / 密钥管理 / 哈希校验 密钥边界模型中的三剑客 对称加密:承载实际数据加密,性能关键 非对称加密:保护对称密钥,解决分发难题 哈希函数:验证数据完整性,存储密码摘要 三者协同构成密钥边界模型的底层地基

你看这张图,从上到下三层。最上面三个基础工具,各自有擅长的领域。中间汇入数据库应用层,最后组合起来支撑密钥边界模型。

简单总结一下:

  • 对称加密:速度快,适合加密大量数据,但密钥分发是痛点
  • 非对称加密:速度慢,适合加密小数据(比如对称密钥),解决密钥分发
  • 哈希函数:不可逆,适合做完整性校验和密码存储

我的建议:在数据库安全设计时,先把这三个概念刻在脑子里。后续讲密钥边界模型时,你会反复用到它们。比如内存里的密钥用对称加密保护?还是用硬件安全模块?这些问题理解了基础才能回答。