2 设计基础
2.1 动态密码
通常的身份认证技术是利用密码及签名技术实现的。动态密码就是将原先静态的密码变成动态的,即密码时刻以一定的规则进行变化。目前网络银行普遍采取的密码卡就是动态密码的一种。认证时,用户根据提示,比如,第N行,第M个数字,输入密码卡上的数字。每次认证时,服务器给出的提示都是不同的,所以即便有人盗窃其中一次的密码,由于密码的变动性,仍然无法登录账户。
2.2 输入与密码信息分离
密码学在现代信息社会具有特殊的重要性。大多数密码系统要求用户输入全部的密码,而其密码的输入系统都准确无误地表达用户密码信息。这使得木马或黑客可以轻而易举地盗取用户的所有密码信息。密码卡的出现,在某种意义上实现了用户部分输入密码信息,使得用户输入与密码信息分离。
而传统密码盗窃是因为用户每次登录的准确表达输入密码信号为黑客和木马提供机会,一个记录输入和发送便可以产生一个木马。如果能够把用户的输入与密码信息分离,这样就大大增强了密码体系的安全性。这种从物理层面的分离是任何黑客或木马不可超越的。
2.3 人工识别
由于用户每次登陆使用密码时,都是自动手动操作,因此利用人工识别判断图片,几乎无需增加任何成本。但对于盗号者而言,一旦盗取需要人工识别,与之前的机器直接盗取,这将极大增加难度和成本。
3 设计过程
3.1 方案流程
利用动态密码,输入与密码信息分离,以及人工识别技术,给出一种安全有效的密码认证方案,其流程图如图l所示。
3.2 密码生成函数
首先根据用户名u,从数据库中调出用户名u相对应的全码Acode=(a1 a2 a3 a4 a5 a6)并从全码中随机抽出1~4个字符。这里以3个字符为例,再从全码字符之外随机抽出4~7个字符,作为干扰码。共从两个码中抽出8个字符,所以这里取5个干扰码Dcode=(dm1 dm2 dm3 dm4 dm5)。
从全码Acode中抽出3个字符,与干扰码中的字符一起随机排列,加上提示码1到8,组成示码:
其中,全码字符对应的提示码为随机口令Lcode=[2 5 8]。
将示码图像化,形成示码图片。服务器接收用户登录信息后,使用密码生成函数F=f(u),调出用户名DQ对应的全码whu029,在其中随机抽出3个字符w02,在whu029之外任意选择5个字符mlove作为干扰码。w02和干扰码mlove一起随机排列v12ewmoo,再加上提示码12345678形成示码。
其中,2w0所对应的(3 5 7)为此次的随机口令。
服务器形成并传递示码Seode图片。用户看到其中的2w0是自己设置的全码中的字符,就输入对应的357此时即登录成功。倘若输入错误或者超时服务器记录非法尝试一次,记录超过三次就启动保护措施。