å
責äºé
ãã®èšäºã¯æ
å ±æäŸã®ã¿ãç®çãšããŠå
¬éãããŠããããã®èšäºã§å
¬éãããŠããè³æã䜿çšããå Žåãèè
ã¯è²¬ä»»ãè² ããŸããã
ãŸãããã®èšäºã§GSMãã©ãã£ãã¯ãèãããã®ã¹ããããã€ã¹ãããã¬ã€ããèŠã€ããããšãæåŸ
ããŠããå ŽåããŸãã¯ãã®èšäºãèªãã§ãå人ãç¥äººã
ãããã®é»è©±ã§ã®äŒè©±ã«ã¢ã¯ã»ã¹ããããšãæãã§ããå Žåã¯ããããç¡èŠããæ¹ãè¯ãããšãããã«èŠåããããšæããŸã ããã§ã¯äœãé¢çœããã®ã¯èŠã€ãããŸããã æ¬åœã«ãã«ããã®äžã«è¡ããªãã§ãã ãããéå±ã§ãã
ããŒã1ïŒGSMã»ãã¥ãªãã£ã®ãã€ã©ã€ã
GSMãããã¯ãŒã¯ã§äœ¿çšãããæå·åã¢ã«ãŽãªãºã ã®èª¬æã«é²ãåã«ããŠãŒã¶ãŒã®èªèšŒæ¹æ³ãšæå·åããŒã®çææ¹æ³ã«ã€ããŠèããŠã¿ãŸãããã ãããè¡ãããã«ããŠã£ãããã£ã¢ããåçšããåçã䜿çšããŸãïŒå質ã«è¬çœªããŸããããã以äžè¯ããã®ã¯èŠã€ãããŸããã§ããïŒã

