10

求大佬们给一个加密存储的思路

 3 years ago
source link: https://www.v2ex.com/t/779688
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

求大佬们给一个加密存储的思路

  Baymaxyu · 2 小时 20 分钟前 via iPhone · 153 次点击
  • 数据都存在 mysql 中(大概十几个 G );
  • 需要对部分数据加密(导师自认为实验室的敏感数据)
  • 然后存在大量的爬虫采集数据;
  • 现有依赖这个数据库的有:一个 web 系统( php 开发),各种算法分析模块( python/java )开发;
  1. 实现 web 系统中每个用户都有自己的密钥来解密获得数据(就是用户自己输密钥,前端解密);
  2. 每个算法分析程序对加密数据也要用自己的密钥来解;
  3. 对所有需要加密的字段进行加密存储(目前都是明文的);
  4. 可以更换用户的密钥不影响加密数据;

目前遇到的问题:

  1. 不同语言的加密算法能否通用?
  2. 导师是想用一个统一的 api 来实现,让所有对数据库的请求过这个加解密服务(未来还要加上一些访问控制),但是目前的程序 php/java 都是用其自带的 orm 来实现 mysql 操作的(修改工作量很大);
  3. web 系统存在一些十分复杂的 sql 查询,怎么能方便的转化成 api 的形式;

目前的设想:

  1. 使用统一的对称加密密钥( key )加密数据(可能每个表一个密钥),这个密钥用加密服务的一个密钥加密( sys-key )存储;
  2. 程序请求数据的时候要先验证程序身份( username+pwd ),然后用其对应的公钥加密( key,经过 sys-key 解密后),然后和数据一起发回去,由程序根据自己的私钥解密。

但是可能存在问题 1 (不同编程语言加密算法是否通用?),还有就是该怎么设计这个 api 才能满足系统中各类程序的需求 因为导师又想监控管理所有的请求(做访问控制),只能来一个新的需求就再新增一个 api ?(先不管性能,就是一个辣鸡项目,只是想快捷做完应付老师)

3 条回复    2021-05-28 01:29:44 +08:00

eason1874

eason1874   1 小时 31 分钟前

1 、被广泛认可的加密算法在不同语言都有实现,是通用的,只是某些默认值会不一样,别用默认值就行。

2 、MySQL InnoDB 支持表空间加密,采用 AES,需要安装插件,是自动的,用户提供 master key 去加解密 tablespace key 就可以,不用改其他代码。这是无感知的,只是防拖库。

3 、允不允许用户提交 SQL 自定义查询这个见仁见智吧,这在 V2EX 也差不多是月经问题了,有支持的,有反对的。反正我不会允许,顶多包装几个查询参数丰富的接口。

用户加密,不怕性能问题就用非对称加密,方便甩锅。让用户把公钥提交过来加入白名单,用它加密返回结果。

jim9606

jim9606   1 小时 31 分钟前

感觉你只需要在数据库或者后端服务搞 ACL 访问控制啊。数据库提供两个账户给后端服务用,其中一个可以访问敏感数据。

如果你这里的两个系统都是受信任环境下的(就是外人获取不到程序,运行在自己控制的服务器上),web 应用自己做 ACL 就行。如果不是(也就是需要直接对外暴露 mysql 端口),那你可能得用 mysql 中间件做复杂的 SQL 过滤了。

后端 per-user 加密--前端 per-user 解密 这个流程很多余,前端始终是获得解密的数据的。如果只是想避免连接窃听的话上 TLS/HTTPS 就行了,

3dwelcome

3dwelcome   1 小时 30 分钟前

是我的话,就写个中间代理层,你如果修改现在的代码,难免会引入新的 BUG,很麻烦的。

mysql 全局加密 -> 中间层解密 -> java 正常用 api 获取数据 -> 依赖 SSL 安全性把数据给前端 -> 前端用密码来授权访问。

你第四点需求,"可以更换用户的密钥不影响加密数据", 想密钥变,但数据不变,那也只能用权限控制了。

导师的首要需求就是数据库的数据加密,别的都可以忽悠。所谓前端加密,你让导师上 V2 问问,保证一大片都说不靠谱。

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK