场景:
需求:
目前遇到的问题:
不同语言的加密算法能否通用?
目前的设想:
但是可能存在问题 1 (不同编程语言加密算法是否通用?),还有就是该怎么设计这个 api 才能满足系统中各类程序的需求 因为导师又想监控管理所有的请求(做访问控制),只能来一个新的需求就再新增一个 api ?(先不管性能,就是一个辣鸡项目,只是想快捷做完应付老师)
1 、被广泛认可的加密算法在不同语言都有实现,是通用的,只是某些默认值会不一样,别用默认值就行。
2 、MySQL InnoDB 支持表空间加密,采用 AES,需要安装插件,是自动的,用户提供 master key 去加解密 tablespace key 就可以,不用改其他代码。这是无感知的,只是防拖库。
3 、允不允许用户提交 SQL 自定义查询这个见仁见智吧,这在 V2EX 也差不多是月经问题了,有支持的,有反对的。反正我不会允许,顶多包装几个查询参数丰富的接口。
用户加密,不怕性能问题就用非对称加密,方便甩锅。让用户把公钥提交过来加入白名单,用它加密返回结果。
感觉你只需要在数据库或者后端服务搞 ACL 访问控制啊。数据库提供两个账户给后端服务用,其中一个可以访问敏感数据。
如果你这里的两个系统都是受信任环境下的(就是外人获取不到程序,运行在自己控制的服务器上),web 应用自己做 ACL 就行。如果不是(也就是需要直接对外暴露 mysql 端口),那你可能得用 mysql 中间件做复杂的 SQL 过滤了。
后端 per-user 加密--前端 per-user 解密 这个流程很多余,前端始终是获得解密的数据的。如果只是想避免连接窃听的话上 TLS/HTTPS 就行了,
是我的话,就写个中间代理层,你如果修改现在的代码,难免会引入新的 BUG,很麻烦的。
mysql 全局加密 -> 中间层解密 -> java 正常用 api 获取数据 -> 依赖 SSL 安全性把数据给前端 -> 前端用密码来授权访问。
你第四点需求,"可以更换用户的密钥不影响加密数据", 想密钥变,但数据不变,那也只能用权限控制了。
导师的首要需求就是数据库的数据加密,别的都可以忽悠。所谓前端加密,你让导师上 V2 问问,保证一大片都说不靠谱。
我理解,每个算法分析程序应该具备独立于其他算法的密钥,此密钥不依赖于特定用户,且可以解密所有用户的数据。
每个算法分析程序还可以设置自己的加密上下文字符串。这可以一部分保存在程序代码中,另一部分在运行时以环境变量等参数提供。该字符串参与加密。这可以保证仅攻破数据库也不能直接拿到主密钥。