锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鏈枃閽堝Rijndael鍔犲瘑綆楁硶鐨勬暟瀛︾悊璁鴻儗鏅紝綆楁硶鐨勬灦鏋勶紝鍥炲悎鐨勮漿鎹紝閲戦挜鐨勪駭鐢燂紝浠ュ強鍚勭鏀誨嚮鐮村瘑娉曠瓑絳夛紝鍋氫簡涓浜涚畝鍗曠殑浠嬬粛銆?/span>
涓銆佺畝浠?/span>
鍦?/span>AES ( Advanced Encryption Standard ) 鐨勯夋嫈涓紝浠庢渶鍒濈殑鍗佷簲涓畻娉曪紝鍒板崄涓佷簲涓紝閫愭絳涢夊嚭閫傚悎鐢ㄦ潵浣滀負涓嬩竴浠e姞瀵嗙畻娉曠殑鏍囧噯銆?/span>Rijndael鍦ㄧ粡榪囦簡涓鐣椂鏃ョ殑鑰冮獙涔嬪悗錛屼篃涓鐩村悕鍒楀墠鐭涖傜洿鑷?st1:chsdate Year="2005" Month="10" Day="2" IsLunarDate="False" IsROCDate="False" w:st="on">鍗佹湀浜屾棩錛?/span>Rijndael鎵嶈劚棰栬屽嚭錛岃繖綃囨枃绔犱究鏄拡瀵?/span>Rijndael浣滅畝瑕佺殑浠嬬粛銆?/span>
Rijndael鏄竴涓弽澶嶈繍綆楃殑鍔犲瘑綆楁硶錛屽畠鍏佽鍙彉鍔ㄧ殑鏁版嵁鍖哄潡鍙婇噾閽ョ殑闀垮害銆傛暟鎹尯鍧椾笌閲戦挜闀垮害鐨勫彉鍔ㄦ槸鍚勮嚜鐙珛鐨勩?/span>
鍦?/span>Rijndael綆楁硶涓畾涔変簡鍑犱釜鍚嶈瘝錛屽垎榪板涓嬶細
State錛氬湪榪愮畻榪囩▼涓墍浜х敓鐨勪腑闂村鹼紝鏄竴涓?/span>4×Nb鐨勭煩闃碉紝Nb鍙敱鏁版嵁闀垮害闄や互32浣嶆眰寰楋紝涔熷氨鏄妸鏁版嵁鍒嗗壊鎴?/span>Nb涓尯鍧椼?/span>
Cipher Key錛氱敤鏉ュ仛鍔犲瘑榪愮畻鐨勯噾閽ワ紝褰㈠紡鏄竴涓?/span>4×Nk鐨勭煩闃碉紝Nk鍙敱閲戦挜闀垮害闄や互32浣嶆眰寰楋紝涔熷氨鏄妸閲戦挜鍒嗗壊鎴?/span>Nk涓?/span>32浣嶇殑瀛愰噾閽ャ?/span>
鍦?/span>Rijndael綆楁硶涓紝榪愮畻鐨勫洖鍚堟暟(Nr)鏄敱Nb鍙?/span>Nk鎵鍐沖畾鐨勶紝鍥炲悎鏁扮殑鍙樺姩瀹氫箟濡備笅琛ㄣ?/span>
|
Nr |
Nb=4 |
Nb=6 |
Nb=8 |
|
Nk=4 |
10 |
12 |
14 |
|
Nk=6 |
12 |
12 |
14 |
|
Nk=8 |
14 |
14 |
14 |
浜屻?/span>Rijndael鐨勬暟瀛﹁儗鏅?/span>
鍦?/span>Rijndael涓嬌鐢ㄤ簡璁稿瀛楄妭灞傜駭鐨勮繍綆楋紝鑰岃繖浜涜繍綆楁槸浠?/span>GF(28)涓哄熀紜鏋舵瀯銆備篃鏈変竴浜涢噰鐢ㄤ簡4-byte鐨勫瓧緇勮繍綆椼傚湪榪欓儴鍒嗭紝鎴戜滑灝嗕粙緇嶈繖浜涘熀鏈殑鏁板鍘熺悊銆?/span>
(1) GF(28)鐨勫畾涔?/span>
鍋囪涓涓瓧鑺?/span>b鐢?/span>b7b6b5b4b3b2b1b0緇勬垚錛屾垜浠彲浠ユ妸榪欎簺bi鎯寵薄鎴愪竴涓?/span>7嬈″欏瑰紡鐨勭郴鏁幫紝鑰岃繖浜涚郴鏁頒笉鏄?/span>0灝辨槸1錛?/span>
b7 x7+ b6 x6+ b5 x5+ b4 x4+ b3 x3+ b2 x2+ b1 x + b0錛?/span>
渚嬪錛?/span>(57)16鐨勪簩榪涘埗琛ㄧず娉曚負(0101,0111)2琛ㄧず鎴愬欏瑰紡錛屽垯涓猴細
x6+ x4+ x2+ x + 1 .
(2) 鍔犳硶
涓や釜澶氶」寮忕殑鍔犳硶錛屽垯鏄畾涔変負鐩稿悓鎸囨暟欏圭殑緋繪暟鍜屽啀妯′綑2錛岀畝鍗曠殑璇村氨鏄綔EXOR榪愮畻(i.e., 1+1=0)銆備緥濡傦細
(57)16+(83)16=(01010111)2+(10000011)2 = (11010100)2 = (D4)16
鎴栨槸(x6+x4+x2+x+1) + (x7+x+1) = x7+x6+x4+x2
(3) 涔樻硶
鍦ㄤ箻娉曢噷闈紝澶氶」寮忕浉涔樹箣鍚庣殑緇撴灉寰堝鏄撻犳垚婧綅鐨勯棶棰橈紝瑙e喅婧綅鐨勬柟寮忔槸鎶婄浉涔樼殑緇撴灉錛屽啀妯′綑涓涓笉鍙垎瑙g殑澶氶」寮?/span>m(x)銆傚湪Rijndael涓紝瀹氫箟涓涓繖鏍峰瓙鐨勫欏瑰紡涓?/span>
m(x)=x8+x4+x3+x+1鎴栨槸(11B)16
渚嬪錛?/span>
(57)16鈥?/span>(83)16 = ( x6+ x4+ x2+ x + 1)鈥?/span> ( x7+ x + 1) = x13+ x11+ x9+ x8+ x7+x7+ x5+ x3+ x2+x+x6+ x4+ x2+ x + 1
= (x13+ x11+ x9+ x8+ x6+ x5+ x4+ x3+ 1+x13+ x11+ x9+ x8+ x6+ x5+ x4+ x3+ 1) modulo (x8+ x4+ x3+ x + 1)
= x7+ x6+ 1=(C1)16
(4) 涔樹互x
鑻ユ妸b(x)涔樹笂x錛屽緱鍒?/span>b7 x8+ b6 x7+ b5 x6+ b4 x5+ b3 x4+ b2 x3+ b1 x2 + b0x銆傝嫢b7=0錛屼笉浼氬彂鐢熸孩浣嶉棶棰橈紝絳旀鍗蟲槸姝g‘鐨勶紱鑻?/span>b7=1錛屽彂鐢熸孩浣嶉棶棰橈紝蹇呴』鍑忓幓m(x)銆傛垜浠彲浠ユ妸榪欑榪愮畻琛ㄧず涓?/span>xtime(x)錛屽叾榪愮畻鏂瑰紡涓?/span>left shift(鑻ユ孩浣嶅垯鍜?/span>(1B)16鍋?/span>EXOR榪愮畻)錛屼緥濡傦細‘57’ · ‘13’ = ‘FE’
‘
‘
‘
‘
‘
涓夈?/span>Rijndael鐨勫姞瀵嗘灦鏋?/span>
Rijndael鍔犲瘑綆楁硶鏄敱涓涓?/span>initial Round Key addition錛?/span>Nr-1涓洖鍚堣繍綆楋紝鍙婁竴涓?/span>final round鎵緇勬垚銆傚姞瀵嗚繃紼嬩互C璇█浼爜鍙欒堪濡備笅錛?/span>
Rijndael(State, CipherKey)
//state琛ㄧず杈撳叆鐨勬暟鎹槑鏂囷紝
//CipherKey琛ㄧず浣跨敤鐨勫姞瀵嗛噾閽ワ紝
//ExpandedKey琛ㄧず姣忎釜Round浣跨敤鐨勫瓙閲戦挜銆?/span>
{
KeyExpansion(CipherKey, ExpandedKey);
AddRoundKey(State, ExpandedKey);
For ( i=1; i<Nr; i++)
Round(State, ExpandedKey+Nb×i);
FinalRound(State, ExpandedKey+Nb×Nr);
}
涓婅堪綆楁硶涓殑Key Expansion錛屽彲浠ュ厛琛岃綆楀嚭鏉ワ紝鎵浠ュ姞瀵嗚繃紼嬪彲浠ョ畝鍖栦負錛?/span>
Rijndael(State,ExpandedKey)
//State琛ㄧず杈撳叆鐨勬暟鎹槑鏂囷紝
//ExpandedKey琛ㄧず姣忎釜Round浣跨敤鐨勫瓙閲戦挜銆?/span>
{
AddRoundKey(State,ExpandedKey);
For( i=1 ; i<Nr ; i++ )
{
Round(State,ExpandedKey + Nb×i) ;
}
FinalRound (State, ExpandedKey + Nb×Nr);
}
鍚勪釜瀛愯繍綆椾粙緇嶅涓嬨?/span>
鍥炲悎杞崲(Round transformation)錛?/span>
鍥炲悎杞崲鍖呭惈鍥涗釜涓嶅悓鐨勫伐浣滐紝鍏剁畻娉曞涓嬶細
Round(State,RoundKey)
//State琛ㄧず杈撳叆鐨勬暟鎹槑鏂囷紝
//RoundKey琛ㄧず姣忎釜Round浣跨敤鐨勫瓙閲戦挜銆?/span>
{
ByteSub(State);
ShiftRow(State);
MixColumn(State);
AddRoundKey(State,RoundKey);
}
綆楁硶涓殑緇堟鍥炲悎(Final round)鍖呭惈涓嬪垪宸ヤ綔欏圭洰錛?/span>
FinalRound(State,RoundKey)
//State琛ㄧず杈撳叆鐨勬暟鎹槑鏂囷紝
//RoundKey琛ㄧず姣忎釜Round浣跨敤鐨勫瓙閲戦挜銆?/span>
{
ByteSub(State) ;
ShiftRow(State) ;
AddRoundKey(State,RoundKey);
}
浠ヤ笅閽堝姣忎釜鍥炲悎杞崲鐨勮繍綆楄繃紼嬶紝浣滀竴涓繁鍏ョ殑浠嬬粛錛屽彲浠ユ洿娓呮綆楁硶鐨勮繃紼嬨?/span>
1. 瀛楄妭鍙栦唬杞崲(ByteSub transformation)錛?/span>
瀛楄妭杞崲鏄竴涓互瀛楄妭涓哄崟浣嶇殑闈炵嚎鎬у彇浠h繍綆楋紝鍙栦唬琛?/span>(S-Box)鏄粡榪囦袱涓繍綆楄繃紼嬭屽緩绔嬶紝騫朵笖鏄彲閫嗙殑銆?/span>
棣栧厛鎵懼嚭姣忎釜瀛楄妭鍦?/span>GF(28)涓殑涔樻硶鍙嶅厓绱狅紱
鎺ョ潃緇忚繃涓涓豢灝?/span>(Affine)杞崲榪愮畻錛屽畾涔夊涓嬶細
(鏈浘鎽樺綍鑷弬鑰冩枃鐚?/span>[1])
瀛楄妭鍙栦唬(ByteSub)榪愮畻瀵?/span>State鐨勫獎鍝嶏紝濡備笅鍥炬墍紺猴細
(鏈浘鎽樺綍鑷弬鑰冩枃鐚?/span>[1])
瀛楄妭鍙栦唬(ByteSub)杞崲鐨勫弽榪愮畻錛?/span>
璁$畻浠垮皠瀵瑰簲涔嬪悗鐨勭浉鍙嶈繍綆楀彲寰楀埌S-1-Box錛屼互姝?/span>S-1-Box鍋氬瓧鑺傚彇浠?/span>(ByteSub)鍗沖彲銆?/span>
2. 縐誨垪杞崲( ShiftRow transformation )錛?/span>
鍦ㄨ繖涓漿鎹腑錛?/span>State鐨勬瘡涓鍒椾互涓嶅悓鐨勫亸縐婚噺鍋氱幆鐘朵綅縐伙紝絎?/span>0鍒椾笉鍔紝絎竴鍒椾綅縐?/span>C1涓瓧鑺傦紝絎簩鍒椾綅縐?/span>C2涓瓧鑺傦紝絎笁鍒椾綅縐?/span>C3涓瓧鑺傘備綅縐葷殑鍋忕Щ閲?/span>C1,C2,C3璺熷尯鍧楃殑鏁扮洰(Nb)鏈夊叧錛屽畾涔夊涓嬭〃錛?/span>
|
Nb |
C1 |
C2 |
C3 |
|
4 |
1 |
2 |
3 |
|
6 |
1 |
2 |
3 |
|
8 |
1 |
3 |
4 |
縐誨垪杞崲(ShiftRow)榪愮畻瀵逛簬State鐨勫獎鍝嶏紝鍥劇ず濡備笅錛?/span>
(鏈浘鎽樺綍鑷弬鑰冩枃鐚?/span>[1])
縐誨垪杞崲(ShiftRow)鐨勫弽榪愮畻錛?/span>
瀵圭浜岀涓夊強絎洓鍒楀仛Nb-C1,Nb-C2,Nb-C3涓瓧鑺傜殑鐜姸浣嶇Щ鍗沖彲銆?/span>
3. 娣瘋杞崲(MixColumn transformation)錛?/span>
鍦ㄨ繖涓漿鎹腑錛屾妸State褰撲綔涓涓瓨鍦?/span>GF(28)涓殑澶氶」寮忋傚茍涓斿涓涓浐瀹氱殑澶氶」寮?/span>c(x)浣滀箻娉曪紝濡傛灉鍙戠敓婧綅錛屽垯鍐嶆ā浣?/span>x4+1銆傝〃紺哄涓嬶細
c(x) = ‘
c(x)涓?/span>x4+1浜掕川錛屼護b(x) = c(x) Ä a(x)錛屼互鐭╅樀涔樻硶琛ㄧず濡備笅錛?/span>
(鏈浘鎽樺綍鑷弬鑰冩枃鐚?/span>[1])
State緇忚繃娣瘋(MixColumn)榪愮畻涔嬪悗鐨勫彉鍖栧涓嬶細
(鏈浘鎽樺綍鑷弬鑰冩枃鐚?/span>[1])
娣瘋(MixColumn)杞崲鐨勫弽榪愮畻錛屽垯鏄箻涓婁竴涓壒孌婄殑澶氶」寮?/span>d(x)錛?/span>
(‘
d(x) = ‘0B’x3 + ‘0D’x2 + ‘
4. The Round Key Addition錛?/span>
榪欎釜榪愮畻涓昏鏄妸姣忎竴涓洖鍚堥噾閽?/span>(Round Key)閫忚繃綆鍗曠殑bitwise EXOR鍔犲叆鍒版瘡涓涓?/span>State涓紝浠ュ浘紺哄涓嬶細
(鏈浘鎽樺綍鑷弬鑰冩枃鐚?/span>[1])
鍥涖侀噾閽ョ殑鎺掔▼(Key Schedule)
鍥炲悎閲戦挜(Round Key)鏄粠鍔犲瘑閲戦挜(Cipher Key)緇忚繃榪愮畻浜х敓鍑烘潵鐨勩傞噾閽ユ帓紼?/span>(Key Schedule)鏄敱閲戦挜鎵╁厖(Key Expansion)鍙婂洖鍚堥噾閽ョ殑閫夋嫨(Round Key Selection)緇勬垚鐨勶紝鍩烘湰鐨勭悊璁哄涓嬶細
鎵鏈夊洖鍚堥噾閽ョ殑鎬諱綅鏁版槸鎶婂尯鍧楅暱搴?/span>(block length)涔樹笂鍥炲悎鏁板姞1錛?/span>(鏈?/span>Nr-1涓洖鍚堬紝鍔犱笂涓涓粓姝㈠洖鍚?/span>(final round))錛屼緥濡傦紝128涓綅鐨勫尯鍧楅暱搴︾粡榪?/span>10涓洖鍚堣繍綆楋紝鎵闇瑕佺敤鍒扮殑鎵鏈夊洖鍚堥噾閽ョ殑鎬諱綅鏁頒負1408涓綅銆?/span>
鍔犲瘑閲戦挜(Cipher Key)蹇呴』鎵╁厖涓烘墿鍏呴噾閽?/span>(Expanded Key)銆?/span>
鍥炲悎閲戦挜鏄粠鎵╁厖閲戦挜涓夊嚭鏉ョ殑錛岄夋嫨鐨勬柟寮忓涓嬶細
絎竴涓洖鍚堥噾閽ョ敱鍓?/span>Nb涓瓧緇勭粍鎴愶紝絎簩涓洖鍚堥噾閽ョ敱鎺ヤ笅鏉ョ殑Nb涓瓧緇勭粍鎴愶紝浣欐綾繪帹銆?/span>
(1) 閲戦挜鐨勬墿鍏?/span>( Key Expansion )錛?/span>
鎵╁厖鍚庣殑閲戦挜鏄竴涓?/span>4-byte鐨勭嚎鎬ф暟緇勶紝琛ㄧず涓?/span>W[Nb×(Nr+1)]銆傚墠Nk涓瓧緇勫寘鍚簡鍔犲瘑閲戦挜(Cipher Key)銆?/span>
閲戦挜鎵╁厖鍑藉紡鍜?/span>Nk鏄伅鎭浉鍏崇殑錛屽垎涓轟袱縐嶆儏鍐佃繍浣滐紝涓鏄綋Nk灝忎簬鎴栫瓑浜?/span>6錛屽彟澶栧垯鏄綋Nk澶т簬6錛屼互浼爜鍙欒堪濡備笅錛?/span>
褰?/span>Nk鈮?/span>6鏃訛紝
KeyExpansion(byte Key[4×Nk] word W[Nb×(Nr+1)])
{
for(i = 0; i < Nk; i++)
W[i] = (Key[4×i], Key[4×i+1], Key[4×i+2], Key[4×i+3] );
for(i = Nk; i < Nb×(Nr + 1); i++)
{
temp = W[i - 1];
if (i % Nk == 0)
temp = SubByte(RotByte(temp)) ^ Rcon[i / Nk];
W[i] = W[i - Nk] ^ temp;
}
}
鍦ㄤ笂闈㈢殑瀛愮▼搴忎腑錛?/span>SubByte(W)浼犲洖涓涓?/span>4-byte鐨勫瓧緇勶紝榪欎簺瀛楃粍鏄緭鍏ョ殑瀛楃粍緇忚繃S-box鐨勮漿鎹㈡墍浜х敓鐨勭浉瀵瑰瓧緇勩?/span>RotByte(W)鍒欐槸浼犲洖緇忚繃鏃嬭漿鐨勫瓧緇勩?/span>
褰?/span>Nk錛?/span>6鏃訛紝
KeyExpansion(byte Key[4×Nk] word W[Nb×(Nr+1)])
{
for(i = 0; i < Nk; i++)
W[i] = (key[4×i],key[4×i+1], key[4×i+2], key[4×i+3] );
for(i = Nk; i < Nb×(Nr + 1); i++)
{
temp = W[i - 1];
if (i % Nk == 0)
temp = SubByte(RotByte(temp)) ^ Rcon[i / Nk];
else if (i % Nk == 4)
temp = SubByte(temp);
W[i] = W[i - Nk] ^ temp;
}
}
浠ヤ笂涓ょ鎯呭喌鐨勭浉寮傚鍦ㄤ簬褰?/span>Nk鈮?/span>6鏃訛紝(i-4)鏄?/span>Nk鐨勫嶆暟鏃訛紝瀵逛簬W[i-1]鍏堟墽琛?/span>SubByte錛屽啀鎵цEXOR銆?/span>
涓婅堪鍥炲悎甯告暟瀹氫箟濡備笅錛?/span>
Rcon[i] = (RC[i],‘
(2) 閫夋嫨鍥炲悎閲戦挜(Round Key Selection)
絎?/span>i涓洖鍚堥噾閽ユ槸鎸囧湪瀛樺湪鍥炲悎閲戦挜緙撳啿鍖虹殑瀛楃粍W[Nb*i]鍒?/span>W[Nb*(i+1)]錛屽浘紺哄涓嬶細
(鏈浘鎽樺綍鑷弬鑰冩枃鐚?/span>[1])
浜斻佸畨鍏ㄦу垎鏋?/span>
鎴戜滑閽堝浠ヤ笅宸茬煡鐨勬敾鍑繪硶瀵?/span>Rijndael鐨勫畨鍏ㄦу垎鏋愪綔涓綆瑕佸彊榪幫紝鍖呮嫭宸垎鏀誨嚮娉?/span>(Differential Cryptanalysis)錛岀嚎鎬ф敾鍑繪硶(Linear Cryptanalysis)錛屽鉤鏂規(guī)敾鍑繪硶(The Square Attack)錛屽唴鎻掓敾鍑繪硶(Interpolation attacks)絳夋敾鍑繪柟寮忋?/span>
(1) 宸垎鏀誨嚮娉?/span>( Differential Cryptanalysis )
姝ゆ敾鍑繪硶鏄竴縐?/span>Chosen-plaintext attack錛屽埄鐢ㄥぇ閲忓凡鐭ョ殑鏄庢枃/瀵嗘枃瀵逛箣闂寸殑宸紓錛屾嵁浠ユ帹嫻嬪嚭閲戦挜鐨勪綅鍊箋傚湪澶ч儴鍒嗙殑鍥炲悎榪愮畻涓?/span>(鍥炲悎鏁拌秴榪?/span>3)錛岃嫢瀛樺湪瓚呰繃21-n(n鎸囩殑鏄尯鍧楅暱搴?/span>)姣斾緥鐨勫彲棰勬祴鎬х殑宸紓錛岃繖涓敾鍑繪硶灝卞彲浠ユ帹嫻嬪嚭閲戦挜鐨勪綅鍊箋傚湪Rijndael涓紝宸茬粡璇佹槑鍦ㄧ粡榪?/span>Rijndael鍥涗釜鍥炲悎鐨勮繍綆楀悗錛屽瓨鍦ㄤ笉瓚呰繃2-150姣斾緥鐨勫彲棰勬祴鎬у樊寮傦紝鍦ㄥ叓涓洖鍚堣繍綆椾腑涓嶈秴榪?/span>2-300銆傝緇嗚瘉鏄庤繃紼嬶紝璇峰弬鐓у弬鑰冩枃鐚?/span>
(2) 綰挎ф敾鍑繪硶( Linear Cryptanalysis )
榪欐槸涓縐?/span>Known-plaintext鏀誨嚮娉曪紝鍒╃敤澶ч噺鎼滈泦鍒扮殑鏄庢枃/瀵嗘枃瀵圭殑鐩稿叧鎬э紝瀵瑰姞瀵嗘硶榪涜鏀誨嚮銆傛槑鏂?/span>/瀵嗘枃瀵圭殑鐩稿叧鎬х敱綰挎ц建榪?/span>(Linear trails)鎵緇勬垚錛岀敱浜庣嚎鎬ц建榪圭殑鐩稿叧緋繪暟涓?/span>Round keys鐨勫兼湁瀵嗗垏鍏崇郴錛岄忚繃鐩稿叧緋繪暟鐨勬璐熷彿錛岀嚎鎬ф敾鍑繪硶灝卞彲浠ユ壘鍑洪噾閽ュ箋傝瀵規(guī)姉榪欑鏀誨嚮娉曪紝鏈変竴涓繀瑕佹潯浠跺氨鏄嬌榪欑鐩稿叧緋繪暟澶т簬2n/2鐨勭嚎鎬ц建榪逛笉瀛樺湪銆傚湪Rijndael涓紝宸茬粡璇佹槑鍑哄綋鎵ц鍥涗釜鍥炲悎鏃訛紝涓嶅瓨鍦ㄧ浉鍏崇郴鏁板ぇ浜?/span>2-75鐨勭嚎鎬ц建榪癸紱鍦ㄦ墽琛屽叓涓洖鍚堟椂錛屽叾鐩稿叧緋繪暟澶т簬2-150鐨勭浉鍏崇郴鏁頒害涓嶅瓨鍦ㄣ傝緇嗚瘉鏄庤繃紼嬭鍙傜収鍙傝冩枃鐚?/span>
(3) 騫蟲柟鏀誨嚮娉?/span>( The Square attack )
榪欑鏀誨嚮娉曟槸涓縐?/span>chosen- plaintext attack錛岃屼笖鍜屽瓧鑺傚彇浠?/span>(ByteSub)錛屾販琛?/span>(MixColumn)鏃剁殑澶氶」寮忎箻娉曪紝閲戦挜鐨勬帓紼?/span>(Key Schedule)絳夎繍綆楁棤鍏熾傚綋Rijndael鎵ц6涓洖鍚堜互涓婃椂錛屾縐嶆柟寮忔瘮瀹屽叏鐨勯噾閽ユ悳瀵?/span>(exhaustive key search)鏉ョ殑鏇存湁鏁堢巼銆傚叧浜庢縐嶆敾鍑繪柟寮忕殑璇﹀敖鎻忚堪鍙?/span>Rijndael濡備綍寤朵幾姝ょ鏀誨嚮鏂瑰紡錛岃鍙傜収鍙傝冩枃鐚?/span>
(4) 鍐呮彃鏀誨嚮娉?/span>( Interpolation attacks )
鍦ㄨ繖縐嶆敾鍑繪硶涓紝鏀誨嚮鑰呭埄鐢ㄥ姞瀵嗙殑杈撳叆鍙婅緭鍑洪厤瀵癸紝寤虹珛涓浜涘欏瑰紡銆傚鏋滃姞瀵嗙殑緇勪歡鏈変竴涓畝媧佺殑浠f暟灞曞紑寮忥紝騫朵笖鍜岀鐞嗙殑澶嶆潅搴︾粨鍚堝湪涓璧鋒椂錛岃繖縐嶆敾鍑繪硶渚挎槸鍙鐨勩傚熀鏈殑鏀誨嚮鏂瑰紡鏄鏋滄敾鍑昏呭緩绔嬬殑浠f暟灞曞紑寮忕殑闃跺害(degree)寰堝皬錛屽彧闇瑕佷竴浜涘姞瀵嗘硶鐨勮緭鍏ュ強杈撳嚭閰嶅灝卞彲浠ュ緱鍒頒唬鏁板睍寮寮忕殑鍚勯」緋繪暟銆傜劧鑰岋紝鍦?/span>GF(28)涓殑鍙栦唬鐭╅樀(S-box)錛屽畠鐨勫睍寮寮忎負錛?/span>63+8fx127+b5x191+01x223+f4x239+25x247+f9x251+09x253+05x254銆傚叾浣欎粙緇嶏紝璇峰弬鐓у弬鑰冩枃鐚?/span>
(5)銆佸急閲戦挜(Weak keys)
鍏充簬寮遍噾閽ョ殑鍙戠敓錛屽熀鏈笂鏄洜涓哄姞瀵嗘硶鐨勯潪綰挎ц繍綆椾笌瀹為檯閲戦挜鍊兼湁瀵嗗垏鍏崇郴銆傝岃繖縐嶉棶棰樹笉瀛樺湪浜?/span>Rijndael涔嬩腑錛屽洜涓哄湪Rijndael涓紝閲戦挜鏄互EXOR榪愮畻錛岃屾墍鏈夌殑闈炵嚎鎬ц繍綆楅兘瀹氫箟鍦ㄥ彇浠g煩闃?/span>(S-box)涓傚湪Rijndael涓紝瀵歸噾閽ョ殑閫夋嫨錛屾槸娌℃湁闄愬埗鐨勩?/span>
鍏佺粨璁猴細
浠ヤ笂瀵?/span>Rijndael浣滀竴綆瑕佷粙緇嶄箣鍚庯紝鎴戜滑浠?/span>Rijndael鐨勪紭鐐逛笌闄愬埗浣滀負鎴戜滑鐨勭粨璁恒?/span>
(1)銆?/span>Rijndael鏈変互涓嬩紭鐐?/span>鈥?/span>
浠ュ疄浣滆鐐硅岃█
1. Rijndael鍙互瀹炰綔鍦?/span>Pentium ( Pro ) 絳夎綆楁満涓婏紝騫跺凡鐩稿綋蹇殑閫熷害澶勭悊榪愮畻錛涜屽湪琛ㄦ牸澶у皬涓庢晥鐜囦箣闂存槸鍙互鍋氬彇鑸嶇殑銆?/span>
2. Rijndael鍙互瀹炰綔鍦ㄦ櫤鑳藉崱(Smart Card)涓婏紝浣跨敤灝戦噺鐨?/span>RAM錛屽皯閲忕殑紼嬪簭浠g爜錛涘湪ROM涓庢晥鐜囦箣闂翠篃鏄彲浠ュ仛鍙栬垗鐨勩?/span>
3. 鍦ㄨ璁′笂錛屽洖鍚堢殑杞崲鏄彲騫寵澶勭悊鐨勩?/span>
4. 鍔犲瘑娉曚笉閲囩敤綆楁湳榪愮畻錛屼笉浼氬洜涓轟笉鍚屽鐞嗗櫒鏋舵瀯鑰屾湁鎵鍋忓樊銆?/span>
璁捐綆鍗曞寲錛?/span>
1. 璁捐涓婁笉寮曠敤鍏跺畠鍔犲瘑緇勪歡錛屽S-box銆?/span>
2. 瀹夊叏搴︿笉寤虹珛鍦ㄤ竴浜涘垎鏋愪笉澶熸槑紜殑綆楁湳榪愮畻涔嬩笂銆?/span>
3. 鍔犲瘑娉曠揣鍑戯紝涓嶆槗钘忓叆鏆楅棬絳夌▼搴忎唬鐮併?/span>
闄ゆ涔嬪錛?/span>Rijndael鏇村厑璁稿彲鍙樺姩鐨勫尯鍧楅暱搴﹀強閲戦挜闀垮害錛屽叾闀垮害鍙敱128浣嶅埌256浣嶄箣闂達紱鎵浠ュ洖鍚堟暟涔熸槸鍙彉鍔ㄧ殑銆?/span>
(2)Rijndael鐨勯檺鍒訛細
鍦ㄨВ瀵嗚繃紼嬩腑鏈変互涓嬮檺鍒?/span>
1. 瀹炰綔鍦ㄦ櫤鎱у崱鏃訛紝瑙e瘑涓嶅鍔犲瘑鏉ョ殑鏈夋晥鐜囷紝瑙e瘑闇瑕佹洿澶氱殑紼嬪簭浠g爜鍙?/span>cycles錛屼絾鏄窡鍏跺畠綆楁硶姣旇搗鏉ワ紝浠嶇劧鏄揩閫熺殑銆?/span>
2. 浠ヨ蔣浠惰岃█錛屽姞瀵嗗拰瑙e瘑浣跨敤涓嶅悓鐨勭▼搴忓拰琛ㄦ牸銆?/span>
3. 浠ョ‖浠惰岃█錛岃В瀵嗗彧鑳介噸鐢ㄩ儴鍒嗗姞瀵嗙殑鐢?shù)璧\銆?/span>
瀵瑰叧娉ㄦц兘鐨勭▼搴忓紑鍙戜漢鍛樿岃█錛屼竴涓ソ鐨勮鏃墮儴浠舵棦鏄泭鍙嬶紝涔熸槸鑹笀銆傝鏃跺櫒鏃㈠彲浠ヤ綔涓虹▼搴忕粍浠跺府鍔╃▼搴忓憳綺劇‘鐨勬帶鍒剁▼搴忚繘紼嬶紝鍙堟槸涓浠舵湁鍔涚殑璋冭瘯姝﹀櫒錛屽湪鏈夌粡楠岀殑紼嬪簭鍛樻墜閲屽彲浠ュ敖蹇殑紜畾紼嬪簭鐨勬ц兘鐡墮錛屾垨鑰呭涓嶅悓鐨勭畻娉曚綔鍑烘湁璇存湇鍔涚殑鎬ц兘姣旇緝銆?/span>
鍦?/span>Windows騫沖彴涓嬶紝甯哥敤鐨勮鏃跺櫒鏈変袱縐嶏紝涓縐嶆槸timeGetTime澶氬獟浣撹鏃跺櫒錛屽畠鍙互鎻愪緵姣綰х殑璁℃椂銆備絾榪欎釜綺懼害瀵瑰緢澶氬簲鐢ㄥ満鍚堣岃█榪樻槸澶矖緋欎簡銆傚彟涓縐嶆槸QueryPerformanceCount璁℃暟鍣紝闅忕郴緇熺殑涓嶅悓鍙互鎻愪緵寰綰х殑璁℃暟銆傚浜庡疄鏃跺浘褰㈠鐞嗐佸濯掍綋鏁版嵁嫻佸鐞嗐佹垨鑰呭疄鏃剁郴緇熸瀯閫犵殑紼嬪簭鍛橈紝鍠勭敤QueryPerformanceCount/QueryPerformanceFrequency鏄竴欏瑰熀鏈姛銆?/span>
鏈枃瑕佷粙緇嶇殑錛屾槸鍙︿竴縐嶇洿鎺ュ埄鐢?/span>Pentium CPU鍐呴儴鏃墮棿鎴寵繘琛岃鏃剁殑楂樼簿搴﹁鏃舵墜孌點備互涓嬭璁轟富瑕佸緱鐩婁簬銆?/span>Windows鍥懼艦緙栫▼銆嬩竴涔︼紝絎?/span>15欏碉紞17欏碉紝鏈夊叴瓚g殑璇昏呭彲浠ョ洿鎺ュ弬鑰冭涔︺傚叧浜?/span>RDTSC鎸囦護鐨勮緇嗚璁猴紝鍙互鍙傝?/span>Intel浜у搧鎵嬪唽銆傛湰鏂囦粎浠呬綔鎶涚爾涔嬬敤銆?/span>
鍦?/span>Intel Pentium浠ヤ笂綰у埆鐨?/span>CPU涓紝鏈変竴涓О涓?/span>“鏃墮棿鎴籌紙Time Stamp錛?/span>”鐨勯儴浠訛紝瀹冧互64浣嶆棤絎﹀彿鏁村瀷鏁扮殑鏍煎紡錛岃褰曚簡鑷?/span>CPU涓婄數(shù)浠ユ潵鎵緇忚繃鐨勬椂閽熷懆鏈熸暟銆傜敱浜庣洰鍓嶇殑CPU涓婚閮介潪甯擱珮錛屽洜姝よ繖涓儴浠跺彲浠ヨ揪鍒扮撼縐掔駭鐨勮鏃剁簿搴︺傝繖涓簿紜ф槸涓婅堪涓ょ鏂規(guī)硶鎵鏃犳硶姣旀嫙鐨勩?/span>
鍦?/span>Pentium浠ヤ笂鐨?/span>CPU涓紝鎻愪緵浜嗕竴鏉℃満鍣ㄦ寚浠?/span>RDTSC錛?/span>Read Time Stamp Counter錛夋潵璇誨彇榪欎釜鏃墮棿鎴崇殑鏁板瓧錛屽茍灝嗗叾淇濆瓨鍦?/span>EDX:EAX瀵勫瓨鍣ㄥ涓傜敱浜?/span>EDX:EAX瀵勫瓨鍣ㄥ鎭板ソ鏄?/span>Win32騫沖彴涓?/span>C++璇█淇濆瓨鍑芥暟榪斿洖鍊肩殑瀵勫瓨鍣紝鎵浠ユ垜浠彲浠ユ妸榪欐潯鎸囦護鐪嬫垚鏄竴涓櫘閫氱殑鍑芥暟璋冪敤銆傚儚榪欐牱錛?/span>
inline unsigned __int64 GetCycleCount()
{
__asm RDTSC
}
浣嗘槸涓嶈錛屽洜涓?/span>RDTSC涓嶈C++鐨勫唴宓屾眹緙栧櫒鐩存帴鏀寔錛屾墍浠ユ垜浠鐢?/span>_emit浼寚浠ょ洿鎺ュ祵鍏ヨ鎸囦護鐨勬満鍣ㄧ爜褰㈠紡0X0F銆?/span>0X31錛屽涓嬶細
inline unsigned __int64 GetCycleCount()
{
__asm _emit 0x0F
__asm _emit 0x31
}
浠ュ悗鍦ㄩ渶瑕佽鏁板櫒鐨勫満鍚堬紝鍙互鍍忎嬌鐢ㄦ櫘閫氱殑Win32 API涓鏍鳳紝璋冪敤涓ゆGetCycleCount鍑芥暟錛屾瘮杈冧袱涓繑鍥炲肩殑宸紝鍍忚繖鏍鳳細
unsigned long t;
t = (unsigned long)GetCycleCount();
//Do Something time-intensive ...
t -= (unsigned long)GetCycleCount();
銆?/span>Windows鍥懼艦緙栫▼銆嬬15欏電紪鍐欎簡涓涓被錛屾妸榪欎釜璁℃暟鍣ㄥ皝瑁呰搗鏉ャ傛湁鍏磋叮鐨勮鑰呭彲浠ュ幓鍙傝冮偅涓被鐨勪唬鐮併備綔鑰呬負浜嗘洿綺劇‘鐨勫畾鏃訛紝鍋氫簡涓鐐瑰皬灝忕殑鏀硅繘錛屾妸鎵цRDTSC鎸囦護鐨勬椂闂達紝閫氳繃榪炵畫涓ゆ璋冪敤GetCycleCount鍑芥暟璁$畻鍑烘潵騫朵繚瀛樹簡璧鋒潵錛屼互鍚庢瘡嬈¤鏃剁粨鏉熷悗錛岄兘浠庡疄闄呭緱鍒扮殑璁℃暟涓噺鎺夎繖涓灝忔鏃墮棿錛屼互寰楀埌鏇村噯紜殑璁℃椂鏁板瓧銆備絾鎴戜釜浜鴻寰楄繖涓鐐圭偣鏀硅繘鎰忎箟涓嶅ぇ銆傚湪鎴戠殑鏈哄櫒涓婂疄嫻嬶紝榪欐潯鎸囦護澶ф鑺辨帀浜嗗嚑鍗佸埌100澶氫釜鍛ㄦ湡錛屽湪Celeron 800MHz鐨勬満鍣ㄤ笂錛岃繖涓嶈繃鏄崄鍒嗕箣涓寰鐨勬椂闂淬傚澶у鏁板簲鐢ㄦ潵璇達紝榪欑偣鏃墮棿瀹屽叏鍙互蹇界暐涓嶈錛涜屽閭d簺紜疄瑕佺簿紜埌綰崇鏁伴噺綰х殑搴旂敤鏉ヨ錛岃繖涓ˉ鍋夸篃榪囦簬綺楃硻浜嗐?/span>
榪欎釜鏂規(guī)硶鐨勪紭鐐規(guī)槸錛?/span>
1.楂樼簿搴︺傚彲浠ョ洿鎺ヨ揪鍒扮撼縐掔駭鐨勮鏃剁簿搴︼紙鍦?/span>1GHz鐨?/span>CPU涓婃瘡涓椂閽熷懆鏈熷氨鏄竴綰崇錛夛紝榪欐槸鍏朵粬璁℃椂鏂規(guī)硶鎵闅句互浼佸強鐨勩?/span>
2.鎴愭湰浣庛?/span>timeGetTime 鍑芥暟闇瑕侀摼鎺ュ濯掍綋搴?/span>winmm.lib錛?/span>QueryPerformance* 鍑芥暟鏍規(guī)嵁MSDN鐨勮鏄庯紝闇瑕佺‖浠剁殑鏀寔錛堣櫧鐒舵垜榪樻病鏈夎榪囦笉鏀寔鐨勬満鍣級鍜?/span>KERNEL搴撶殑鏀寔錛屾墍浠ヤ簩鑰呴兘鍙兘鍦?/span>Windows騫沖彴涓嬩嬌鐢紙鍏充簬DOS騫沖彴涓嬬殑楂樼簿搴﹁鏃墮棶棰橈紝鍙互鍙傝冦婂浘褰㈢▼搴忓紑鍙戜漢鍛樻寚鍗椼嬶紝閲岄潰鏈夊叧浜庢帶鍒跺畾鏃跺櫒8253鐨勮緇嗚鏄庯級銆備絾RDTSC鎸囦護鏄竴鏉?/span>CPU鎸囦護錛屽嚒鏄?/span>i386騫沖彴涓?/span>Pentium浠ヤ笂鐨勬満鍣ㄥ潎鏀寔錛岀敋鑷蟲病鏈夊鉤鍙扮殑闄愬埗錛堟垜鐩鎬俊i386鐗堟湰UNIX鍜?/span>Linux涓嬭繖涓柟娉曞悓鏍烽傜敤錛屼絾娌℃湁鏉′歡璇曢獙錛夛紝鑰屼笖鍑芥暟璋冪敤鐨勫紑閿鏄渶灝忕殑銆?/span>
3.鍏鋒湁鍜?/span>CPU涓婚鐩存帴瀵瑰簲鐨勯熺巼鍏崇郴銆備竴涓鏁扮浉褰撲簬1/(CPU涓婚Hz鏁?/span>)縐掞紝榪欐牱鍙鐭ラ亾浜?/span>CPU鐨勪富棰戯紝鍙互鐩存帴璁$畻鍑烘椂闂淬傝繖鍜?/span>QueryPerformanceCount涓嶅悓錛屽悗鑰呴渶瑕侀氳繃QueryPerformanceFrequency鑾峰彇褰撳墠璁℃暟鍣ㄦ瘡縐掔殑璁℃暟嬈℃暟鎵嶈兘鎹㈢畻鎴愭椂闂淬?/span>
榪欎釜鏂規(guī)硶鐨勭己鐐規(guī)槸錛?/span>
1.鐜版湁鐨?/span>C/C++緙栬瘧鍣ㄥ鏁頒笉鐩存帴鏀寔浣跨敤RDTSC鎸囦護錛岄渶瑕佺敤鐩存帴宓屽叆鏈哄櫒鐮佺殑鏂瑰紡緙栫▼錛屾瘮杈冮夯鐑︺?/span>
2.鏁版嵁鎶栧姩姣旇緝鍘夊銆傚叾瀹炲浠諱綍璁¢噺鎵嬫鑰岃█錛岀簿搴﹀拰紼沖畾鎬ф案榪滄槸涓瀵圭煕鐩俱傚鏋滅敤浣庣簿搴︾殑timeGetTime鏉ヨ鏃訛紝鍩烘湰涓婃瘡嬈¤鏃剁殑緇撴灉閮芥槸鐩稿悓鐨勶紱鑰?/span>RDTSC鎸囦護姣忔緇撴灉閮戒笉涓鏍鳳紝緇忓父鏈夊嚑鐧劇敋鑷充笂鍗冪殑宸窛銆傝繖鏄繖縐嶆柟娉曢珮綺懼害鏈韓鍥烘湁鐨勭煕鐩俱?/span>
鍏充簬榪欎釜鏂規(guī)硶璁℃椂鐨勬渶澶ч暱搴︼紝鎴戜滑鍙互綆鍗曠殑鐢ㄤ笅鍒楀叕寮忚綆楋細
鑷?/span>CPU涓婄數(shù)浠ユ潵鐨勭鏁?/span> = RDTSC璇誨嚭鐨勫懆鏈熸暟 / CPU涓婚閫熺巼錛?/span>Hz錛?/span>
64浣嶆棤絎﹀彿鏁存暟鎵鑳借〃杈劇殑鏈澶ф暟瀛楁槸1.8×10^19錛屽湪鎴戠殑Celeron 800涓婂彲浠ヨ鏃跺ぇ綰?/span>700騫達紙涔︿腑璇村彲浠ュ湪200MHz鐨?/span>Pentium涓婅鏃?/span>117騫達紝榪欎釜鏁板瓧涓嶇煡閬撴槸鎬庝箞寰楀嚭鏉ョ殑錛屼笌鎴戠殑璁$畻鏈夊嚭鍏ワ級銆傛棤璁哄浣曪紝鎴戜滑澶у彲涓嶅繀鍏沖績婧㈠嚭鐨勯棶棰樸?/span>
涓嬮潰鏄嚑涓皬渚嬪瓙錛岀畝瑕佹瘮杈冧簡涓夌璁℃椂鏂規(guī)硶鐨勭敤娉曚笌綺懼害
//Timer1.cpp 浣跨敤浜?/span>RDTSC鎸囦護鐨?/span>Timer綾?/span>//KTimer綾葷殑瀹氫箟鍙互鍙傝銆?/span>Windows鍥懼艦緙栫▼銆?/span>P15
//緙栬瘧琛岋細CL Timer1.cpp /link USER32.lib
#include <stdio.h>
#include "KTimer.h"
main()
{
unsigned t;
KTimer timer;
timer.Start();
Sleep(1000);
t = timer.Stop();
printf("Lasting Time: %d\n",t);
}
//Timer2.cpp 浣跨敤浜?/span>timeGetTime鍑芥暟
//闇鍖呭惈<mmsys.h>錛屼絾鐢變簬Windows澶存枃浠墮敊緇煎鏉傜殑鍏崇郴
//綆鍗曞寘鍚?/span><windows.h>姣旇緝鍋鋒噿錛氾級
//緙栬瘧琛岋細CL timer2.cpp /link winmm.lib
#include <windows.h>
#include <stdio.h>
main()
{
DWORD t1, t2;
t1 = timeGetTime();
Sleep(1000);
t2 = timeGetTime();
printf("Begin Time: %u\n", t1);
printf("End Time: %u\n", t2);
printf("Lasting Time: %u\n",(t2-t1));
}
//Timer3.cpp 浣跨敤浜?/span>QueryPerformanceCounter鍑芥暟
//緙栬瘧琛岋細CL timer3.cpp /link KERNEl32.lib
#include <windows.h>
#include <stdio.h>
main()
{
LARGE_INTEGER t1, t2, tc;
QueryPerformanceFrequency(&tc);
printf("Frequency: %u\n", tc.QuadPart);
QueryPerformanceCounter(&t1);
Sleep(1000);
QueryPerformanceCounter(&t2);
printf("Begin Time: %u\n", t1.QuadPart);
printf("End Time: %u\n", t2.QuadPart);
printf("Lasting Time: %u\n",( t2.QuadPart- t1.QuadPart));
}
////////////////////////////////////////////////
//浠ヤ笂涓変釜紺轟緥紼嬪簭閮芥槸嫻嬭瘯1縐掗挓浼戠湢鎵鑰楄垂鐨勬椂闂?/span>
婧愮爜涓嬭澆: http://www.ppcn.net/upload
P2P涔婾DP絀塊廚AT鐨勫師鐞嗕笌瀹炵幇(shootingstar
鏂囩珷璇存槑:
鍏充簬UDP絀塊廚AT鐨勪腑鏂囪祫鏂欏湪緗戠粶涓婃槸寰堝皯鐨勶紝浠呮湁<
鍐嶆鎰熻阿shootingstars緗戝弸鐨勬棭鏈熻礎鐚? 琛ㄧず璋㈡剰銆?
NAT(The IP Network Address Translator) 鐨勬蹇靛拰鎰忎箟鏄粈涔?
NAT, 涓枃緲昏瘧涓虹綉緇滃湴鍧杞崲銆傚叿浣撶殑璇︾粏淇℃伅鍙互璁塊棶RFC 1631 - http://www.faqs.org/rfcs
瑕佹兂瀹屽叏鏄庣櫧NAT 鐨勪綔鐢紝鎴戜滑蹇呴』鐞嗚ВIP鍦板潃鐨勪袱澶у垎綾伙紝涓綾繪槸縐佹湁IP鍦板潃
鍐呯綉IP鍦板潃: 鏄寚浣跨敤A/B/C綾諱腑鐨勭鏈夊湴鍧, 鍒嗛厤鐨処P鍦板潃鍦ㄥ叏鐞冧笉鎯ф湁鍞竴鎬э紝涔熷洜姝ゆ棤娉曡鍏跺畠澶栫綉涓繪満鐩存帴
NAT 鏈鍒濈殑鐩殑鏄負浣跨敤鍐呯綉IP鍦板潃鐨勮綆楁満鎻愪緵閫氳繃灝戞暟鍑犲彴鍏鋒湁鍏綉
鍥句竴: NAT 瀹炵幇浜嗙鏈塈P鐨勮綆楁満鍒嗕韓鍑犱釜鍏綉IP鍦板潃璁塊棶Internet
闅忕潃緗戠粶鐨勬櫘鍙婏紝IPv4鐨勫眬闄愭ф毚闇插嚭鏉ャ傚叕緗慖P鍦板潃鎴愪負涓縐?wbr>紼緙虹殑璧勬簮錛屾鏃禢AT 鐨勫姛鑳藉眬闄愪篃鏆撮湶鍑烘潵錛屽悓涓涓叕緗戠殑IP鍦板潃錛屾煇涓椂闂村彧鑳界敱涓鍙?wbr>縐佹湁IP鍦板潃鐨勮綆楁満浣跨敤銆備簬鏄疦APT(The IP Network Address/Port Translator)搴旇繍鑰岀敓錛孨APT瀹炵幇浜嗗鍙扮鏈塈P鍦板潃
NAPT 璐熻矗灝嗘煇浜涘唴緗慖P鍦板潃鐨勮綆楁満鍚戝閮ㄧ綉緇滃彂鍑虹殑TCP
鍥句簩: NAPT 瀹炵幇浜嗙鏈塈P鐨勮綆楁満鍒嗕韓涓涓叕緗慖P鍦板潃璁塊棶Internet
鍦ㄦ垜浠殑宸ヤ綔鍜岀敓媧諱腑, NAPT鐨勪綔鐢ㄩ殢澶勫彲瑙侊紝緇濆ぇ閮ㄥ垎鍏徃鐨勭綉緇滄灦鏋?wbr>錛岄兘鏄氳繃1鑷砃鍙版敮鎸丯APT鐨勮礬鐢卞櫒鏉ュ疄鐜板叕鍙哥殑鎵鏈夎綆楁満榪?wbr>鎺ュ閮ㄧ殑Internet緗戠粶鐨勩傚寘鎷湰浜哄湪鍐欒繖綃囨枃绔犵殑鏃跺?wbr>錛屼篃鏄湪瀹朵腑浣跨敤涓鍙癐BM絎旇鏈氳繃涓鍙板甯﹁繛鎺ョ殑鍙板紡鏈烘潵璁塊棶
NAPT(The IP Network Address/Port Translator) 涓轟綍闃葷浜哖2P杞歡鐨勫簲鐢?
閫氳繃NAPT 涓婄綉鐨勭壒鐐瑰喅瀹氫簡鍙兘鐢盢APT鍐呯殑璁$畻鏈轟富鍔ㄥ悜NAPT澶栭儴鐨勪富
NAT(The IP Network Address Translator) 榪涜UDP絀塊忕殑鍘熺悊鏄粈涔?
TCP/IP浼犺緭鏃朵富瑕佺敤鍒癟CP鍜孶DP鍗忚銆俆CP鍗忚鏄彲闈?wbr>鐨勶紝闈㈠悜榪炴帴鐨勪紶杈撳崗璁俇DP鏄笉鍙潬鐨勶紝鏃犺繛鎺ョ殑鍗忚
鍥句笁: NAPT 鏄浣曞皢縐佹湁IP鍦板潃鐨刄DP鏁版嵁鍖呬笌鍏綉涓繪満榪涜閫忔槑浼犺緭鐨勩?
UDP鍗忚鍖呯粡NAPT閫忔槑浼犺緭鐨勮鏄?
NAPT涓烘瘡涓涓猄ession鍒嗛厤涓涓狽APT鑷繁鐨勭鍙e彿
鍥懼洓: NAPT 灝嗗唴閮ㄥ彂鍑虹殑UDP鍗忚鍖呯殑婧愬湴鍧鍜屾簮绔彛鏀瑰彉浼犺緭緇欏叕緗慖P涓繪満
鍥句簲: NAPT 灝嗘敹鍒扮殑鍏綉IP涓繪満榪斿洖鐨刄DP鍗忚鍖呯殑鐩殑鍦板潃鍜岀洰鐨勭鍙f敼鍙?wbr>浼犺緭緇欏唴緗慖P璁$畻鏈虹幇鍦ㄦ垜浠ぇ姒傛槑鐧戒簡NAPT濡備綍瀹炵幇鍐呯綉璁$畻
A. 婧愬湴鍧(鍐呯綉IP鍦板潃)涓嶅悓錛屽拷鐣ュ叾瀹冨洜绱? 鍦∟APT涓婅偗瀹氬搴斾笉鍚岀殑Session B. 婧愬湴鍧(鍐呯綉IP鍦板潃)鐩稿悓錛屾簮绔彛涓嶅悓錛屽拷鐣ュ叾瀹冪殑鍥犵礌
D鐨勬儏鍐墊寮忔垜浠叧蹇冨拰瑕佽璁虹殑闂銆備緷鎹洰鐨勫湴鍧
Symmetric NAPT: 瀵逛簬鍒板悓涓涓狪P鍦板潃錛屼換鎰忕鍙g殑榪炴帴鍒嗛厤浣跨敤鍚屼竴涓猄essio
鍥懼叚: Symmetric 鐨勮嫳鏂囨剰鎬濇槸瀵圭О銆傚涓鍙e搴斿涓富鏈猴紝騫寵鐨勶紝瀵圭О鐨?
Cone NAPT: 瀵逛簬鍒板悓涓涓狪P鍦板潃錛屼換鎰忕鍙g殑榪炴帴鍒嗛厤浣跨敤鍚屼竴涓猄essio
鍥句竷: Cone 鐨勮嫳鏂囨剰鎬濇槸閿ャ備竴涓鍙e搴斿涓富鏈猴紝鏄笉鏄儚涓敟瀛?
鐜板湪緇濆ぇ澶氭暟鐨凬APT灞炰簬鍚庤咃紝鍗矯one NAT銆傛湰浜哄湪嫻嬭瘯鐨勮繃紼嬩腑錛屽彧濂戒嬌鐢ㄤ簡涓鍙版棩鏈殑Symmetr
涓嬮潰鎴戜滑鍐嶆潵鍒嗘瀽涓涓婲APT 宸ヤ綔鏃剁殑涓浜涙暟鎹粨鏋勶紝鍦ㄨ繖閲屾垜浠皢鐪熸璇存槑UDP鍙互絀塊廋on
Symmetric NAPT 宸ヤ綔鏃剁殑绔彛鏄犲皠鏁版嵁緇撴瀯濡備笅:
鍐呯綉淇℃伅琛?
[NAPT 鍒嗛厤绔彛] [ 鍐呯綉IP鍦板潃 ] [ 鍐呯綉绔彛 ] [ 澶栫綉IP鍦板潃 ] [ SessionTime 寮濮嬫椂闂?]
PRIMARY KEY( [NAPT 鍒嗛厤绔彛] ) -> 琛ㄧず渚濇嵁[NAPT 鍒嗛厤绔彛]寤虹珛涓婚敭錛屽繀欏誨敮涓涓斿緩绔嬬儲寮曪紝鍔犲揩鏌ユ壘. UNIQUE( [ 鍐呯綉IP鍦板潃 ], [ 鍐呯綉绔彛 ] ) -> 琛ㄧず榪欎袱涓瓧孌佃仈鍚堣搗鏉ヤ笉鑳介噸澶? UNIQUE( [ 鍐呯綉IP鍦板潃 ], [ 鍐呯綉绔彛 ], [ 澶栫綉IP鍦板潃 ] ) -> 琛ㄧず榪欎笁涓瓧孌佃仈鍚堣搗鏉ヤ笉鑳介噸澶?
鏄犲皠琛?
[NAPT 鍒嗛厤绔彛] [ 澶栫綉绔彛 ]
UNIQUE( [NAPT 鍒嗛厤绔彛], [ 澶栫綉绔彛 ] ) -> 琛ㄧず榪欎袱涓瓧孌佃仈鍚堣搗鏉ヤ笉鑳介噸澶?
Cone NAPT 宸ヤ綔鏃剁殑绔彛鏄犲皠鏁版嵁緇撴瀯濡備笅:
鍐呯綉淇℃伅琛?
[NAPT 鍒嗛厤绔彛] [ 鍐呯綉IP鍦板潃 ] [ 鍐呯綉绔彛 ] [ SessionTime 寮濮嬫椂闂?]
PRIMARY KEY( [NAPT 鍒嗛厤绔彛] ) -> 琛ㄧず渚濇嵁[NAPT 鍒嗛厤绔彛]寤虹珛涓婚敭錛屽繀欏誨敮涓涓斿緩绔嬬儲寮曪紝鍔犲揩鏌ユ壘. UNIQUE( [ 鍐呯綉IP鍦板潃 ], [ 鍐呯綉绔彛 ] ) -> 琛ㄧず榪欎袱涓瓧孌佃仈鍚堣搗鏉ヤ笉鑳介噸澶?
澶栫綉淇℃伅琛?
[ wid 涓婚敭鏍囪瘑 ] [ 澶栫綉IP鍦板潃 ] [ 澶栫綉绔彛 ]
PRIMARY KEY( [ wid 涓婚敭鏍囪瘑 ] ) -> 琛ㄧず渚濇嵁[ wid 涓婚敭鏍囪瘑 ]寤虹珛涓婚敭錛屽繀欏誨敮涓涓斿緩绔嬬儲寮曪紝鍔犲揩鏌ユ壘. UNIQUE( [ 澶栫綉IP鍦板潃 ], [ 澶栫綉绔彛 ] ) -> 琛ㄧず榪欎袱涓瓧孌佃仈鍚堣搗鏉ヤ笉鑳介噸澶?
鏄犲皠琛? 瀹炵幇涓瀵瑰錛岀殑
[NAPT 鍒嗛厤绔彛] [ wid 涓婚敭鏍囪瘑 ]
UNIQUE( [NAPT 鍒嗛厤绔彛], [ wid 涓婚敭鏍囪瘑 ] ) -> 琛ㄧず榪欎袱涓瓧孌佃仈鍚堣搗鏉ヤ笉鑳介噸澶? UNIQUE( [ wid 涓婚敭鏍囪瘑 ] ) -> 鏍囪瘑姝ゅ瓧孌典笉鑳介噸澶?
鐪嬪畬浜嗕笂闈㈢殑鏁版嵁緇撴瀯鏄洿鏄庣櫧浜嗚繕鏄洿鏅曚簡錛?鍛靛懙! 澶氭兂涓浼氬効灝變細鏄庣櫧浜嗐傞氳繃NAT,鍐呯綉璁$畻鏈鴻綆楁満鍚戝榪炵粨鏄緢
c 鏄竴鍙板湪NAPT鍚庨潰鐨勫唴緗戣綆楁満錛宻鏄竴鍙版湁澶栫綉IP鍦板潃鐨勮綆?wbr>鏈恒俢 涓誨姩鍚?s 鍙戣搗榪炴帴璇鋒眰錛孨APT渚濇嵁涓婇潰鎻忚堪鐨勮鍒欏湪鑷繁鐨勬暟鎹粨鏋勪腑璁板綍
c[192.168.0.6:1827] <-> [priv ip: 192.168.0.1]NAPT[pub ip: 61.51.99.86:9881] <-> s[61.51.76.102:8098]
鐢辨鍙錛屼竴鍙板緗慖P鍦板潃鐨勮綆楁満鎯沖拰NAPT鍚庨潰鐨勫唴緗戣綆楁満
鐜板湪鎴戜滑鍐嶆潵鍒嗘瀽涓涓嬫垜浠渶鍏沖績鐨勪袱涓狽APT鍚庨潰鐨勫唴緗戣綆楁満濡?wbr>浣曞疄鐜扮洿鎺ラ氳鍛? 涓よ呴兘鏃犳硶涓誨姩鍙戝嚭榪炴帴璇鋒眰錛岃皝涔熶笉鐭ラ亾瀵規(guī)柟鐨凬APT鐨勫叕緗慖P
鎴戜滑鍋囪涓や釜鍐呯綉璁$畻鏈哄垎鍒負A鍜孊錛屽搴旂殑NAPT鍒嗗埆涓篈N鍜?
NAPT(The IP Network Address/Port Translator) 榪涜UDP絀塊忕殑鍏蜂綋鎯呭喌鍒嗘瀽!
棣栧厛鏄庣‘鐨勫皢NAPT璁懼鎸夌収涓婇潰鐨勮鏄庡垎涓? Symmetric NAPT 鍜?Cone NAPT, Cone NAPT 鏄垜浠渶瑕佺殑銆俉in9x/2K/XP/2003 鑷甫鐨凬APT涔熶負Cone NAPT銆?
絎竴縐嶆儏鍐? 鍙屾柟閮芥槸Symmetric NAPT:
姝ゆ儏鍐靛簲緇欎笉瀛樺湪浠涔堥棶棰橈紝鑲畾鏄笉鏀寔UDP絀塊忋?
絎簩縐嶆儏鍐? 鍙屾柟閮芥槸Cone NAPT:
姝ゆ儏鍐墊槸鎴戜滑闇瑕佺殑錛屽彲浠ヨ繘琛孶DP絀塊忋?
絎笁縐嶆儏鍐? 涓涓槸Symmetric NAPT, 涓涓槸Cone NAPT:
姝ゆ儏鍐墊瘮杈冨鏉傦紝浣嗘垜浠寜鐓т笂闈㈢殑鎻忚堪鍜屾暟鎹満鏋勮繘琛屼竴涓嬪垎鏋愪篃寰?wbr>瀹規(guī)槗灝變細鏄庣櫧浜? 鍒嗘瀽濡備笅,
鍋囪: A -> Symmetric NAT, B -> Cone NAT
1. A 鎯寵繛鎺?B, A 浠庢湇鍔″櫒閭e効鑾峰彇鍒?B 鐨凬AT鍦板潃鍜屾槧灝勭鍙? A 閫氱煡鏈嶅姟鍣紝鏈嶅姟鍣ㄥ憡鐭?B A鐨凬AT鍦板潃鍜屾槧灝勭鍙? B 鍚?A 鍙戣搗榪炴帴錛孉 鑲畾鏃犳硶鎺ユ敹鍒般傛鏃?A 鍚?B 鍙戣搗榪炴帴錛?A 瀵瑰簲鐨凬AT寤虹珛浜嗕竴涓柊鐨凷ession錛屽垎閰嶄簡涓涓柊鐨勬槧灝勭
2. B 鎯寵繛鎺?A, B 浠庢湇鍔″櫒閭e効鑾峰彇鍒?A 鐨凬AT鍦板潃鍜屾槧灝勭鍙? B 閫氱煡鏈嶅姟鍣? 鏈嶅姟鍣ㄥ憡鐭?A B鐨凬AT鍦板潃鍜屾槧灝勭鍙?A 鍚?B 鍙戣搗榪炴帴, A 瀵瑰簲鐨凬AT寤虹珛浜嗕竴涓柊鐨凷ession錛屽垎閰嶄簡涓涓柊鐨勬槧灝勭
鏍規(guī)嵁浠ヤ笂鍒嗘瀽錛屽彧鏈夊綋榪炴帴鐨勪袱绔殑NAT閮戒負Cone NAT鐨勬儏鍐典笅錛屾墠鑳借繘琛孶DP鐨勫唴緗戠┛閫忎簰鑱斻?
NAPT(The IP Network Address/Port Translator) 榪涜UDP絀塊忓浣曡繘琛岀幇瀹炵殑楠岃瘉鍜屽垎鏋?
闇瑕佺殑緗戠粶緇撴瀯濡備笅:
涓変釜NAT鍚庨潰鐨勫唴緗戞満鍣紝涓や釜澶栫綉鏈嶅姟鍣ㄣ傚叾涓袱鍙癈one NAPT錛屼竴鍙?Symmetric NAPT銆?
楠岃瘉鏂規(guī)硶:
鍙互浣跨敤鏈▼搴忔彁渚涚殑婧愮爜錛岀紪璇戯紝鐒跺悗鍒嗗埆榪愯鏈嶅姟鍣ㄧ▼搴忓拰瀹㈡埛绔?wbr>銆備慨鏀硅繃鍚庣殑婧愮爜澧炲姞浜嗗鎴風涔嬮棿鐩存帴閫氳繃IP鍦板潃鍜岀鍙e彂閫佹秷鎭?wbr>鐨勫懡浠わ紝鍒╃敤姝ゅ懡浠わ紝浣犲彲浠ユ墜鍔ㄧ殑楠岃瘉NAPT鐨勭┛閫忔儏鍐?wbr>銆備負浜嗘柟渚挎搷浣滐紝鎺ㄨ崘浣犱嬌鐢ㄤ竴涓繙紼嬬櫥闄嗚蔣浠訛紝鍙互鐩存帴鍦ㄤ竴鍙版満鍣?wbr>涓婃搷浣滄墍鏈夌殑鐩稿叧鐨勮綆楁満錛岃繖鏍峰緢鏂逛究錛屼竴涓漢灝卞彲浠ュ畬鎴愭墍鏈夌殑宸?wbr>浣滀簡銆傚懙鍛碉紝鏈漢灝辨槸榪欎箞瀹屾垚鐨勩傛榪庢湁鍏磋叮鍜岀粡楠岀殑鏈嬪弸鏉ヤ俊鎵硅瘎