ÖÎÓúϵ¶¯ÂþµÄÒ¹¼ä¹ÛӰѧ
ÉîҹԢĿ¶¯»µÄÌØÊâÒÇʽ¸Ð£¬Ô´ÓÚÊÓÌýÇéÐÎÓëÐÄÀí״̬µÄÉî¶ÈÆõºÏ¡£µ±¶¼»áµÆ»ð½¥°µÊ±£¬¡¶ÏÄÄ¿ÓÑÈËÕÊ¡·µÄÑý¹ÖÎïÓï±ãÕ¹ÏÖÖÎÓúħÁ¦£¬ö̽ðÖÊ¸ÐµÄ»ÃæÓë³æÊ¦OST£¨ÔÉùÅäÀÖ£©×é³ÉµÄÉù»¿Õ¼ä£¬Îª¹ÛÖÚ´òÔì³öÌÕ×íʽµÄ¾«ÉñÁÆÓú³¡¡£ÕâÀà×÷Æ·ÆÕ±é½ÓÄɵͱ¥ºÍ¶ÈɫϵºÍÂý½Ú×àÐðÊ£¬ÓÌÈç¡¶Óñ×ÓÊг¡¡·ÖлºÂýת¶¯µÄ·ç³µ£¬ÔÚÊÓ¾õÉñ¾Ãô¸Ð¶È×î¸ßµÄÒ¹¼äʱ¶Î£¬ÐγÉÎÂ˳µÄÇéÐ÷¹²ÕñƵÂÊ¡£
Ïç³îÎïÓï¡¶³æÊ¦¡·µÄ×ÔÈ»Æôʾ¼
λÁÐÊʺÏÍíÉÏ¿´µÄ¶¯ÂþǰÈý¼×µÄ¡¶³æÊ¦¡·£¬ÓÃ26¸öÇ§Ææ°Ù¹ÖµÄ×ÔÈ»´«Ëµ¹¹½¨ÖÎÓú½á½ç¡£Ã¿¼¯×ÔÁ¦µÄµ¥Î»¾çÐÎʽÍêÉÆÆõºÏË鯬»¯¹ÛÓ°ÐèÇó£¬Çà̦ÁýÕÖµÄɽʯÓëÒø¹ÅÑ̶·ÌÚÆðµÄÇáÑÌ£¬ÔÚÉîÒ¹Ó«Ä»ÉϱàÖ¯³öÁ÷¶¯µÄˮ¾í¡£×÷Æ·¶ÔÉúÃüʵÖʵÄÕÜѧ˼±æ£¬Ç¡ËÆÉîÏü¶À´¦Ê±µÄÄÚʡʱ¿Ì£¬ÄÇЩÓÎ×ßÓÚÃ÷°µÖ®¼äµÄ"³æ"£¬ÊµÔòÊǶ¼»áÈ˾«ÉñÄæ¾³µÄÒþÓ÷¾µÏñ¡£
Ææ»ÃÒ»Ñùƽ³£¡¶Ñý¾«ÉÁÖµÄС²»µã¡·Î¢¹ÛÖÎÓúѧ
µ±Ò¹Ä»ÍÌÊɶ¼»áÌìÑÄÏßʱ£¬¡¶Ñý¾«ÉÁÖµÄС²»µã¡·ÓÃ15cmÊÓ½ÇÖØ¹¹ÌìϹæÔò¡£ÕⲿÊʺÏÉîҹԢĿµÄÖÎÓúÉñ×÷£¬½«ÏÖ´úÉúÑĽ⹹Ϊ¿É´¥ÃþµÄͯ»°£º¿§·È±Ë¢Ð³ɵÄÎÂȪԡ³Ø¡¢ÆÑ¹«Ó¢ÖÖ×ÓÖÆ×÷µÄϽµÉ¡£¬¿´ËÆÖÉ×ÓµÄÉ趨Àï²Ø×ŶÔÎïÖÊÖ÷ÒåµÄÎÂÈá·´·í¡£Ã¿¼¯×îºó´¦Ö÷½ÇÃÇÔ¶ÍûÐǿյÄÉíÓ°£¬Óë¹ÛÖÚ´°ÍâµÄҹɫÐγÉÇÉÃÎÄ£¬ÈÃÏÖʵѹÁ¦ÔÚ΢¹ÛÐðÊÂÖÐÇÄÈ»Ïû½â¡£
ÒâʶÁ÷¼Ñ×÷¡¶×ÏÂÞÀ¼ÓÀºã»¨Ô°¡·µÄÇéÐ÷½â¹¹
¾©¶¼¶¯»µÄÊÓ¾õ÷ÏÑç¡¶×ÏÂÞÀ¼ÓÀºã»¨Ô°¡·£¬¿°³ÆÒ¹¼ä¹ÛÓ°µÄ¹âÓ°½Ì¿ÆÊé¡£»úеÊÖÉÙŮޱ¶ûÀòÌØ´ú±ÊÊéÐŵÄÀú³Ì£¬ÊµÔòÊǶÔÈËÀàÇéÐ÷µÄϵͳ½âÂë¡£µ±ÉîÒ¹µÄÖÓÉùÓ붯»ÖеĴò×Ö»ú½Ú×àÖØµþ£¬¹ÛÖڻ᲻×ÔÖ÷µØ´úÈëίÍÐÈ˵ÄÇéÐ÷Êӽǡ£×÷Æ·Öдó×ÚÔËÓõÄË®Ãæµ¹Ó°Óë¹â°ßÌØÐ§£¬ÅäºÏ¶Å±ÈÒôЧÇéÐΣ¬ÄÜ×î´óÏ޶ȼ¤»îÒ¹¼äÃôÈñµÄ¸Ð¹ÙÌåÑé¡£
¶¼»áÔ¢ÑÔ¡¶±àÖۼǡ·µÄÉîÒ¹Æôʾ¼
ÔÚÊʺÏÍíÉÏ¿´µÄ¶¯Âþ°ñµ¥ÖУ¬¡¶±àÖۼǡ·ÒÔÆæÒìµÄÈËÎľì×¢Õ¼ÓÐÌØÊâλÖá£Õⲿ½²Êö´Çµä±à׫µÄÖ°³¡ÎïÓ½«ËÀ°åµÄÎÄ×ÖÊÂÇéÉý»ªÎªìøÐÞ°ãµÄÒÇʽÃÀѧ¡£ÉîÒ¹Êé·¿³¡¾°ÀïÌø¶¯µĄ̈µÆ¹âÔΣ¬ÓëÄÐÖ÷½Ç·ü°¸ÊÂÇéµÄ¼ôÓ°×é³ÉÊÓ¾õʫƪ¡£¾çÖÐ"ÓôÊÓï±àÖ¯ÇéÐ÷·½ÖÛ"µÄ½¹µãÒâÏó£¬Ç¡ÊǶ¼»áÒ¹¹éÈË¿ÊÇóµÄÐÄÁé½âÒ©£¬ÈÃÈËÔÚÓï´ÊÃÜÁÖÖÐѰµÃ°²ÆÜÖ®Ëù¡£
´Ó¡¶ÏÄÄ¿ÓÑÈËÕÊ¡·µÄÎÂÈá½á½çµ½¡¶±àÖۼǡ·µÄÓï´Ê·½ÖÛ£¬ÕâЩÊʺÏÉîҹԢĿµÄÖÎÓúϵ¶¯Âþ¹¹½¨³öÆæÒìµÄÇéÐ÷ÐÞ¸´ÏµÍ³¡£µ±Ó«Ä»¹âÓ°ÓëҹɫÈÚ»áʱ£¬¶¯»²»µ«ÊÇÓéÀÖǰÑÔ£¬¸üÊÇÏÖ´úÈËÖØÐÞÐÄÁéÖÈÐòµÄÎÄ»¯×±Öá£Ñ¡ÔñÊʺÏÍíÉÏ¿´µÄ¶¯Âþ£¬ÊµÖÊÉÏÊÇÔÚΪƣÀÍÁé»êѰÕÒÊ«ÒâµÄÆÜ¾Ó·½·¨¡£
Ò»¡¢SSL/TLSÐÒéÔÚiOSÍøÂçͨѶÖеÄÒªº¦×÷ÓÃ
SSL/TLS£¨Çå¾²Ì×½Ó²ã/´«Êä²ãÇå¾²£©ÐÒé×÷ΪÏÖ´úÒÆ¶¯Ó¦ÓõļÓÃÜ»ùʯ£¬ÔÚiOSϵͳÖÐͨ¹ýNSURLSession×é¼þʵÏÖÇ徲ͨѶ¡£¿ª·¢ÕßÔÚÉèÖÃURLSessionʱ±ØÐè×¢ÖØÐÒé°æ±¾Ñ¡Ôñ£¬TLS 1.2¼°ÒÔÉϰ汾ÒѳÉΪƻ¹ûµÄÇ¿ÖÆÒªÇó¡£ÔÚObjective-C¿ª·¢ÇéÐÎÖУ¬ÐèÒªÉèÖÃNSAppTransportSecurity×Öµä£¬Ç¿ÖÆATS£¨Ó¦Óô«ÊäÇå¾²£©Õ½ÂÔÖ´ÐС£
ÔõÑùÑéÖ¤Ö¤ÊéÁ´µÄÕýµ±ÐÔ£¿ÕâÐèÒª¿ª·¢ÕßʵÏÖURLSession:didReceiveChallenge:completionHandler:ÊðÀíÒªÁì¡£µä·¶°¸ÀýÖУ¬¿ÉÁ¬Ïµ¹«Ô¿Àο¿£¨Public Key Pinning£©ÊÖÒÕ£¬½«Ð§ÀÍÆ÷Ö¤ÊéµÄSPKI£¨Ö÷Ì⹫ԿÐÅÏ¢£©¹þÏ£ÖµÔ¤ÖÃÔÚÓ¦ÓÃÄÚ¡£ÖµµÃ×¢ÖØµÄÊÇ£¬ÕâÖÖÖ¤ÊéÑéÖ¤Õ½ÂÔÄÜÓÐÓ÷ÀÓùÖÐÐÄÈ˹¥»÷£¨MITM£©£¬µ«Ò²ÐèÒª½¨ÉèÍêÉÆµÄÖ¤Êé¸üлúÖÆ¡£
¶þ¡¢Objective-CÇå¾²±à³Ìʵ¼ùÖеļÓÃÜË㷨ѡÔñ
ÔÚÍâµØÊý¾Ý¼ÓÃÜ»·½Ú£¬AES£¨¸ß¼¶¼ÓÃܱê×¼£©ÓëRSAËã·¨µÄ×éºÏʹÓÃÊÇiOS¿ª·¢µÄ»Æ½ð±ê×¼¡£CommonCrypto¿ò¼ÜÌṩÍêÉÆµÄ¶Ô³Æ¼ÓÃÜÖ§³Ö£¬¿ª·¢Õß¿ÉÒÔͨ¹ýCCCryptº¯ÊýʵÏÖCBC£¨ÃÜÂë¿éÁ´½Ó£©Ä£Ê½¼ÓÃÜ¡£ÔÚÓû§ÈÏÖ¤³¡¾°£¬ÍƼöʹÓÃPBKDF2£¨»ùÓÚÃÜÂëµÄÃÜÔ¿ÅÉÉúº¯Êý£©¾ÙÐÐÃÜÔ¿ÅÉÉú£¬µü´ú´ÎÊý½¨ÒéÉèÖÃ10000´ÎÒÔÉÏ¡£
ÄÚ´æÇå¾²´¦Öóͷ£ÊÇÐí¶à¿ª·¢ÕßÈÝÒ׺öÊӵĻ·½Ú¡£¹ØÓÚÃô¸ÐÊý¾Ý£¬Ó¦µ±Ê¹ÓÃSecure Enclave£¨Çå¾²¸ôÇø£©´æ´¢¼ÓÃÜÃÜÔ¿£¬Í¬Ê±È·±£Ã÷ÎÄÐÅϢʵʱ´ÓÄÚ´æÉ¨³ý¡£ÌØÊâÊÇÔÚObjective-CµÄMRC£¨ÊÖ¶¯ÒýÓüÆÊý£©ÇéÐÎÏ£¬±ØÐèÏÔʽŲÓÃmemset_sº¯ÊýÁýÕÖÃô¸ÐÄÚ´æÇøÓò¡£
Èý¡¢XcodeÇå¾²±àÒëÉèÖÃÓë·À»¤¼Ó¹Ì¼Æ»®
ÔÚBuild SettingsÖÐÆôÓÃBitcode±àÒë¿ÉÒÔÓÐÓÃÌá·ÀÄæÏò¹¤³Ì£¬Í¬Ê±¿ªÆôStack Smashing ProtectionÄÜÔöÇ¿ÔËÐÐʱ·À»¤¡£ÍƼö½«CLANG_ENABLE_OBJC_WEAKÉèΪNOÒÔÏû³ýÈõÒýÓÃÇå¾²Òþ»¼£¬ÉèÖÃDEBUG_INFORMATION_FORMATΪdwarf-with-dsym±ãÓÚÍß½âÈÕÖ¾·ûºÅ»¯ÆÊÎö¡£
¹ØÓÚÒªº¦ÓªÒµÂß¼£¬½¨ÒéÆôÓÃLLVMµÄ¿ØÖÆÁ÷ÍêÕûÐÔ£¨CFI£©±£»¤¡£ÔõÑùƽºâÇå¾²ÐÔÓëÐÔÄÜ£¿¿Éͨ¹ýProfile Guided Optimization¾ÙÐбàÒëÓÅ»¯£¬Ñ¡Ôñ-OzÓÅ»¯¼¶±ðʱÐèÌØÊâ×¢ÖØ±£´æÐëÒªµÄÇå¾²¼ì²é´úÂë¡£¾²Ì¬ÆÊÎöÉèÖÃÖУ¬Ó¦½«CLANG_ANALYZER_SECURITYÑ¡ÏîËùÓпªÆô¡£
ËÄ¡¢Êý¾ÝÇå¾²ÉúÃüÖÜÆÚÖÎÀíµÄÒªº¦ÊÖÒÕµã
ÍêÕûµÄÊý¾ÝÇå¾²ÖÜÆÚ°üÀ¨ÌìÉú¡¢´æ´¢¡¢´«Ê䡢ʹÓᢹ鵵¡¢Ïú»ÙÁù´ó½×¶Î¡£ÔÚÊý¾ÝÌìÉú»·½Ú£¬½¨Òé½ÓÄÉSecRandomCopyBytesÌìÉú¼ÓÃÜÇ¿¶È´ï±êµÄËæ»úÊý¡£´æ´¢»·½ÚÔòÓ¦ÓÅÏÈʹÓÃKeychain Services£¨Ô¿³×´®Ð§ÀÍ£©£¬Æä½ÓÄɵÄAES-256¼ÓÃÜÇ¿¶ÈÔ¶³¬UserDefaultsµÄÃ÷ÎÄ´æ´¢¡£
Êý¾ÝʹÓÃÀú³ÌÖеķÀ¸ÄÄîÍ·ÖÆÊµÏÖÐèÒªÊý×ÖÊðÃûÊÖÒÕµÄÖ§³Ö¡£¿ª·¢Õß¿ÉÔËÓÃECDSA£¨ÍÖÔ²ÇúÏßÊý×ÖÊðÃûËã·¨£©¶ÔÒªº¦Êý¾Ý¾ÙÐÐÊðÃûÑéÖ¤¡£Õë¶ÔÎļþ¼¶±£»¤£¬¿ÉÉèÖÃNSFileProtectionCompleteUntilFirstUserAuthenticationµÈÔªÊý¾ÝÊôÐÔ£¬Óë×°±¸ËøÆÁ״̬ʵÏÖÇå¾²Áª¶¯¡£
Îå¡¢»ìÏý¼ÓÃÜϵͳÔÚÏÖʵÏîÄ¿ÖеÄÓ¦ÓÃʵÀý
ijÉç½»Ó¦ÓÃÔÚIM¹¦Ð§ÖнÓÄÉÁË»ìÏý¼ÓÃܼܹ¹£ºÊ¹ÓÃRSA-2048½»Á÷AES-256»á»°ÃÜÔ¿£¬ÐÂÎÅÌå½ÓÄÉCTR£¨¼ÆÊýÆ÷ģʽ£©¼ÓÃÜ£¬ÐÂÎÅÍ·¸½¼ÓHMAC-SHA256УÑéÖµ¡£ÕâÖÖ¼ÓÃÜË㷨ѡÔñ¼Æ»®¼È°ü¹ÜÁË´«ÊäЧÂÊ£¬ÓÖ̫ͨ¹ý²ã¼ÓÃÜʵÏÖÁËǰÏò±£ÃÜ£¨Forward Secrecy£©¡£
Õë¶ÔʵʱÒôÊÓÆµÁ÷µÄ¼ÓÃÜ£¬ÍƼöʹÓÃSRTP£¨Ç徲ʵʱ´«ÊäÐÒ飩¼Æ»®¡£Í¨¹ý¼¯³ÉWebRTC¿ò¼Ü£¬¿ª·¢Õß¿ÉŲÓÃÄÚÖõļÓÃÜÄ£¿éʵÏÖýÌåÁ÷µÄ¶Ëµ½¶Ë¼ÓÃÜ¡£ÔÚÃÜÔ¿ÖÎÀí»·½Ú£¬ÐèÒª½¨ÉèÔÝʱ»á»°ÃÜÔ¿µÄÉúÃüÖÜÆÚ¿ØÖÆ»úÖÆ£¬È·±£ÃÜÔ¿ÔڻỰ¿¢ÊºóÁ¬Ã¦Ïú»Ù¡£
ͨ¹ýÉÏÊöÊÖÒռƻ®µÄ×éºÏÓ¦Óã¬iOS¿ª·¢Õß¿ÉÒÔ¹¹½¨³öÇкÏÐÐÒµ±ê×¼µÄÇå¾²·À»¤ÏµÍ³¡£´ÓSSL/TLSÐÒéµÄÍøÂç²ã¼ÓÃܵ½XcodeµÄ±àÒë¼Ó¹Ì£¬´ÓObjective-CµÄÇå¾²±à³Ìʵ¼ùµ½»ìÏý¼ÓÃÜϵͳµÄÉè¼Æ£¬Ã¿¸ö»·½Ú¶¼Ó°Ïì×ÅÓ¦ÓõÄÕûÌåÇ徲ˮλ¡£ÔÚÏêϸʵÑéÀú³ÌÖУ¬½¨Òé°´ÆÚ¾ÙÐÐÉøÍ¸²âÊÔ£¬Ê¹ÓÃInstruments¹¤¾ß¾ÙÐÐÄÚ´æ×ß©¼ì²â£¬Á¬ÏµLLDBµ÷ÊÔÆ÷ÑéÖ¤¼ÓÃÜÁ÷³ÌµÄÍêÕûÐÔ£¬×îÖÕÐν¨ÉèÌ廯µÄÒÆ¶¯Çå¾²½â¾ö¼Æ»®¡£