Telegram如何防止重放攻击的Nonce
5 个回答
Telegram的防重放攻击机制:一次性令牌(auth_key)+消息序列号(msg_id)+时间戳,服务器在验证请求时会检查这三个参数是否重复,重复则拒绝请求。网站登录后会生成临时身份密钥,每次操作都要带上这个密钥和唯一的递增编号,就像发快递要签收回执单一样,老的单号就不能再用。整个过程就像是银行取款要刷身份证+输密码+验证码一样。
每次请求附带一个一次性验证码(nonce),服务器端检查是否重复使用。也就是用完即焚,用过一次就不能再用了。
Telegram防重放:一次性验证码(nonce):客户端请求带上随机数,服务端记录已使用nonce,拒绝重复nonce。类似验证码,只用一次。
Telegram防重放攻击:一次性令牌(nonce)+时间戳+签名。每次请求带上随机数,服务器验证是否重复、是否过时、签名是否匹配。三者有一不符就拦截。
就是:每次操作都生成“编号+时效+加密”校验的“一次性验证码”,服务器严格校对三者。就像外卖的取餐码一样,用过即失效,不怕被冒用。
比如:发送消息必须带上这个“验证码”套件,服务端发现验证码已经使用过/过期/签名错误,直接拒绝这条请求。这样攻击者就不能使用历史请求包了。
Telegram防重放攻击主要依靠一次性nonce+时间戳。
客户端每次请求时,会携带上服务器返回的随机数nonce和当前时间戳,服务端在处理请求时会先校验该nonce是否使用过,并且当前时间戳是否在允许的范围(比如5分钟)。如果nonce使用过或者时间戳过期,就丢弃该请求。
这样即使黑客截获了请求包,也无法重复发送请求。nonce只能使用一次,时间戳也必须新鲜。整个过程和验证码一样用后即废。