• [转] 用SRP6协议实现游戏登录流程


    原链接http://blog.csdn.net/Jason_Bourn/archive/2009/04/19/4092067.aspx

     用SRP6协议实现游戏登录流程

     

           大家都知道,在网络游戏开发中,客户端登录是服务器端程序设计最重要的一环,在这个环节,要考虑的最主要的是玩家账号的安全问题.在当下网络环境中,黑客,网络监听软件横行,因此我们必须要有一种安全机制来确保用户的帐号不被他人盗取.身份验证方法有很多种,在我们公司的游戏开发中,采用的是SRP6协议.

     

          SRP协议是由斯坦福大学计算机科学系的Thomas wu等开发的,英文全称是Security Remote Password(安全远程密码),经过严密的数学论证,SRP6被证明是一种非常安全的算法,我们可以在这里获取到SRP的协议的官方文档http://srp.stanford.edu/ndss.html.在当下流行的网络游戏中,魔兽世界采用的就是SRP协议.

    SRP协议的机制和验证流程如下:

    (1)协议中用到的符号表示的含义如下:

    N     N = 2q + 1 , q 是一个素数,下面所有的取模运算都和这个 N 有关

    g     一个 N 的模数,应该是 2 个巨大的素数乘得来

    k     k = H(N,G) 在 SRP6 中 k = 3

    s      User’s Salt

    I      用户名

    p     明文密码

    H()  单向 hash 函数

    ^      求幂运算

    u     随机数

    a,b   保密的临时数字

    A,B  公开的临时数字

    x     私有密匙(从 p 和 s 计算得来)

    v     密码验证数字

    其中 x  =  H(s,p) 和 v = g ^ x , s 是随机选择的, v 用来将来验证密码。

    (2)验证流程:

             客户端                                                                    服务器

                                               帐号--------->             从数据库中取出帐号对应的密码P,随机生成N,g,s,利用公

                                                                               式v=g^x生成密码验证数字v

         收到s后计算x=H(s,P)       <-------------N,g,s

        随机生成a,计算A=g^a        A------------>            收到A后,随机生成b,计算B=v + g^b,生成u=H(A+B)

              计算u=H(A+B)            <------------B             发送B给客户端

        S = (B - g^x)^(a + ux)                                          S = (A · v^u)^b

              K = H(S)                                                              K = H(S)

         M[1] = H(A, B, K)           M[1]-------->               收到M[1]之后,验证与服务器计算出的M[1]是否相同

                                                                                 相同则计算M[2],不同则发送密码错误给客户端

                                              <----------M[2]                        M[2] = H(A, M[1], K)

         验证M[2]

     

    以上所有的运算都是以N求余,我在上边省略了,但是在具体实现时一定不要忘了.

    SRP6的原理基本上就是上边所说的.

     

  • 相关阅读:
    git使用总结
    [置顶] 生成学习算法、高斯判别分析、朴素贝叶斯、Laplace平滑——斯坦福ML公开课笔记5
    Java调用cmd压缩文件
    Linux下精确控制时间的函数
    ZTESoft 持续集成 编年史 之 持续集成探索---平台选择
    graylog2+syslog-ng+mongodb构建集中管理日志服务器 --转载
    Active Object 并发模式在 Java 中的应用--转载
    分布式计算的模式语言读后感--基线架构
    Spring 中JCA CCI分析--转载
    Getting started with Apache Camel--转载
  • 原文地址:https://www.cnblogs.com/freebird92/p/1901152.html
Copyright © 2020-2023  润新知