一套适用用App的自动登录协议
- - A programmer's life很多App都是在启动的时候就自动给用户注册一个账号,先用着,稍后再绑定邮箱和密码. 因此,我在前人的基础上设计了这样一套协议. 客户端用不对称密钥算法(如RSA、ECDSA)生一对密钥,然后把公钥发给服务器,服务器把公钥插入到数据库中,返回一个新生成的userid. 服务器发给客户端一个32位随机数r1.
很多App都是在启动的时候就自动给用户注册一个账号,先用着,稍后再绑定邮箱和密码。因此,我在前人的基础上设计了这样一套协议
注册:
客户端用不对称密钥算法(如RSA、ECDSA)生一对密钥,然后把公钥发给服务器,服务器把公钥插入到数据库中,返回一个新生成的userid
登录:
1. 服务器发给客户端一个32位随机数r1
2. 客户端自己再生成一个32位随机数r2,然后把r1,r2,userid用memcpy的方式合起来,用私钥计算出一个签名s1,然后把r1,r2,userid,s1发给服务器。
3. 服务器收到答复后,先看那个随机数r1是不是刚才它发给客户端的。然后根据userid从数据库里面查出客户端的公钥,用它验证数字签名是有效的。
4. (可选) 在完成前三步后,服务器把r2,r1用memcpy的方式合起来,用私钥计算出一个签名s2,然后把s2发给客户端。客户端收到后用服务器的公钥验证下签名,这样它就相信这个服务器不是假冒的。这要求服务器的公钥证书要实现内置在客户端中。
以上注册和登录的过程都可放在后台,不需要用户交互。不对称加密算法推荐使用ECDSA,比如ECDSA-128,因为它的公钥很短,计算很快。
但是,其实,生随机数很耗费CPU的。我在想怎样修改它让它能更好的避免DDOS攻击。
This article is from: https://www.sunchangming.com/blog/post/4624.html