请教接口 signature 的问题

2019-07-16 11:27:25 +08:00
 GGGG430

参考了市面上很多接口 signature 参数生成方式, 基本都是选择某几个参数拼接上实现约定好的一个 key, 最后 md5 生成 signature.

这种方式我觉得在大数据(彩虹字典之类)下, 对方事先将所有字符串(长度低于一个阀值, 毕竟我们接口这里也不可能用很长的字符串)都生成一遍 md5,很容易破解.

各位大佬有觉得比较好的办法吗

2580 次点击
所在节点    问与答
41 条回复
CoX
2019-07-16 11:32:13 +08:00
参数里加个类似时间戳的随机数,稍微增加点难度
wangsongyan
2019-07-16 11:36:40 +08:00
上公私钥
leo108
2019-07-16 11:40:22 +08:00
楼主知道 36 的 100 次方是多大的数吗?
hellomimi
2019-07-16 11:41:58 +08:00
阀值:阈值
GGGG430
2019-07-16 11:48:05 +08:00
@leo108 首先,我们用的 32 位 md5,其次,类似彩虹字典,大数据暴力破解这些,你知道吗?
silverbooker
2019-07-16 11:49:54 +08:00
简单的办法,可以先对其中的某个参数先进行一次 md5,再拼接,再整体 md5。
leo108
2019-07-16 11:52:03 +08:00
@GGGG430 这里的 100 指的是被签名参数的长度,100 已经是非常保守的数字的
GGGG430
2019-07-16 11:53:27 +08:00
@silverbooker 多层 md5 我在以前的一个 webshell 中见过,意义不大,黑客无非多破解一层即可
xingyue
2019-07-16 11:54:54 +08:00
md5(md5(key+md5(key)))
GGGG430
2019-07-16 12:00:12 +08:00
@leo108 signature 的长度无非就是付出与收获的正比,当某个接口的数据足够重要,再长的长度也就没有了意义
lshero
2019-07-16 12:02:58 +08:00
彩虹表都是针对于常见密码制作的,urlencode 后请求参数这些光&符号和=号就已经不符合一堆彩虹表的制作习惯了。

一般 md5 前会约定秘钥(salt) 才是决定接口是否安全的因素之一,一般的 salt 可能是约定好的字符串也肯能是请求头中的某个参数
客户端和服务端会约定参数中加入时间戳,超过一定时间窗口的请求会被服务端丢弃的。
而且有些接口会让你添加一些随机字符串防止相同参数相同请求生成的签名重复

接口使用签名保护接口核心就是需要保护秘钥不泄露,其次才是考虑如请求重放服务端是否需要考虑幂等性之类的至于彩虹表压根不会在考虑范围
leo108
2019-07-16 12:09:43 +08:00
@GGGG430 建议先学一下初中数学,基本的 log 运算什么的,然后搜索一下『宇宙有多少原子』
GGGG430
2019-07-16 12:12:10 +08:00
@leo108 求你别再这里说了, 很讨厌你这种杠精, 题主是来寻求帮助的, 不是来听你杠的
micean
2019-07-16 12:14:06 +08:00
什么价值的服务值得去破解 md5 ?
summerwar
2019-07-16 12:14:14 +08:00
参数到一定程度的时候,预先算出的彩虹表请问用什么来装?全球的硬盘都不够用,谁会无聊存那么多彩虹表,你怕是对彩虹表有什么误解吧
GGGG430
2019-07-16 12:15:37 +08:00
@summerwar 需要考虑实际情况, 毕竟真实情况下客户端也不会使用超过一定长度的密钥的
geelaw
2019-07-16 12:20:01 +08:00
恍惚间以为自己活在上个世纪。

2004 年开始,MD5 已经不能用于任何需要安全性的应用密码方案。

另外楼主语焉不详,请详细描述你需要的安全措施具有的语法、正确性和安全性,然后搜索业界成熟的解决方案。
MiffyLiye
2019-07-16 12:25:41 +08:00
加 timestamp,用 sha256

const signature = crypto.createHmac('sha256', signingKey).update(timestamp + parameters).digest('hex')
GGGG430
2019-07-16 12:28:36 +08:00
@geelaw
@MiffyLiye
实际场景就是前后端接口的安全问题上, 是否能有一个前后端均能处理的算法, 且具有足够安全性(难以破解)的途径
aWangami
2019-07-16 12:32:04 +08:00
@GGGG430 别人给你正常的建议你怎么一条都没回呢?加个时间戳就解决了大部分问题,复杂一点上公私钥。还有,没有人会用彩虹表去破解你的签名的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/583359

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX