SCRAM认证机制
简介 SCRAM是一套包含服务器和客户端双向确认的用户认证体系,配合信道加密可以比较好的抵御中间人、拖库、伪造等攻击。 SCRAM是密码学中的一种认证机制,全称Salted Challenge Response Authentication Mechanism(加盐挑战响应验证机制)。它适用于使用基于“用户名:密码”这种简单认证模型的连接协议。SCRAM是一个抽象的机制,在其设计中需要用到一个哈希函数,这个哈希函数是客户端和服务端协商好的,包含在具体的机制名称中。比如SCRAM-SHA1,使用SHA1作为其哈希函数。 SCRAM是一套包含服务器和客户端双向确认的用户认证体系,配合信道加密可以比较好的抵御中间人、拖库、伪造等攻击。 相关字段 定义: Hash(content)指安全Hash函数,如SHA256。 HMAC()指使用Hash(content)作为基础实现的HMAC函数,如HMAC(SHA256,Key,Content)。 UserIdentify:仅用于登录签名的用户身份标识字符串,每次登录时可根据业务任意选用用户名、手机号、邮箱、三方ID等,下次登录可以选另一种,仅作为本次通讯的标识之一使用。 Password = Hash(明文密码) Salt:随机生成的盐。 Iteration:加盐计算时的迭代次数。 SaltedPassword = pbkdf2(Password, Salt, Iteration),已加盐的密码。 ClientNonce:客户端在Step1时随机生成的字符串,用于对本次交互签名。 ServerNonce:服务器在Step1时随机生成的字符串,用于对本次交互签名。 MixNonce = ClientNonce | ServerNonce,ClientNonce和ServerNonce的_按位或_结果。 ServerPub:用于服务器签名的公钥,不用保密,但也别改。 ClientPub:用于客户端签名的公钥,不用保密,但也别改。 ServerSignedPassword = HMAC(ServerPub, SaltedPassword) ClientSignedPassword = HMAC(ClientPub, SaltedPassword) HashedClientSignedPassword = Hash(ClientSignedPassword) Auth = UserIdentify + ClientNonce + Salt + MixNonce + MixNonce,直接连接即可,用于构造本次通讯上下文的签名。 SignedAuth = HMAC(Auth, HashedClientSignedPassword) ServerProof = HMAC(ClientSignedPassword, Auth),服务器给客户端的_身份证明_。 ClientProof = ClientSignedPassword XOR SignedAuth,客户端给服务器的_身份证明_。 工作流程 Client-Step1 客户端发送UserIdentify、ClientNonce给服务器端。...