ãã®å³ã§ã¯ã次ã®æé ãæš¡åŒçã«ç€ºããŠããŸãã
- ãªãã¬ãŒã¿ãŒã®é»è©±ããããã¯ãŒã¯ã«æ¥ç¶ãããŠããŸãã
- çæ£æ§ã確èªããããã«ãé»è©±ã¯TMSIïŒTemporary Mobile Subscriber IdentityïŒãšåŒã°ããç¹å¥ãªèå¥ã³ãŒããéä¿¡ããŸãã
- èªèšŒã»ã³ã¿ãŒïŒCAïŒã¯128ãããã®ä¹±æ°RANDãçæãããããã¢ãã€ã«ã¹ããŒã·ã§ã³ïŒMSïŒã«éä¿¡ããŸãã
- MSã¯ããã©ã€ããŒãããŒK iãšèªèšŒã¢ã«ãŽãªãºã A3ã䜿çšããŠãåä¿¡ããRANDçªå·ãæå·åããŸãã
- MCã¯ãåã®æé ã§ååŸããã·ãŒã±ã³ã¹ããæåã®32ããããååŸãïŒSRESïŒçœ²åä»ãå¿çïŒãšåŒã³ãŸãããïŒãCAã«éãè¿ããŸãã
- CAã¯åãæäœãè¡ãã32ãããã®XRESã·ãŒã±ã³ã¹ïŒäºæãããå¿çïŒãåãåããŸãã
- 次ã«ãCAã¯SRESãšXRESãæ¯èŒããŸãã äž¡æ¹ã®å€ãçããå Žåãé»è©±ã¯èªèšŒããããšèŠãªãããŸãã
- MSãšCAã¯ãç§å¯éµK iãšéµçæã¢ã«ãŽãªãºã A8 K c = A8 ki ïŒRANDïŒã䜿çšããŠã»ãã·ã§ã³æå·åéµãèšç®ããŸã
èªèšŒã¢ã«ãŽãªãºã A3ãšããŒçæã¢ã«ãŽãªãºã A8ã«ã€ããŠèšãã°ãå®éã«ã¯ã»ãšãã©ã®ã¢ãã€ã«ãªãã¬ãŒã¿ãŒãCOMP128ãšåŒã°ãããã®ç®çã®ããã«1ã€ã®ã¢ã«ãŽãªãºã ã䜿çšããŠããããšã«æ³šæããå¿
èŠããããŸãïŒCOMP128-1ãCOMP128-2ãCOMP128-3ã«å€ãã®å€æŽããããŸãïŒã
COMP128ã¯éåžžã®ããã·ã¥é¢æ°ã§ãå
¥åã§128ãããã·ãŒã±ã³ã¹ãåãåããåºåã§96ãããã·ãŒã±ã³ã¹ãè¿ããŸãã
ãã®ãããèªèšŒã«ç°ãªãã¢ã«ãŽãªãºã ã䜿çšããŠã»ãã·ã§ã³ããŒãçæãã代ããã«ã次ã®ã¹ããŒã ã䜿çšãããŸãã
SRES = COMP128ããã®æåã®32ãããïŒK
i || RANDïŒ
K
c = COMP128ã®æåŸã®64ãããïŒK
i || RANDïŒã
æå·åã®åžžãšããŠãéçºè
ã®æéãç¯çŽããããšããè©Šã¿ã¯å®å
šãªå€±æã§ããããšãå€æããŸããã GSMãããã¯ãŒã¯ã®ã»ãã¥ãªãã£ã¯ãåœåã¯ãæªç¥ã«ããã»ãã¥ãªãã£ãã®ååã«åºã¥ããŠããŸããã ãããŠã1998幎ã«Marc BricenoãIan GoldbergãDavid Wagnerããæãç 究è
ã°ã«ãŒãã«ãã£ãŠã¢ã«ãŽãªãºã ãçºèŠããããšãã1ã€ã®èå³æ·±ãæ©èœãæããã«ãªããŸãããç§å¯éµK
iã®æåŸã®10ããã
ã¯åžžã«ãŒãã§ããã ãã®å¥åŠãªç¹æ§ãšããèªçæ¥ã®æ»æãã«å¯ŸããCOMP128ã®è匱æ§ãå©çšããŠãMarc BricenoãIan GoldbergãDavid Wagnerã¯ãSIMã«ãŒãããç§å¯éµK
iãæœåºã§ããŸããã
ãã®ç 究ã®çµæãCOMP128ã¢ã«ãŽãªãºã ãåºãæåŠããããã®æè¡çãªè©³çŽ°ã¯ç§å¯ã«ããããããä¿¡é Œæ§ã®é«ãä¿®æ£COMP128-2ããã³COMP128-3ã«çœ®ãæããããŸããã ããŒã...ããã¯äœããæãåºãããŸããïŒ
ããŒã2ïŒA5 / 1æå·åã¢ã«ãŽãªãºã
次ã«ãããäžè¬çãªãã®ãããããã©ã€ããŒããªãã®ã«ç§»ããé»è©±ã§ã®äŒè©±ã®GSMæå·åãã©ã®ããã«å®è£
ããããã«ã€ããŠè©±ããŸãããã
GSMã®æå·åã¢ã«ãŽãªãºã ãšããŠãA5ãã¡ããªãŒã®ã¢ã«ãŽãªãºã ã䜿çšãããŸãã çŸåšããã®ãã¡ã®3ã€ã®ã¿ã§ãã
- A5 / 1-çŸåšæãäžè¬çãªã¹ããªãŒã æå·ã
- A5 / 2㯠ã以åã®ã貧匱ãªãã¢ã«ãŽãªãºã ã®å€åœ¢ã§ãã 圌ã®ãå
ãã«éåžžã«äŒŒãŠããŸãããæåã¯A5 / 1ã®éåžžã«åŒ±äœåããããŒãžã§ã³ã«ã€ããŠèããŸããã çŸåšäœ¿çšãããŠããŸãã
- A5 / 3ãããã¯æå·ã å»æ¢ãããA5 / 1ã眮ãæããããã«2002幎ã«èšèšãããŸããã ãã ããçŸåšã¯3GPPãããã¯ãŒã¯ã§ã®ã¿äœ¿çšãããŠããŸãã ã¢ã«ãŽãªãºã ã«å€ãã®è匱æ§ãèŠã€ãããŸããããå®éã®æ»æã«ã€ããŠã¯ãŸã 話ããããŸããã
ã¢ã«ãŽãªãºã A5 / 1ãããã«è©³ããèããŠã¿ãŸãããã
ãããã£ãŠãåè¿°ã®ããã«ãA5 / 1ã¯ã¹ããªãŒã æå·ã§ãã ãŸãããŠã£ãããã£ã¢ã®åçã¯æ¥ãã§å©ãã«ãªããŸãã

