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

牽著老婆滿街逛

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

Wow, Mangos登錄時(shí)的SRP6認(rèn)證

轉(zhuǎn)載自:http://blog.csdn.net/jq0123/archive/2009/04/10/4062020.aspx

以Mangos代碼為參考, 解析SRP6的原理和實(shí)現(xiàn).
(轉(zhuǎn)載請(qǐng)注明來(lái)源于金慶的專欄)

SRP全稱Secure Remote Password(安全遠(yuǎn)程密碼),是一個(gè)開(kāi)源認(rèn)證協(xié)議。

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


參考:
Wow 服務(wù)器解析 ( http://m.shnenglu.com/Jedimaster/archive/2006/10/14/13674.aspx )
SRP Protocol Design ( http://srp.stanford.edu/design.html )
魔獸世界服務(wù)器端編寫參考資料 ( 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認(rèn)證過(guò)程 ==

 

1. 客戶端發(fā)送用戶名和版本信息

    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];
    }
;




大部份信息用來(lái)決定是否封阻該用戶登錄.
SRP6相關(guān)的只有I, 為用戶名. 
SRP6相關(guān)的字段都是按協(xié)議中的符號(hào)定義的.


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

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

salt值s是在連接時(shí)設(shè)置的隨機(jī)值.

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

s是32字節(jié)長(zhǎng), s_BYTE_SIZE = 32.

安全大質(zhì)數(shù)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可以是一個(gè)安全的素?cái)?shù)
(也就是,一個(gè)類似于N=2q + 1形式的數(shù),同時(shí)q是個(gè)素?cái)?shù))。
而且,g將是一個(gè)以N為模的生成元,
意味著,對(duì)任何X,有0 < X < N,存在一個(gè)值x,使得g^x % N == X。

Mangos保存了密碼p, 是錯(cuò)誤的. 服務(wù)器不應(yīng)該保存密碼或其散列值.
應(yīng)該在創(chuàng)建用戶時(shí), 由客戶端取s值, 計(jì)算v, 將{I, s, v}傳輸?shù)椒?wù)器并保存.
登錄時(shí), 特定用戶的s, v應(yīng)該是固定的, 從數(shù)據(jù)庫(kù)讀取, 而不是每次登錄時(shí)隨機(jī).

1.2 取b值, 計(jì)算B

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

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

1.3 服務(wù)端返回 CMD_AUTH_LOGON_CHALLENGE 數(shù)據(jù)包

返回的數(shù)據(jù)結(jié)構(gòu)沒(méi)有用struct定義, 只是用ByteBuffer依次填入數(shù)據(jù).

    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 是服務(wù)器發(fā)給客戶端的SRP6參數(shù).
unk3是個(gè)16字節(jié)長(zhǎng)的隨機(jī)數(shù), 不知道干什么用的. (unknown3?)

按SRP6的協(xié)議, 應(yīng)該是客戶端先發(fā)送自己的用戶名和公鑰(I, A), 但在Mangos中,
是服務(wù)器在沒(méi)有收到A時(shí)就發(fā)送鹽值和自己的公鑰(s, B).
這個(gè)次序應(yīng)該無(wú)關(guān)緊要. 這樣做的原因是服務(wù)器要先發(fā)送N, g到客戶端, 這樣可少一次消息交互.
客戶端計(jì)算公鑰A時(shí)要用到N, g: A = g^a (隱含對(duì)N取模).

2. 客戶端發(fā)送 CMD_AUTH_LOGON_PROOF 數(shù)據(jù)包請(qǐng)求驗(yàn)證

    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 計(jì)算u, S, K

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

2.2 計(jì)算M并與M1比較驗(yàn)證

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

2.3 M1驗(yàn)證通過(guò)后計(jì)算M2, 用于客戶端驗(yàn)證

    M2 = sha(A, M, K)

2.4 服務(wù)端發(fā)回 CMD_AUTH_LOGON_PROOF

包含了 SRP6 驗(yàn)證的結(jié)果 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) 評(píng)論(1)  編輯 收藏 引用

評(píng)論

