一口令系统
1.身份鉴别常见手段
知道什么:口令
拥有什么:汽车钥匙or加密狗
唯一特征:指纹or虹膜
2.多因子认证
多因子认证是指在进行身份验证时,需要提供两个或以上的验证因素,以提高系统的安全性和防范恶意攻击。这些因素可以是以下几种类型之一:
知道的事情:例如用户名+密码。
拥有的物品:例如手机验证码和校园卡刷卡。
生理特征:例如人脸识别Q
2.计时攻击
计时攻击(Timingattack)是一种利用计算机程序执行时间的差异,推断出密钥或其他敏感信息的攻击方式。该攻击方式主要利用了程序中某些部分的执行时间和输入数据的关系,通过多次尝试不同的输入数据,对比它们的执行时间来推断出正确的数据或密钥。
这是一个程序比较输入密码和正确密码的程序
示例:
def compare_password(correct_password, user_password): # 密码长度是否一致 if len(correct_password) != len(user_password): return False # 逐个字符比较密码是否一致 for i in range(len(user_password)): if correct_password[i] != user_password[i]: return False return True
3.攻击示例
可以看出,攻击者可以利用程序中比较密码长度是否一致的代码段,推断正确密码的长度。以下是一个模拟计时攻击的示例代码:
correct_password = "xxxxxxxx" # 8个x # 暴力破解密码,统计每个长度可能的密码尝试所耗费的时间 for i in range(1, 256): user_password = "a" * i start_time = time.time() compare_password(correct_password, user_password) end_time = time.time() print("测试密码长度 ", i, " 所耗费时间: ", end_time - start_time)
依次尝试所有可能长度的密码,然后统计每个长度可能的密码尝试所花费的时间。攻击者可以根据运行时间来推断正确的密码长度,从而缩小猜测范围。
4.攻击防御
如果需要防御计时攻击也是不难的,我们可以前后加上time.sleep(random.uniform(0,0.1)),就可以让攻击者无所适从
def compare_password(correct_password: str, user_password: str) -> bool: # 随机时间*2 time.sleep(random.uniform(0, 0.1)) time.sleep(random.uniform(0, 0.1)) # 比较长度 if len(correct_password) != len(user_password): return False # 随机时间*3 time.sleep(random.uniform(0, 0.1)) time.sleep(random.uniform(0, 0.1)) time.sleep(random.uniform(0, 0.1)) for a, b in zip(correct_password, user_password): if ord(a) ^ ord(b) != 0: return False return True