青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

Wow, Mangos登錄時的SRP6認證

轉載自:http://blog.csdn.net/jq0123/archive/2009/04/10/4062020.aspx

以Mangos代碼為參考, 解析SRP6的原理和實現.
(轉載請注明來源于金慶的專欄)

SRP全稱Secure Remote Password(安全遠程密碼),是一個開源認證協議。

SRP簡化后的原理是:
1. 服務器不保存密碼或密碼的散列值, 防止字典攻擊. 
   而只是保存驗證因子(verifier).
2. 客戶端和服務器可以各自計算出一個會話秘鑰(session key), 其值相同. 防止竊聽.


參考:
Wow 服務器解析 ( http://m.shnenglu.com/Jedimaster/archive/2006/10/14/13674.aspx )
SRP Protocol Design ( http://srp.stanford.edu/design.html )
魔獸世界服務器端編寫參考資料 ( http://www.asstudio.de/wow/wow.htm )
RFC2954中文翻譯 ( http://www.cnpaf.net/rfc/rfc2945.txt )
SRP是什么意思?_百度知道 ( http://zhidao.baidu.com/question/59783252.html )
源碼 mangos/src/realmd/AuthSocket.cpp

== Mangos SRP6認證過程 ==

 

1. 客戶端發送用戶名和版本信息

    struct AUTH_LOGON_CHALLENGE_C
    
{
        uint8   cmd;
        uint8   error;
        uint16  size;
        uint8   gamename[
4];
        uint8   version1;
        uint8   version2;
        uint8   version3;
        uint16  build;
        uint8   platform[
4];
        uint8   os[
4];
        uint8   country[
4];
        uint32  timezone_bias;
        uint32  ip;
        uint8   I_len;
        uint8   I[
1];
    }
;




大部份信息用來決定是否封阻該用戶登錄.
SRP6相關的只有I, 為用戶名. 
SRP6相關的字段都是按協議中的符號定義的.


1.1 _SetVSFields(rI)設置v, s字段

從數據庫中獲取密碼散列值rI(字段名sha_pass_hash), 應該是密碼p, 
x = H(s, p)
v = g^x (密碼學中的計算一般都是在最后對大質數N取模: v = g.ModExp(x, N);)
這個應該是驗證因子v.
然后v, s存入數據庫. x為臨時值, 用后丟棄.

salt值s是在連接時設置的隨機值.

/// Accept the connection and set the s random value for SRP6
void AuthSocket::OnAccept()
{
    s.SetRand(s_BYTE_SIZE 
* 8);
}

s是32字節長, s_BYTE_SIZE = 32.

安全大質數N, 及其生成元g, 是固定的:
    N.SetHexStr("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7");
    g.SetDword(7);

RFC2945:
   For
   maximum security, N should be a safe prime (i.e. a number of the form
   N = 2q + 1, where q is also prime).  Also, g should be a generator
   modulo N (see [SRP] for details), which means that for any X where 0
   < X < N, there exists a value x for which g^x % N == X.

為了最大化安全性,N可以是一個安全的素數
(也就是,一個類似于N=2q + 1形式的數,同時q是個素數)。
而且,g將是一個以N為模的生成元,
意味著,對任何X,有0 < X < N,存在一個值x,使得g^x % N == X。

Mangos保存了密碼p, 是錯誤的. 服務器不應該保存密碼或其散列值.
應該在創建用戶時, 由客戶端取s值, 計算v, 將{I, s, v}傳輸到服務器并保存.
登錄時, 特定用戶的s, v應該是固定的, 從數據庫讀取, 而不是每次登錄時隨機.

1.2 取b值, 計算B

    b.SetRand(19 * 8);
    BigNumber gmod
=g.ModExp(b, N);
    B 
= ((v * 3+ gmod) % N;

b為19字節長的隨機數. 不知為何是19字節長, 不是16或32? 
b是服務器的臨時秘鑰, B為臨時公鑰.
B = kv + g^b
在SRP6中k=3, 而在最新的SRP6a中, k=H(N, g).

1.3 服務端返回 CMD_AUTH_LOGON_CHALLENGE 數據包

返回的數據結構沒有用struct定義, 只是用ByteBuffer依次填入數據.

    ByteBuffer pkt;
    
    pkt 
<< (uint8) AUTH_LOGON_CHALLENGE;
    pkt 
<< (uint8) 0x00;
    pkt 
<< (uint8)REALM_AUTH_SUCCESS;
    pkt.append(B.AsByteArray(
32), 32);   // 32 bytes
    pkt << (uint8)1;
    pkt.append(g.AsByteArray(), 
1);
    pkt 
<< (uint8)32;
    pkt.append(N.AsByteArray(), 
32);
    pkt.append(s.AsByteArray(), s.GetNumBytes());   
// 32 bytes
    pkt.append(unk3.AsByteArray(), 16);
    pkt 
<< (uint8)0;                    // Added in 1.12.x client branch
    
    SendBuf((
char const*)pkt.contents(), pkt.size());



B, g, N, s 是服務器發給客戶端的SRP6參數.
unk3是個16字節長的隨機數, 不知道干什么用的. (unknown3?)

按SRP6的協議, 應該是客戶端先發送自己的用戶名和公鑰(I, A), 但在Mangos中,
是服務器在沒有收到A時就發送鹽值和自己的公鑰(s, B).
這個次序應該無關緊要. 這樣做的原因是服務器要先發送N, g到客戶端, 這樣可少一次消息交互.
客戶端計算公鑰A時要用到N, g: A = g^a (隱含對N取模).

2. 客戶端發送 CMD_AUTH_LOGON_PROOF 數據包請求驗證

    struct AUTH_LOGON_PROOF_C
    
{
        uint8   cmd;
        uint8   A[
32];
        uint8   M1[
20];
        uint8   crc_hash[
20];
        uint8   number_of_keys;
        uint8   unk;  
// Added in 1.12.x client branch
    }
;



A, M1有用

2.1 計算u, S, K

    u = sha(A, B);
    S = (A * (v.ModExp(u, N))).ModExp(b, N);
    K = H(S);
其中K分奇偶位分別計算, 應該不是SRP的方法, 不知是否會降低散列效果.

2.2 計算M并與M1比較驗證

    M = sha(sha(N) xor sha(g), sha(I), s, A, B, K)

2.3 M1驗證通過后計算M2, 用于客戶端驗證

    M2 = sha(A, M, K)

2.4 服務端發回 CMD_AUTH_LOGON_PROOF

包含了 SRP6 驗證的結果 M2 

    struct AUTH_LOGON_PROOF_S
    
{                        
        uint8   cmd;         
        uint8   error;       
        uint8   M2[
20];      
        uint32  unk1;        
        uint32  unk2;        
        uint16  unk3;        
    }
;

 

posted on 2010-02-26 16:30 楊粼波 閱讀(1621) 評論(1)  編輯 收藏 引用

評論

# re: Wow, Mangos登錄時的SRP6認證 2012-04-05 22:44 iicup

如果是驗證密碼,服務器必須要有密碼的某種形式的散列值吧.
比如所謂的驗證因子也應該是散列值的一種.
另外, 服務器先發鹽值,可以讓客戶端接收到信息后立刻發送信息到服務器驗證,
然后立刻可以刪除密碼.
這樣可以最大程度減小密碼在客戶端內存的保留時間,有利于安全.  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩免费观看一区三区| 一二三四社区欧美黄| 亚洲欧美视频| 亚洲国产精品黑人久久久| 尤物视频一区二区| 欧美日一区二区三区在线观看国产免| 亚洲欧美另类在线| 日韩天堂在线观看| 免费日韩一区二区| 亚洲专区免费| 亚洲国产高清在线观看视频| 国产免费观看久久黄| 欧美不卡在线视频| 久久久999精品视频| 亚洲欧美成人网| 一区二区三区视频观看| 亚洲美女毛片| 亚洲青色在线| 亚洲国产女人aaa毛片在线| 久久久人成影片一区二区三区观看| 国产精品一区视频| 欧美在线观看一二区| 亚洲午夜精品国产| 一区二区三区日韩在线观看| 最近中文字幕mv在线一区二区三区四区| 女同性一区二区三区人了人一| 一区福利视频| 国产欧美日韩亚洲| 国产精品久久久久久久久久三级 | 免费亚洲婷婷| 久久久久久亚洲精品中文字幕| 亚洲欧美国产精品专区久久| 一区二区欧美亚洲| 亚洲私人影院在线观看| 中文在线一区| 夜夜嗨av一区二区三区四区| 亚洲人成人一区二区在线观看| 在线日韩欧美| 亚洲电影第1页| 亚洲精品影视| 在线视频精品一区| 亚洲男人的天堂在线aⅴ视频| 亚洲一区二区动漫| 欧美一级精品大片| 蜜桃精品久久久久久久免费影院| 免费成人激情视频| 亚洲精品自在久久| 亚洲一区欧美| 久久国产精品一区二区三区| 久久在线免费视频| 欧美日韩精品二区| 国产精品夜夜夜一区二区三区尤| 国产欧美日韩专区发布| 狠狠爱综合网| 亚洲精选在线观看| 欧美一区二区免费视频| 噜噜噜91成人网| 日韩视频二区| 久久久99爱| 欧美三级电影大全| 国产一区二区三区久久悠悠色av | 久久久成人精品| 欧美一区二区视频免费观看| 老司机一区二区| 欧美视频在线一区| 国产在线日韩| 国产精品99久久久久久人| 久久久久国产一区二区| 亚洲精品久久在线| 久久成人精品视频| 欧美日韩亚洲一区| 日韩视频一区二区三区在线播放免费观看 | 欧美一区二区三区免费观看视频| 久久午夜精品一区二区| 欧美精品久久99| 猫咪成人在线观看| 欧美色图天堂网| 欧美寡妇偷汉性猛交| 欧美日韩国产首页在线观看| 好看的日韩av电影| 亚洲一区二区三区三| 亚洲高清av| 久久久久高清| 国产欧美日韩精品丝袜高跟鞋| 亚洲精品人人| 麻豆精品网站| 亚洲一区二区成人在线观看| 麻豆精品视频在线观看视频| 国产精品一区二区久久| 亚洲小视频在线| 亚洲片在线资源| 欧美成人a视频| 狠狠爱www人成狠狠爱综合网 | 国内精品久久久久久 | 亚洲私拍自拍| 欧美中文字幕久久| 国产精品亚洲产品| 中文无字幕一区二区三区| 欧美激情精品久久久久久| 久久深夜福利免费观看| 国精品一区二区| av成人天堂| 美女精品自拍一二三四| 久久精品99无色码中文字幕| 亚洲片国产一区一级在线观看| 久久一区二区三区超碰国产精品| 国产日韩欧美亚洲| 国产综合久久久久久鬼色| 国产亚洲二区| 久久久亚洲精品一区二区三区| 久久激五月天综合精品| 狠狠色综合色综合网络| 久久综合999| 欧美成人一区二免费视频软件| 午夜视黄欧洲亚洲| 亚洲在线播放| 国产一区二区三区的电影| 亚洲三级电影在线观看 | 亚洲国产精品一区二区尤物区| 欧美寡妇偷汉性猛交| 欧美激情在线狂野欧美精品| 91久久久久久国产精品| 亚洲片国产一区一级在线观看| 欧美激情1区2区3区| 国产精品免费一区二区三区观看 | 一区二区福利| 99精品久久| 国产性猛交xxxx免费看久久| 欧美fxxxxxx另类| 欧美日韩国产在线| 午夜精品免费在线| 久久野战av| 国产有码一区二区| 欧美高清一区二区| 国产伦精品一区二区三区免费迷| 久久精品亚洲热| 欧美理论电影在线播放| 欧美在线免费观看视频| 久久综合久色欧美综合狠狠| 亚洲精品国产视频| 亚洲午夜久久久久久久久电影院 | 国产日韩欧美自拍| 欧美福利精品| 国产免费观看久久黄| 亚洲精品国产精品国自产观看| 国产欧美日韩伦理| 亚洲另类视频| 影音先锋亚洲电影| 亚洲视频在线二区| 亚洲国产日韩欧美在线图片| 一区二区三区不卡视频在线观看| 国内精品久久久久影院优| 这里只有视频精品| 91久久精品网| 欧美一区二粉嫩精品国产一线天| 国产精品女人久久久久久| 欧美国产丝袜视频| 国产自产高清不卡| 中文一区字幕| 亚洲免费观看高清在线观看| 午夜精品久久久久久久久久久久久| 亚洲另类在线一区| 亚洲美女av在线播放| 亚洲欧美综合v| 亚洲一二区在线| 欧美福利视频在线| 蜜桃av一区二区三区| 欧美亚洲综合久久| 中文亚洲免费| 欧美国产一区视频在线观看| 亚洲视频免费在线| 欧美大片在线影院| 亚洲已满18点击进入久久| 亚洲欧美日韩一区二区三区在线观看 | 欧美第一黄网免费网站| 一本一本a久久| 狠狠色丁香久久婷婷综合_中| 欧美国产一区二区在线观看 | 噜噜噜在线观看免费视频日韩| 亚洲精品欧美| 国产情侣久久| 欧美日韩国产成人| 久久精品道一区二区三区| 亚洲精品中文字| 久久久91精品国产一区二区精品| 日韩视频一区二区三区在线播放免费观看 | 久久精品国产69国产精品亚洲| 亚洲巨乳在线| 欧美国产精品中文字幕| 久久精品二区| 在线一区二区三区做爰视频网站 | 女仆av观看一区| 欧美一区二区三区在线观看 | 国产日韩欧美高清免费| 欧美日韩精品一二三区| 久久九九久久九九| 亚洲欧美日韩在线综合| 日韩视频第一页| 亚洲日本一区二区| 亚洲国产第一页|