1、usb 内部包含内容
一般的 usbkey,其内部内置了一套加密算法,并提供了对应的开发 sdk,对于用户而言,其内部存储的信息有:
1)usb PIN 码,用于读取 usb 信息;
2)usb 写密码,用于签发者往 usbkey 中写入账号和密码信息;
3)usb encrypt secret ,用于 usbkey 调用加密算法的秘钥;
4)account,签发者写入的账户信息;
5)password,签发者写入的密码信息。
PIN 码和 usbkey 组成双因子认证,任意一个丢失,都无法仿冒用户身份。
2、基于冲击-响应的双因子认证
下面以基于冲击-响应的双因子认证来说明一般软件加密狗的认证方式:
下面阐述一下 server 端校验逻辑:
1.通过账号 id 在数据库中查询对应的 user;
2.bcrypt(随机字符串+salt(数据库中记录的 user 加密密钥)== 随机字符串加盐 hash ?
3.账户密码 == user.password ?
4.sdk加密算法(随机字符串,user 加密密钥) == 随机字符串 usb 加密串?
user 表中存储有:
user_read_secret: usb 的读取 PIN 码
user_write_secret: 签发者对该用户 usb 写密码
user_entrypt_sercret: 用户加密密钥