# re: Wow, Mangos登錄時(shí)的SRP6認(rèn)證 2012-04-05 22:44 iicup

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


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩视频一区二区在线观看 | 欧美另类videos死尸| 亚洲欧美精品伊人久久| 国产嫩草一区二区三区在线观看| 午夜老司机精品| 久久9热精品视频| 亚洲日韩欧美视频一区| 一区二区三区精品国产| 欧美激情一区二区三区高清视频| 亚洲精品一区在线观看香蕉| 午夜日韩视频| 亚洲五月婷婷| 亚洲美女黄色片| 国产精品高清在线观看| 欧美国产综合一区二区| 亚洲午夜久久久| 亚洲国产成人精品久久久国产成人一区| 亚洲精品综合| 宅男66日本亚洲欧美视频| 国产精品99久久久久久白浆小说| 亚洲中字黄色| 欧美aaa级| 国产女人精品视频| 亚洲高清不卡一区| 亚洲天堂成人在线观看| 久久久久久亚洲精品中文字幕| 欧美成人精品一区| 亚洲视频一起| 日韩午夜激情av| 久久超碰97人人做人人爱| 欧美成人午夜免费视在线看片 | 亚洲在线视频免费观看| 久久精品一二三| 欧美午夜精品一区| 亚洲大片精品永久免费| 亚洲欧美怡红院| 亚洲黄一区二区| 欧美一区精品| 国产精品成人一区二区艾草| 亚洲国产日韩欧美一区二区三区| 欧美一区1区三区3区公司| 亚洲激情欧美激情| 久久精品国产亚洲aⅴ| 国产精品福利在线观看网址| 亚洲精品国产精品乱码不99按摩| 久久久999国产| 亚洲一区二区在线免费观看视频| 欧美精品入口| 亚洲三级影片| 欧美激情亚洲另类| 久久国产精品久久精品国产| 国产精品超碰97尤物18| 日韩一二三在线视频播| 欧美国产一区视频在线观看| 久久久久久69| 国内精品写真在线观看| 久久国产精品亚洲77777| 中国成人黄色视屏| 欧美午夜精品理论片a级按摩 | 亚洲激情啪啪| 免费久久久一本精品久久区| 久久精品1区| 国产一区视频在线看| 亚洲福利视频一区| 红杏aⅴ成人免费视频| 一区二区三区视频在线看 | 亚洲第一色中文字幕| 久久国产精品久久久| 国产亚洲网站| 久久久久久国产精品一区| 欧美在线免费看| 99精品视频免费观看视频| 免播放器亚洲一区| 91久久精品www人人做人人爽| 欧美成人xxx| 欧美精品在欧美一区二区少妇| 亚洲精品护士| 日韩视频免费看| 国产精品实拍| 麻豆国产精品777777在线 | 国产欧美日韩一区| 久久精品主播| 狼狼综合久久久久综合网| 亚洲精品久久久久久一区二区| 亚洲激情视频在线| 国产精品扒开腿爽爽爽视频| 久久精品国产99国产精品澳门| 久久久噜噜噜久久中文字免| 91久久久亚洲精品| 亚洲天天影视| 1000部国产精品成人观看| 欧美电影免费网站| 国产精品入口| 亚洲国产日韩一区| 国产精品日韩在线一区| 久久在线91| 欧美午夜欧美| 欧美va亚洲va国产综合| 欧美日韩日韩| 蜜桃视频一区| 国产精品久久99| 欧美成人按摩| 国产精品久久一区主播| 欧美成人精品h版在线观看| 欧美日一区二区在线观看| 久久婷婷亚洲| 国产精品久久久久9999高清| 欧美高清免费| 国产三级欧美三级| 亚洲精品一区二区在线| 黄色影院成人| 亚洲欧美成aⅴ人在线观看| 亚洲欧洲一二三| 欧美一区二区三区另类 | 黄网站免费久久| 夜夜狂射影院欧美极品| 在线观看国产成人av片| 亚洲一区激情| 一区二区动漫| 欧美超级免费视 在线| 欧美日韩国产91| 国内精品模特av私拍在线观看| 亚洲午夜久久久久久尤物| 久久久久久9| 久久在线视频在线| 国产精品视频最多的网站| 欧美第一黄网免费网站| 国产亚洲精品久久久| 亚洲在线一区| 亚洲男女自偷自拍| 欧美日韩直播| 亚洲视频电影在线| 亚洲无亚洲人成网站77777| 欧美精品v国产精品v日韩精品| 欧美岛国激情| 亚洲精品国产品国语在线app| 美女性感视频久久久| 欧美成人在线免费观看| 激情久久五月| 久久天天综合| 男同欧美伦乱| 亚洲国产精品欧美一二99| 久久亚洲综合色| 欧美福利网址| 夜夜嗨av一区二区三区四区| 欧美风情在线| 99成人在线| 欧美一区视频| 国产综合久久久久久鬼色| 久久精品国产精品亚洲| 欧美成人一区二区三区片免费| 樱桃国产成人精品视频| 美女网站在线免费欧美精品| 欧美福利在线| av成人免费在线| 国产精品日韩欧美一区二区三区 | 香蕉精品999视频一区二区| 欧美中文字幕精品| 伊人久久亚洲影院| 老司机一区二区三区| 亚洲国产另类精品专区| 亚洲一级免费视频| 国产一区久久| 欧美成人精品在线观看| 日韩视频一区二区三区在线播放| 先锋影音久久| 亚洲国产精品精华液2区45 | 在线播放国产一区中文字幕剧情欧美| 久久久久久久性| 亚洲久久视频| 老司机免费视频一区二区三区| 久久久视频精品| 亚洲美女福利视频网站| 久久九九热re6这里有精品| 亚洲黄色免费| 国产精品一区二区久激情瑜伽| 久久精品视频在线看| 亚洲人成人99网站| 久久久欧美精品sm网站| 亚洲美女在线看| 国产人久久人人人人爽| 欧美激情91| 欧美一区二区三区四区在线观看地址| 欧美国产精品久久| 欧美一区二区三区啪啪| 亚洲三级国产| 欧美激情亚洲精品| 亚洲一线二线三线久久久| 国产欧美日韩亚洲| 欧美日韩国产黄| 久久免费视频网| 亚洲免费视频观看| 亚洲国产精品一区二区第四页av| 欧美一级淫片aaaaaaa视频| 亚洲美女91| 狠狠色香婷婷久久亚洲精品| 欧美午夜免费影院| 欧美精品观看| 麻豆亚洲精品| 久久大逼视频|