Share
Embed
『プロフェッショナル SSL/TLS 読書会』 第 6 章
2017 8/18 https://ptls-study.connpass.com/event/62788/
2017 10/6 https://ptls-study.connpass.com/event/66639/
Ryo Sakuma
October 06, 2017
Transcript
46 slides
-
!IBTIFEIZQIFO w )BTI !IBTIFEIZQIFO w 8FCEFWFMPQFS w +4 3VCZ
4DBMB 3VTU 4FDVSJUZ FUDʜ w .P[JMMB4FDVSJUZ#MPHຊޠ൛ w 8FCTFDVSJUZؔ࿈ͷ.%/هࣄ༁ w 44-ͱಉڃੜ -
#BTJD$POTUSBJOUTͷݕূෆඋ w #BTJD$POTUSBJOUTͱʢ෮शʣ w \ D"#PPMFBO%FGBVMU'BMTF QBUI-FO$POTUSBJOU*OUFHFS ."9 0QUJPOBM
^ w D" w $"ূ໌ॻʢଞͷূ໌ॻΛൃߦՄೳʣͷϑϥά w QBUI-FO$POTUSBJOU w Լͷதؒ$"ʢ㱠ΤϯυΤϯςΟςΟʣͷ࠷େ w লུ࣌Կ੍ݶ͠ͳ͍ -
#BTJD$POTUSBJOUTͷݕূෆඋ w ྫ3PPU*OUFSNFEJBUF&OEFOUJUZ w ຊདྷߦ͏͖ॲཧʢ͓͓·͔ʹʣ w &OEFOUJUZͷ$PNNPO/BNFΛ֬ೝ w *OUFSNFEJBUFͷެ։伴Ͱ&OEFOUJUZΛݕূ w
3PPUͷެ։伴Ͱ*OUFSNFEJBUFΛݕূ w *OUFSNFEJBUF͕$"ূ໌ॻͰ͋Δ͔ͷ֬ೝ Ұൠͷূ໌ॻʹଞͷূ໌ॻΛൃߦͤ͞ͳ͍ͨΊ -
#BTJD$POTUSBJOUTͷݕূෆඋ w *&Ͱ#BTJD$POTUSBJOUT͕ແࢹ͞Ε͍ͯΔ͜ͱΛ .PYJF.BSMJOTQJLFʢԾ໊ʣ͕ʹใࠂ w .JDSPTPGUʹใެ։ w ݪҼ*&ݻ༗Ͱͳ͘$SZQUP"1* w XFCαʔόِɾϝʔϧॺِ໊ɾূ໌ॻϕʔε
ͷೝূγεςϜͰͷಛݖঢ֨ɾίʔυॺِ໊ w ॳ.JDSPTPGUएׯͯ͠ൃදͨ͠Β͘͠ɺ .PYJFᐌ͘l*EPO`UGFFMMJLFXBTUJOHUJNFXJUI UIF.JDSPTPGU13EFQBSUNFOUz .PYJF -
ূ໌ॻνΣʔϯݕূͷܽؕ w .BSUJOWPO(BHFSO͕ʹใࠂ w $7& w ͱͳͬͨূ໌ॻνΣʔϯ <தؒূ໌ॻ><ࡶͳূ໌ॻ><ҙͷϧʔτূ໌ॻ> w ҙͷϧʔτূ໌ॻଞͷূ໌ॻͱશ͘ແؔ
w Կނ͔HOVUMTDMJͩͱWBMJEͳνΣʔϯͱͳΔ w ड৴ͨ͠νΣʔϯͷதʹϧʔτূ໌ॻ௨ৗؚ·Ε ͳ͍ɺͱ͍͏ղऍͷؒҧ͍͕ݪҼ͔ʁ -
%4"&$%4"ॺ໊ݕূͷ࣮ϛε w 0QFO44-͕ʹެ։ w (PPHMF4FDVSJUZ5FBN͕ใࠂ w %4"&$%4"ͷॺ໊ݕূʹࣦഊͯ͠JGจ͕ USVFͷέʔεʹͳͬͯ͠·ͬͨ - if
(!EVP_VerifyFinal(&md_ctx,p,(int)n,pkey)) + if (EVP_VerifyFinal(&md_ctx,p,(int)n,pkey) <= 0) ͜ͷόάमਖ਼Λػʹif (flag)ͳͲͷ׳श͕ ՕॴҎ্मਖ਼͞Ε༷ͨ -
ؼ͖ͬͯͨ#BTJD$POTUSBJOUT w ʹJ04Ͱಉ༷ͷ੬ऑੑ͕ൃ֮ w .PYJFͷ͔݅Βޙ w $7& w "QQMFͷΫϨδοτʹࡌͬͨͷਓ w
(SFHPS,PQG 3FDVSJUZ-BCT w 1BVM,FISFS 5SVTUXBWF4QJEFS-BCT -
%)&&$%)&ݕূॲཧͷ࣮ϛε … OSStatus err; … if ((err = SSLHashSHA1.update(/**/)) !=
0) goto fail; goto fail; if ((err = SSLHashSHA1.final(/**/)) != 0) … fail: … return err; -
HPUPจͷ൵ܶ࠶ͼ w ॳ಄ʹ(OV5-4͕ެද w $7& w ్தͷॲཧʹࣦഊͨ͠ࡍɺΓΛࣦഊʹηοτ ͠ͳ͍··HPUPDMFBOVQ w ྫ͑ॺ໊ͷ͕͞CJUͰׂΓΕͳ͔ͬͨ߹
ʢͦͦ#JU4USJOHͳͷͰԾఆؒҧ͍ʣ w ్தͷॲཧͰҙਤతʹࣦഊͤ͞ɺҎ߱ͷݕূॲཧΛ ᷖճͰ͖Δ -
$IBOHF$ZQIFS4QFD*OKFDUJPO w 0QFO44-͕ʹύονΛެ։ w $7& w ൃݟऀ-FQJEVNͷ٠ਖ਼࢙͞Μ w 0QFO44-4FSWFS)FMMP%POFΛड͚औͬͨ࣌ Ͱ҉߸͕ར༻Մೳͩͱݟͳͯ͠͠·͏
w 4FSWFS)FMMP%POFͷޙʹ$IBOHF$ZQIFS4QFD $$4 Λड৴͢ΔͱۭͷNBTUFSTFDSFU͕ੜ w ճʹਖ਼͍͠$$4Λड৴ͨ͠ࡍʹطଘͷ NBTUFSTFDSFU͕ૹ৴͞Εͯ͠·͏ -
ସνΣʔϯূ໌ॻِ w 0QFO44-͕ʹύονΛެ։ w $7& w ใࠂऀ"EBN-BOHMFZ%BWJE#FOKBNJO (PPHMF#PSJOH44- w
Ϋϩεϧʔτͷূ໌ॻνΣʔϯͱͯ͠ݕূ͢Δࡍɺ ݩʑͷνΣʔϯʹUSVTUFEͳূ໌ॻؚ͕·Ε͍ͯ Δͱɺ$"ϑϥάΛݕূ͢Δதؒূ໌ॻͷΛݟ ޡͬͯ͠·͏όά w ༁ऀେ͞Μͷϒϩά IUUQEIBUFOBOFKQ KPWJ Ͱղઆ -
ϗετ໊ͷݕূʹ͓͚Δ w %BO,BNJOTLZͱ.PYJF.BSMJOTQJLF͕#MBDL )BU64"Ͱผʑʹൃද w $43ͷ$PNNPO/BNFʹOVMMจࣈaΛڬΉ w WJDUJNDPNaNBMDJPVTDPN w "4/Ͱॲཧ͢Δ$"͜ͷจࣈྻશମΛධՁ͠ɺ
ඌͷNBMDJPVTDPNΛݕূͯ͠ൃߦ w ͜ͷূ໌ॻΛड͚औͬͨΫϥΠΞϯτ͕ʢྫ͑ʣ ௨ৗͷ$ݴޠͱͯ͠จࣈྻΛॲཧͨ͠߹ɺ WJDUJNDPNʹର͢ΔWBMJEͳূ໌ॻͱղऍ w $SZQUP"1* (OV5-4 /44ܸͯ͢ -
/FUTDBQF/BWJHBUPSͷܽؕ3/( w w ϒʔτ͔Βͷܦա࣌ؒʢϚΠΫϩඵʣ w ࣗͷϓϩηε*% w ͷϓϩηε*% w
߈ܸରͱಉ͡ 6OJY ϚγϯʹΞΫηεͰ͖ΔͳΒ ͱط w ϚΠΫϩඵ?㲈?CJUͷηΩϡϦςΟ -
۩ମతͳ࣮ϛε༰ … n2s(p, payload); // ͞ payload ͷಡΈऔΓ … …
// snip. 33 lines … memcpy(bp, pl, payload); … -
)FBSU#MFFEʹର͢Δదͳ؇ࡦ w ύονΛͯΔ w αʔόͷൿີ伴ΛೖΕସ͑ɺ৽͍͠ূ໌ॻΛऔಘ͠ɺ ݹ͍ূ໌ॻΛࣦޮͤ͞Δ w ηογϣϯνέοτ伴ΛೖΕସ͑ w ϢʔβύεϫʔυมߋґཔʢέʔεόΠέʔεʣ
w %#ʹΞΫηε͢ΔΞϓϦέʔγϣϯαʔόͱ5-4 αʔό͕ಉډ͍ͯͨ͠߹ɺ%#ͷύεϫʔυม ߋ͓ͯ͘͠ -
༌ग़҉߸ํࣜ֓આ w ถࠃ֎ͷ伴ަڧCJUʹ੍ݶ͞Ε͍ͯͨ࣌ w ถࠃ͔ΒͷΞΫηεͱࠃ֎͔ΒͷΞΫηεͱʹ Ԡͯ͡伴ɾূ໌ॻΛ͚ΔͳΜͯͬͯΒΕͳ͍ w ࠃ֎͔Β$MJFOU)FMMPΛड͚ͨࡍऑ͍34"伴Λ Ұ࣌తʹ࡞ɾαʔόͷڧ͍伴Ͱॺ໊͠ɺ 4FSWFS,FZ&YDIBOHFͰΫϥΠΞϯτฦ৴
w ΫϥΠΞϯτੜͨ͠QSF@NBTUFS@TFDSFUΛ Ұ࣌తͳऑ͍伴Ͱ҉߸Խ w ඇ༌ग़҉߸ͷ34"伴ަͰ 4FSWFS,FZ&YDIBOHF͕ൃੜ͠ͳ͍͜ͱʹҙ -
'3&",߈ཱܸ݅ w .J5.͕Ͱ͖Δ͜ͱ w αʔό͕༌ग़҉߸ํࣜͷҰ࣌త34" CJU Λ ༻Ͱ͖Δ͜ͱ w αʔόଆͰҰ࣌త34"ͷ伴ϖΞ͕͍·Θ͞Εͯ
͍Δ͜ͱ w ΫϥΠΞϯτ͕༌ग़҉߸Ҏ֎ͷํࣜͰҰ࣌త 34" CJU ͕͑ΔΑ͏֦ு͞Ε͍ͯΔ͜ͱ LΑΓલͷ0QFO44- -
ࣄલʹҼղ ͨ͠伴Ͱ෮߸ ڧݻͳ҉߸εΠʔτΛཁ ऑ͍҉߸εΠʔτʹվ᜵ " Ұ࣌త34"伴 Λੜɾૹ৴ ϦΫΤετվ᜵ ΛӅ͢վ᜵ #
ෆਖ਼ϨεϙϯεΛ৴ͯ͡ QSF@NBTUFS@TFDSFU Λ҉߸Խɾૹ৴ ʢຊจʹͳ͍͕ʣ վ᜵"ΛӅ͢ վ᜵#ΛӅ͢ -
'3&",߈ܸ w ͪͳΈʹ5-4 3'$ ʹ͓͚ΔҰ࣌伴ͷ ߋ৽සlEBJMZPSFWFSZUSBOTBDUJPOT BOENPSFPGUFOJGQPTTJCMFzͱਪ w '3&",߈ܸͷൃද࣌&$ΠϯελϯεΛͬ
ͯΘ͔ͣɾ࣌ؒͰCJUΛҼղ w ϨΨγʔίʔυੵۃతʹຣফ͍ͯ͜͠͏ -
-PHKBN w %)&伴ަʹ༌ग़҉߸ํࣜ͋ͬͨ w ͜Ε·ͨCJUͳͷͰ'3&",ͱಉ༷ʹΤΠϠ w ݄*NQFSGFDU'PSXBSE4FDSFDZ)PX %J⒏F)FMMNBO'BJMTJO1SBDUJDF w BVUIPS\%BWJE"ESJBOBOE,BSUIJLFZBO
#IBSHBWBOBOE;BLJS%VSVNFSJDBOE1JFSSJDL (BVESZBOE.BUUIFX(SFFOBOE+"MFY )BMEFSNBOBOE/BEJB)FOJOHFSBOE%SFX 4QSJOHBMMBOE&NNBOVFM5IPNa`FBOE-VLF 7BMFOUBBOE#FOKBNJO7BOEFS4MPPUBOE&SJD 8VTUSPXBOE4BOUJBHP;BOFMMB#aFHVFMJOBOE 1BVM;JNNFSNBOO^ -
҉߸εΠʔτީิ ҉߸εΠʔτɾ伴ڧܾఆ ૉQݪ࢝ࠜH ൿີ伴9 ެ։伴:TH?9NPEQ ൿີ伴8 ެ։伴:DH?8NPEQ ;:T?8 H? 89
;:D?9 H? 89 QSF@NBTUFS@TFDSFU;͔Βڞ௨伴Λੜ 3'$ 5-4 ͷ%)& -
࣭ w 1ʮ-PHKBNͰར༻͞ΕΔͷɺ%)ύϥϝʔλ ͷαʔόॺ໊͕࠶ૹͰ͖ͯ͠·͏ͱ͍͏ϓϩτίϧ ͷऑ ʜ ϦϓϨΠ߈ܸʹର͢Δอޢ͕ॺ໊ͷઃ ܭʹؚ·Ε͍ͯ·͕͢ɺͦͷͨΊͷΈΫϥΠ Ξϯτͱαʔόͷཚʹґଘ ʜ
ΫϥΠΞϯτ͕ ਃ͠ग़ͨཚͷΛ؍͠ɺผͷϋϯυγΣΠΫͰ ࠶ར༻͢Δ͜ͱ͕ՄೳͳͷͰ͢ʯ digitally-signed struct { opaque client_random[32]; opaque server_random[32]; ServerDHParams params; } signed_params; 3'$4FD αʔόॺ໊ͱࢥ͖͠Օॴ -
ͷձͰͷ͑ w DMJFOU@SBOEPN$MJFOU)FMMPʢฏจʣʹೖ͍ͬͯ ΔͷͰ͔Δ w TFSWFS@SBOEPN4FSWFS)FMMPʢฏจʣʹೖͬͯ ͍ΔͷͰ͔Δ w ൿີ伴9Λഁ͓͚ͬͯɺ%)ύϥϝʔλΛվ᜵ ͨ͠όʔδϣϯͷॺ໊Λ࡞Γग़ͤΔ
digitally-signed struct { opaque client_random[32]; opaque server_random[32]; ServerDHParams params; } signed_params; -
ࣄલܭࢉ߈ܸ w ૉQݪ࢝ࠜHϓϩτίϧͱͯ͠ط w Ұ࣌αʔό伴 9 :T Ωϟογϡ Ұ࣌తͱʜ
w %)伴ަʹର͢Δ/'4߈ܸ͕ஈ֊ʹ͚ΒΕ Δ͜ͱɺલஈͷܭࢉૉQͷΈʹґଘ͢Δ͜ͱ ͷൃݟ͕-PHKBNͷݚڀՌ w CJUͷ伴ʹର͢Δલஈͷܭࢉिؒ w ޙஈͷܭࢉඵະຬ w Ұ࣌伴ͷΩϟογϡظؒʹલஈͷܭࢉ͕ऴΘΕ ΫϥΠΞϯτͷλΠϜΞτʹؒʹ߹͏ -
Ԡ༻ɿ$PPLJF$VUUFS߈ܸ w ߈ܸରͷXFCαΠτͱηογϣϯΛཱ͍֬ͯ͠ ͳ͍ϢʔβΛ୳͢ w )551 ϨεϙϯεதͷಈతͳσʔλΛಛఆ͠ɺ5-4 Ϩίʔυͷ੍ݶ όΠτΛͬͯదʹσʔ λΛಥͬࠐΈɺϨεϙϯεΛׂͤ͞Δ
w 4FDVSFϑϥά͕ผϨεϙϯεʹͳΔΑ͏ʹ w ͭҎ߱ͷϨεϙϯεΛڧ੍அ͢Δ w 4FDVSFϑϥά͕མͪͨ$PPLJFΛ͓͖ͳํ๏Ͱ ঌ্͕͠Δ -
Ԡ༻ɿ)454$VUUFS߈ܸ w )454ϔομΛಉ༷ʹΦʔόʔϑϩʔͤ͞ ڧ੍அʹΑͬͯ)454ػೳΛམͱ͢ w TUSJDUUSBOTQPSUTFDVSJUZNBYBHF JODMVEF4VC%PNBJOT w NBYBHF༗ޮظؒʢඵʣ w
JODMVEF4VC%PNBJOTαϒυϝΠϯʹؔͯ͠ )5514ͷΈڐՄ͢ΔΦϓγϣϯ w ϓϩύςΟͷ࣍ճͷϨεϙϯε࣌ͷͰ্ॻ͖ ͞ΕΔ༷ͳͷͰڧ੍அ߈ܸ͕ศར