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
}

各有各的好处。

https://coolshell.cn/articles/21003.html

原文地址:https://www.cnblogs.com/CherryTab/p/13246307.html