A5 / 1æå·ã®å
éšç¶æ
ã¯ããã£ãŒãããã¯R1ãR2ãR3ãããããé·ã19ã22ãããã³23ãããïŒåèš64ãããïŒã®3ã€ã®ç·åœ¢ã·ããã¬ãžã¹ã¿ã§æ§æãããŠããŸãã
ã¬ãžã¹ã¿R1ãR2ãR3ã®ã·ããã¯ãç¹å®ã®æ¡ä»¶ãæºããããå Žåã«ã®ã¿çºçããŸãã åã¬ãžã¹ã¿ã«ã¯ãã¯ããã¯å¶åŸ¡ãããããå«ãŸããŠããŸãã R1ã§ã¯ããã¯8çªç®ã®ãããã§ãããR2ããã³R3ã§ã¯10çªç®ã®ãããã§ãã åã¹ãããã§ãåæãããã®å€ã3ã€ãã¹ãŠã®ã¬ãžã¹ã¿ã®åæãããã®å€ã®ã»ãšãã©ã«çããã¬ãžã¹ã¿ã®ã¿ãã·ãããããŸãã
ã¢ã«ãŽãªãºã ãå®è¡ããåã«ãã¬ãžã¹ã¿ã®åæåãå®è¡ãããŸãã 次ã®ããã«çºçããŸãã
- R1 = R2 = R3 = 0
- i = 0ã63ã®å Žå
R1 [0] = R1 [0]âKc[i]
R2 [0] = R2 [0]âKc[i]
R2 [0] = R2 [0]âKc[i]
åæããããç¡èŠããŠããã¹ãŠã®ã¬ãžã¹ã¿ã1ããžã·ã§ã³ã ãã·ããããŸãã - i = 0ã22ã®å Žå
R1 [0] = R1 [0]âFrameCount[[i]
R2 [0] = R2 [0]âFrameCount[[i]
R2 [0] = R2 [0]âFrameCount[[i]
åæããããç¡èŠããŠããã¹ãŠã®ã¬ãžã¹ã¿ã1ããžã·ã§ã³ã ãã·ããããŸãã - i = 0ã99ã®å Žå
åæããããèæ
®ããŠãã¬ãžã¹ã¿ã1ããžã·ã§ã³ã·ããããŸãã
çŸåšã®ãã¬ãŒã ã®çªå·ã®FrameCount 32ãããã¬ã³ãŒãã
åæååŸã228ãããã®åºåã·ãŒã±ã³ã¹ãèšç®ãããŸãã 114ãããã¯ããããã¯ãŒã¯ããæºåž¯é»è©±ã«éä¿¡ãããããŒã¿ãæå·åããããã«äœ¿çšãããæ®ãã®114ãããã¯ãé»è©±ãããããã¯ãŒã¯ã«éä¿¡ãããããŒã¿ãæå·åããããã«äœ¿çšãããŸãã æå·åèªäœã¯ãA5 / 1ã¢ã«ãŽãªãºã ã«ãã£ãŠçæãããããŒã¿ãšããŒã¹ããªãŒã éã®éåžžã®XORã§ãã
ããŒã¿è»¢éåŸããã¬ãŒã çªå·ã1ã€å¢å ããã¬ãžã¹ã¿ãå床åæåãããŸãã
äžèšã®èª¬æã䜿çšããŠãCïŒã§A5 / 1æå·åãå®è£
ããŸãã
Cã®ã¯ã©ã¹A5EncïŒusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace A5project { class A5Enc { private bool[] reg = new bool[19]; private bool[] reg2 = new bool[22]; private bool[] reg3 = new bool[23]; //, public A5Enc(bool[][] startState) { reg = startState[0]; reg2 = startState[1]; reg3 = startState[2]; } public A5Enc() { for (int i = 0; i < 19; i++) reg[i] = false; for (int i = 0; i < 22; i++) reg2[i] = false; for (int i = 0; i < 23; i++) reg3[i] = false; } // , A5 public void KeySetup(byte[] key, int[] frame) { for (int i = 0; i < 19; i++) reg[i] = false; for (int i = 0; i < 22; i++) reg2[i] = false; for (int i = 0; i < 23; i++) reg3[i] = false; BitArray KeyBits = new BitArray(key); BitArray FrameBits = new BitArray(frame); bool[] b = new bool[64]; for (int i = 0; i < 64; i++) { clockall(); reg[0] = reg[0] ^ KeyBits[i]; reg2[0] = reg2[0] ^ KeyBits[i]; reg3[0] = reg3[0] ^ KeyBits[i]; } for (int i = 0; i < 22; i++) { clockall(); reg[0] = reg[0] ^ FrameBits[i]; reg2[0] = reg2[0] ^ FrameBits[i]; reg3[0] = reg3[0] ^ FrameBits[i]; } for (int i = 0; i < 100; i++) { clock(); } } // , public void KeySetup(int[] frame) { BitArray FrameBits = new BitArray(frame); for (int i = 0; i < 22; i++) { clockall(); reg[0] = reg[0] ^ FrameBits[i]; reg2[0] = reg2[0] ^ FrameBits[i]; reg3[0] = reg3[0] ^ FrameBits[i]; } for (int i = 0; i < 100; i++) { clock(); } } private void clock() { bool majority = ((reg[8] & reg2[10]) | (reg[8] & reg3[10]) | (reg2[10] & reg3[10])); if (reg[8] == majority) clockone(reg); if (reg2[10] == majority) clocktwo(reg2); if (reg3[10] == majority) clockthree(reg3); } // private bool[] clockone(bool[] RegOne) { bool temp = false; for (int i = RegOne.Length - 1; i > 0; i
ããŒ{0x12ã0x23ã0x45ã0x67ã0x89ã0xABã0xCDã0xEF}ããã³ãã¬ãŒã çªå·0x134ã䜿çšããŠããã°ã©ã ãå®è¡ããããšã«ãããã³ãŒããæ£ããããšã確èªã§ããŸãã çæããã114ãããã®2ã€ã®ã·ãŒã±ã³ã¹ã¯ããããã{0x53ã0x4Eã0xAAã0x58ã0x2Fã0xE8ã0x15ã0x1Aã0xB6ã0xE1ã0x85ã0x5Aã0x72ã0x8Cã0x00}ã0x24ã0xFDã0x35ã0xFDã0x35ã0xFDã0x35ã0xFDã0x35ã0xFDã0x35ã0xFDã0x35ã0xFD ã0xA3ã0x5Dã0x5Fã0xB6ã0x52ã0x6Dã0x32ã0xF9ã0x06ã0xDFã0x1Aã0xC0}ã
ããŒã¯ããªã»ããã€ã¢ã³ãŽãŒã«ãããŒã°ãããããã¯ã°ããŒãCã§æžãããã¢ã«ãŽãªãºã ã®æåã®å®è£
ã§äœ¿çšãããã¹ãããŒã¿ã§ããã
ãã®ã¯ã©ã¹ã䜿çšããæå·å/埩å·åé¢æ°ã¯æ¬¡ã®ããã«ãªããŸãã
private byte[] A5Encyptor(byte[] msg,byte[] key) { A5Enc a5 = new A5Enc(); int[] frame = new int[1]; bool[] resbits = new bool[msg.Count]; int framesCount = msg.Length / 228; if ((msgbits.Length % 228) != 0) framesCount++; for (int i = 0; i < framesCount; i++) { frame[0] = i; a5.KeySetup(key, frame); bool[] KeyStream = a5.A5(true); for (int j = 0; j < 228; j++) { resbits[i * 228 + j] = msgbits[i * 228 + j] ^ KeyStream[j]; } } return a5.FromBoolToByte(resbits, false); }
ããŒã¿ã®æå·åãšåŸ©å·åãå¯èœã«ããé¢æ°ãã§ããã®ã§ãA5 / 1ã¢ã«ãŽãªãºã ã®è匱æ§ã«ã€ããŠè©±ããŸãããã
ä»æ¥ãGSMæå·åã«å¯Ÿããå€æ°ã®æåããæ»æãç¥ãããŠããããããã¯ãã¹ãŠæ¢ç¥ã®å¹³æã¿ã€ãã®æ»æãããªãã¡ ããŒãå埩ããã«ã¯ãæå·åããããã¬ãŒã ã«å ããŠãæ»æè
ããããã®ãã¬ãŒã ã«å¯Ÿå¿ããæå·åãããŠããªãããŒã¿ãç¥ã£ãŠããå¿
èŠããããŸãã äžèŠãããšããããã®ãããªèŠä»¶ã¯å¹»æ³ã«æãããããããŸããããé³å£°ãã©ãã£ãã¯ã«å ããŠãããŸããŸãªã·ã¹ãã ã¡ãã»ãŒãžãéä¿¡ãããGSMæšæºã®ä»æ§ã«ãããçè«çãªã«ããŽãªããã®æ»æã¯å®çšçãªã«ããŽãªã«åé¡ãããŸãã GSMã·ã¹ãã ã¡ãã»ãŒãžã«ã¯éè€ããŒã¿ãå«ãŸããŠãããæ»æè
ã«ãã£ãŠäœ¿çšãããå¯èœæ§ããããŸãã ç¹ã«ã2010幎ã«Karsten Nohlãææ¡ããæ¹æ³ã¯ãæå·ããã¹ãã§ãã®çš®ã®ããŒã¿ãæ€çŽ¢ããæ¢ç¥ã®ã·ã¹ãã ã¡ãã»ãŒãžã®ç®çã®æå·ããã¹ããçæããããŒãèŠã€ãããŸã§ãã¬ã€ã³ããŒããŒãã«ã«æ ŒçŽãããããŒã®ããŸããŸãªãªãã·ã§ã³ãåçŽã«ãœãŒãããããšã«åºã¥ããŠããŸãã
ããŒã3ïŒA5 / 1ã¢ã«ãŽãªãºã ã®æ»æ
ãã ããã¬ã€ã³ããŒããŒãã«ãèšç®ããããã«å¿
èŠãªèšå€§ãªãªãœãŒã¹ããªããããããããé¢é£ããç°¡åãªæ»æãå®è£
ããŸãã ãçžé¢æ»æãã
ç§ãã¡ãæ€èšããŠããæ»æã¯ã2002幎ã«Patrik EkdahlãšThomas Johanssonã®2人ã®ç 究è
ã«ãã£ãŠåããŠèª¬æãããŸããã
åæåæé ã®å®çŸ©ãããã¬ãžã¹ã¿ã®åæç¶æ
ã¯ã»ãã·ã§ã³ããŒKãšãã¬ãŒã çªå·F
nã®ç·åœ¢é¢æ°ã§ãããšçµè«ä»ããããšãã§ããŸãã
ãŸãããžã§ãã¬ãŒã¿ã®åºåãããã3ã€ã®ã¬ãžã¹ã¿ãã¹ãŠã®XORçªç®ã®åºåãããã§ããããšãç¥ã£ãŠã次ã®çåŒãæžãããšãã§ããŸãã

ïŒ
1 ïŒ
ããã§ãs
iã¯ãããŒKã®ãããã®ã¿ãããŒãããåŸã«ã¬ãžã¹ã¿ã«ãã£ãŠçæãã
ãã·ãŒã±ã³ã¹ã§ãããããã®f
i㯠ããã¬ãŒã çªå·ã®ããããšã¬ãžã¹ã¿ã®xåºåãããã®ã¿ãããŒãããåŸ
ã®ã·ãŒã±ã³ã¹ã§ãã
ãŸããåæåã®å®çŸ©ãããæåã®100ãµã€ã¯ã«ã®éãã¢ã«ãŽãªãºã ããã¢ã€ãã«ãã«æ©èœããããšãããããŸãã åºåãããã¯çæããããåºåã·ãŒã±ã³ã¹ã®æåã®ãããã¯å®éã«ã¯101çªç®ã«çæããããããã§ãã ãããã£ãŠãåã¹ãããã§åã¬ãžã¹ã¿ã®ã·ããã®ç¢ºçã3/4ã§ããããšãèæ
®ãããšã101ã¹ãããåŸãåã¬ãžã¹ã¿ãæ£ç¢ºã«76åã·ãããããšæ³å®ã§ããŸãã ãããã£ãŠãåŒïŒ1ïŒã¯æ¬¡ã®ããã«å€æãããŸãã

ïŒ
2 ïŒ
ïŒ2ïŒã®å³åŽã«ããŒã¯ãä»ãã

åŒãæžãæããŸãïŒ

ïŒ
3 ïŒ
ãªããªã ïŒ3ïŒã®å³åŽã®åŒãç¥ã£ãŠãããšãããŒã·ãŒã±ã³ã¹Sãã€ãŸãåæååŸã®åã¬ãžã¹ã¿ã®76çªç®ã®äœçœ®ã®ç¶æ
ã«é¢ããæ
å ±ã1ãããååŸãããŸãã ãã®ããã«åäœãããšãäœçœ®102ã§R1ãäœçœ®76ã«çãŸããã¬ãžã¹ã¿ãŒR2ãšR3ãäœçœ®77ã«ç§»åãããããã¬ãžã¹ã¿ãŒã®77çªç®ã®äœçœ®ãªã©ã«é¢ããæ
å ±ãååŸã§ããŸãã åèšã§ã64ããããéããŠåæç¶æ
ãæ£åžžã«åŸ©å
ããå¿
èŠããããŸãã
ãã¡ãããç¶æ³ïŒ76.76.76ïŒã¯éåžžã«äœã確çã§ã¹ããã101ã§æ£ç¢ºã«çºçããŸãããã®ããã«è¡åããããšã«ããå Žåã101ã·ããåŸã«ãããããæ£ç¢ºã«1ã€ã«ãªããŸã§èšå€§ãªæ°ã®ãã¬ãŒã ãæŽçããå¿
èŠããããŸããã¬ãžã¹ã¿ã¯76ããžã·ã§ã³ã¹ã¯ããŒã«ããŸããã å¿
èŠãªãã¬ãŒã æ°ãæžããããã«ãEkdahlãšJohanssonã¯æ¬¡ã®æ¹æ³ãææ¡ããŸããã
ã¬ãžã¹ã¿ãïŒcl
1 ãcl
2 ãcl
3 ïŒåå転ããç¹å®ã®äœçœ®ãæšæž¬ããå¿
èŠã¯ãããŸããã é«ã確çã§ãåã¬ãžã¹ã¿ãåãã¬ãŒã ã®åºåãããã®ééI = [100,140]ã§76ãã102ã«å€ããããšãç¥ãã ãã§ååã§ãã
ãããã£ãŠãåãã¬ãŒã ã«ã€ããŠã確çãèšç®ã§ããŸãã

ã©ããã£ãŠ

ïŒ
4 ïŒ
ã©ãã§

ãããŠãtçªç®ã®ããããã¬ãžã¹ã¿ïŒcl1ãcl2ãcl3ïŒã®äœçœ®ã«ãã£ãŠçæããã確çã瀺ããŸãã
å©çšå¯èœãªãã¬ãŒã ããšã«ïŒ4ïŒãèšç®ããåŸã察æ°ã䜿çšããŠååŸãã確çãå¹³åããŸãã

ïŒ5ïŒã
ïŒ5ïŒ> 0ã®å Žåãs
1 ïŒcl1ïŒâs2ïŒcl2ïŒâs3ïŒcl3ïŒ= 0ããã以å€ã®å Žåã¯s
1 ïŒcl1ïŒâs2ïŒcl2ïŒâs3ïŒcl3ïŒ= 1 ã
æ»æãå®å
šã«ã¢ã«ãŽãªãºã ã®åœ¢ã§èª¬æããŸãã
- ééCãéžæããŸããããšãã°ãC = [79.86]
- å€æ°cl 1 ãcl 2 ãcl 3ããèšç®ããåãã¬ãŒã ã«ã€ããŠãééCããã®ãã¹ãŠã®å€ãå®è¡ããŸãïŒ4ïŒ
- ååŸãããã¹ãŠã®å€ã«ã€ããŠãïŒ5ïŒãèšç®ããŸã
- Îã®å€ã«åºã¥ããŠãå€s 1 ïŒcl1ïŒâs2ïŒcl2ïŒâs3ïŒcl3ïŒãéžæããŸã
ãã®ã¢ã«ãŽãªãºã ã®çµæã¯ãs
1 ïŒ79ïŒâs2ïŒ79ïŒâs3ïŒ79ïŒ= 0ã®åœ¢åŒã®512åã®æ¹çšåŒã«ãªãã8ã€ã®æªç¥æ°ã§æ§æãããŸãã ãã®é£ç«æ¹çšåŒãåçŽãªåæã§è§£ããšãåã¬ãžã¹ã¿ã®åæå€ã®8ããããåŸãããŸãã
éé[87ã94]ããã³[95ã102]ã§ã¢ã«ãŽãªãºã ãããã«2åç¹°ãè¿ããšãåã¬ãžã¹ã¿ã®åæç¶æ
ã®24ããããåŸãããŸãã ããã§ååã§ãã åã¬ãžã¹ã¿ã101åã¹ã¯ããŒã«ãããšã2çªç®ã®åæåã¹ãããåŸã®ã¬ãžã¹ã¿ã®ç¶æ
ãæ£ç¢ºã«ååŸãããŸãã ããŒããããã¬ãžã¹ã¿ã«ããŒãããåŸã ãããŠä»ãå
šäœãšããŠããŒã·ãŒã±ã³ã¹å
šäœãçæã§ããŸãã
CïŒã¯ã©ã¹A5æ»æ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace A5project { class A5attack { private double[] factorials = new double[150];
次ã®ããã«
FindKeyBité¢æ°ã䜿çšããŸãã
private bool[] attack() { bool[] keypart=new bool[512]; int count = 0; A5attack tryattack = new A5attack(); for(int i=79; i<87;i++) for(int j=79; j<87; j++) for (int k = 79; k < 87; k++) { bool temp=tryattack.FindKeyBit(i, j, k, keystream); int time = finish - start; keypart[count] = temp; count++; } return keypart; }
XORããŒããããäœçœ®79ããäœçœ®86ã«æžã蟌ãŸããŠãã512å€ã®é
åãååŸããŸãã
åã¬ãžã¹ã¿ãã24ããããã¹ãŠãåä¿¡ãããããããã€ãé
åã«å€æãããããœãªã¥ãŒã·ã§ã³ã確èªããŸãã
Private void checkSolution() { A5attack LetsAttack = new A5attack(); int[] testframe = new int[1] { 0 }; bool[][] startState = LetsAttack.checkSol(first, second, third); A5Enc a5check = new A5Enc(startState); bool[] TempFrame = new bool[228]; a5check.KeySetup(testframe); TempFrame = a5check.A5(true); for (int l = 0; l < 228; l++) { find = true; if (keystream[l] != TempFrame[l]) { find = false; break; } } }
åä¿¡ãããã¬ãŒã ãæ¢ç¥ã®ããŒã¹ããªãŒã ã®æåã®ãã¬ãŒã ãšäžèŽããå Žåãæ»æã¯æåããã¢ã«ãŽãªãºã A5 / 1ã®ã»ãã·ã§ã³ããŒãéããŸããã
ããŒã4ïŒæçµ
èŠçŽãããšã説æããæ»æã¯æåã®ãã®ãããªæ»æã®1ã€ã§ããããšã«æ³šæããŠãã ããã æãé«åºŠãªãã®ã§ã¯ãåèš2000ãã¬ãŒã ïŒ9ç§ã®äŒè©±ïŒãã90ïŒ
ã®ç¢ºçã§ã»ãã·ã§ã³ããŒãéãããšãã§ããŸãã ãããã£ãŠãçžé¢æ»æã¯çè«äžã ãã§ãªããå®éã«ãéåžžã«æ·±å»ãªè
åšã§ãã
æç®ãšåèæç®
PSïŒäœè
ã¯ãEladã®Barkanã®äœåã誰ããå
±æããŠããããæè¬ããŸãã ãšãªã»ããã ïŒ2005ïŒã ãæ¡ä»¶ä»ãæšå®éïŒA5 / 1ãžã®å¹æçãªæ»æã æåŸã®éšåã§è¿°ã¹ãæ»æã«ã€ããŠèª¬æããŸãã
UPDïŒãŠãŒã¶ãŒ
whitequarkã®ãããã§ããã¹ãŠã®è³ªåãåé€ãã
ãŸãã ã