如题,需求是有一客户端业务,希望进行一个加密,防止低成本破解。目前想法是服务端生成秘钥,每次客户端读取数据就重新获取一次 token 。
问题是,希望能在加密的同时保证一定程度的关系型数据库的能力,比如获取主键范围 10-100 的 90 行数据,不用进行整个数据库的加密和解密。
数据量不是很大,大概十万行以内,每行几十列。有合适的加密算法适合逐行加密吗,可以做到不给客户端太大的卡顿?
1
kxjhlele 2021-06-25 06:07:57 +08:00 via Android
用程序加密数据在插入数据库不就好了,
|
2
LeeReamond OP @kxjhlele 每行都需要加密解密,需要一个时间和空间复杂度都合适的算法
|
3
kxjhlele 2021-06-25 07:34:49 +08:00 via Android
支持 avx 加速的,随便哪个都足够你用了,才 10 万行,几十列,us 秒级别的
|
4
LeeReamond OP @kxjhlele 大佬有没有连接指个路。搜 avx 加速+加密算法没有什么有效信息
|
5
min 2021-06-25 10:13:01 +08:00 1
|
6
snoopyhai 2021-06-25 10:17:53 +08:00 via Android
我想知道,这样加密,你不模糊搜索了么?
|
7
3dwelcome 2021-06-25 11:32:06 +08:00
客户端加什么密哦。
因为在客户端加密,然后客户端解密,安全性都是自我安慰。远不如服务器对数据加密,客户端解密来的安全。 |
8
LeeReamond OP @3dwelcome 是服务端加密,只不过解密既然放到前端总是有办法解的,成本问题
|
9
3dwelcome 2021-06-25 11:42:45 +08:00
@LeeReamond 有服务器就比较好办。
如果是我的话,加密时,服务器提供按照 TableName + RowID 组合生成对应每条记录的密钥 API,并对数据库内容进行加密。 前端解密时,通过访问服务器 API 获取单条数据的解密密钥。这样就没办法直接拖库了。 |
10
3dwelcome 2021-06-25 11:48:40 +08:00
至于具体的算法,都写在 TLS 规范里的。
个人推荐 google 的 ChaCha20,因为足够简单,JS 可实现。 当然有条件调用 CPU 硬件加速,AES 应该是首选。 |