Timing attck
从耗子叔那看到了篇讲这个的,说实话还是第一次接触这个,当然不细究如何进行这种攻击,大概就是根据大量的时间差来试出密码等信息
// Constant time for same length String comparison, to prevent timing attacks
func safeEqual(a, b string) bool {
if len(a) != len(b) {
return false
}
var equal uint8
for i := 0; i < len(a); i++ {
equal |= a[i]^b[i]
}
return equal == 0
}
这里就是用一个异或,如果没有timing attack的前提,这似乎并不高效,因为只要长度一致,即使第一个字符不相等也要跑完整个字符串,所以对于安全性不是很高且对性能要求较高的场景不建议使用。
正常的思路
func unsafeEqual(a, b string) bool {
if len(a) != len(b) {
return false
}
for i := 0; i < len(a); i++ {
if a[i] != b[i] {
return false
}
}
return true
}
各有各的好处。
一个没有高级趣味的人。
email:hushui502@gmail.com