justplaymore
2023-11-09 10:49:38 +08:00
nonce 是用来保证明文的不可预测性。
当明文非常容易预测时:
举例:
请求 1 明文 money=10 ,签名 abc 。
请求 2 明文 money=10 ,签名 abc 。
请求 3 明文 money=10 ,签名 abc 。
这 3 个请求的明文是相同的,非常好预测,没有随机性,那么攻击者收集足够多的请求样本后,就知道明文和密文的直接对应关系了,就可以得到一个明文和密文的字典了,类比彩虹表。
当在明文中加上了 nonce ,保证不可预测性
举例:
请求 1 明文 money=10&nonce=q1w2e3r4 签名 1234
请求 2 明文 money=10&nonce=5t4r3e2w1 签名 4567
请求 3 明文 money=10&nonce=5t6y7u8i9 签名 6787
虽然这 3 个请求中都是 10 元,但是明文不同,导致签名也不同,攻击者无法通过收集的样本,分析出明文 10 元和签名的关系。
我是从不可预测性来解释 nonce 的作用,和具体的技术实现没有关系,和前端还是后端实现没有关系。