Upgrade to Pro — share decks privately, control downloads, hide ads and more …

『プロフェッショナル SSL/TLS 読書会』 第 6 章

Ryo Sakuma
October 06, 2017

『プロフェッショナル SSL/TLS 読書会』 第 6 章

Ryo Sakuma

October 06, 2017
Tweet

More Decks by Ryo Sakuma

Other Decks in Technology

Transcript

  1. !IBTIFEIZQIFO w )BTI !IBTIFEIZQIFO  w 8FCEFWFMPQFS w +4 3VCZ

    4DBMB 3VTU 4FDVSJUZ FUDʜ w .P[JMMB4FDVSJUZ#MPH೔ຊޠ൛ w 8FCTFDVSJUZؔ࿈ͷ.%/هࣄ຋༁ w 44-ͱಉڃੜ
  2. #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 লུ࣌͸Կ΋੍ݶ͠ͳ͍
  3. #BTJD$POTUSBJOUTͷݕূෆඋ w ྫ3PPU*OUFSNFEJBUF&OEFOUJUZ w ຊདྷߦ͏΂͖ॲཧʢ͓͓·͔ʹʣ w &OEFOUJUZͷ$PNNPO/BNFΛ֬ೝ w *OUFSNFEJBUFͷެ։伴Ͱ&OEFOUJUZΛݕূ w

    3PPUͷެ։伴Ͱ*OUFSNFEJBUFΛݕূ w *OUFSNFEJBUF͕$"ূ໌ॻͰ͋Δ͔ͷ֬ೝ
 Ұൠͷূ໌ॻʹଞͷূ໌ॻΛൃߦͤ͞ͳ͍ͨΊ
  4. #BTJD$POTUSBJOUTͷݕূෆඋ w *&Ͱ#BTJD$POTUSBJOUT͕ແࢹ͞Ε͍ͯΔ͜ͱΛ .PYJF.BSMJOTQJLFʢԾ໊ʣ͕ʹใࠂ w .JDSPTPGU͸ʹ৘ใެ։ w ݪҼ͸*&ݻ༗Ͱ͸ͳ͘$SZQUP"1* w XFCαʔόِ૷ɾϝʔϧॺِ໊૷ɾূ໌ॻϕʔε

    ͷೝূγεςϜͰͷಛݖঢ֨ɾίʔυॺِ໊૷ w ౰ॳ.JDSPTPGU͸एׯ୙ͯ͠ൃදͨ͠Β͘͠ɺ .PYJFᐌ͘l*EPO`UGFFMMJLFXBTUJOHUJNFXJUI UIF.JDSPTPGU13EFQBSUNFOUz .PYJF
  5. %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)ͳͲͷ׳श͕ ՕॴҎ্मਖ਼͞Εͨ໛༷
  6. %)&&$%)&ݕূॲཧͷ࣮૷ϛε … OSStatus err; … if ((err = SSLHashSHA1.update(/**/)) !=

    0) goto fail; goto fail; if ((err = SSLHashSHA1.final(/**/)) != 0) … fail: … return err;
  7. $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͕ૹ৴͞Εͯ͠·͏
  8. ୅ସνΣʔϯূ໌ॻِ଄ w 0QFO44-͕ʹύονΛެ։ w $7& w ใࠂऀ͸"EBN-BOHMFZ%BWJE#FOKBNJO (PPHMF#PSJOH44-  w

    Ϋϩεϧʔτͷূ໌ॻνΣʔϯͱͯ͠ݕূ͢Δࡍɺ ݩʑͷνΣʔϯʹUSVTUFEͳূ໌ॻؚ͕·Ε͍ͯ Δͱɺ$"ϑϥάΛݕূ͢Δதؒূ໌ॻͷ਺Λݟ ޡͬͯ͠·͏όά w ؂༁ऀେ௡͞Μͷϒϩά IUUQEIBUFOBOFKQ KPWJ Ͱղઆ
  9. ϗετ໊ͷݕূʹ͓͚Δ໰୊ 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͢΂ܸͯ௜
  10. /FUTDBQF/BWJHBUPSͷܽؕ3/( w ೥ w ϒʔτ͔Βͷܦա࣌ؒʢϚΠΫϩඵʣ w ࣗ਎ͷϓϩηε*% w ਌ͷϓϩηε*% w

    ߈ܸର৅ͱಉ͡ 6OJY ϚγϯʹΞΫηεͰ͖ΔͳΒ ͱ͸ط஌ w ϚΠΫϩඵ?㲈?CJUͷηΩϡϦςΟ
  11. '3&",߈ܸ੒ཱ৚݅ w .J5.͕Ͱ͖Δ͜ͱ w αʔό͕༌ग़҉߸ํࣜͷҰ࣌త34" CJU Λ࢖ ༻Ͱ͖Δ͜ͱ w αʔόଆͰҰ࣌త34"ͷ伴ϖΞ͕࢖͍·Θ͞Εͯ

    ͍Δ͜ͱ w ΫϥΠΞϯτ͕༌ग़҉߸Ҏ֎ͷํࣜͰ΋Ұ࣌త 34" CJU ͕࢖͑ΔΑ͏֦ு͞Ε͍ͯΔ͜ͱ LΑΓલͷ0QFO44-
  12. ࣄલʹҼ਺෼ղ ͨ͠伴Ͱ෮߸ ڧݻͳ҉߸εΠʔτΛཁ੥ ऑ͍҉߸εΠʔτʹվ᜵ " Ұ࣌త34"伴 Λੜ੒ɾૹ৴ ϦΫΤετվ᜵ ΛӅ͢վ᜵ #

    ෆਖ਼ϨεϙϯεΛ৴ͯ͡ QSF@NBTUFS@TFDSFU Λ҉߸Խɾૹ৴ ʢຊจʹ͸ͳ͍͕ʣ վ᜵"ΛӅ͢ վ᜵#ΛӅ͢
  13. -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^
  14. ࣭໰ w 1ʮ-PHKBNͰར༻͞ΕΔͷ͸ɺ%)ύϥϝʔλ ͷαʔόॺ໊͕࠶ૹͰ͖ͯ͠·͏ͱ͍͏ϓϩτίϧ ͷऑ఺ ʜ ϦϓϨΠ߈ܸʹର͢Δอޢ͕ॺ໊ͷઃ ܭʹؚ·Ε͍ͯ·͕͢ɺͦͷͨΊͷ࢓૊Έ͸ΫϥΠ Ξϯτͱαʔόͷཚ਺ʹґଘ ʜ

    ΫϥΠΞϯτ͕ ਃ͠ग़ͨཚ਺ͷ஋Λ؍࡯͠ɺผͷϋϯυγΣΠΫͰ ࠶ར༻͢Δ͜ͱ͕ՄೳͳͷͰ͢ʯ digitally-signed struct { opaque client_random[32]; opaque server_random[32]; ServerDHParams params; } signed_params; 3'$4FD αʔόॺ໊ͱࢥ͖͠Օॴ
  15. ࣄલܭࢉ߈ܸ w ૉ਺Qݪ࢝ࠜH͸ϓϩτίϧͱͯ͠ط஌ w Ұ࣌αʔό伴 9 :T ͸Ωϟογϡ Ұ࣌తͱ͸ʜ 

    w %)伴ަ׵ʹର͢Δ/'4߈ܸ͕ஈ֊ʹ෼͚ΒΕ Δ͜ͱɺલஈͷܭࢉ͸ૉ਺QͷΈʹґଘ͢Δ͜ͱ ͷൃݟ͕-PHKBNͷݚڀ੒Ռ w CJUͷ伴ʹର͢Δલஈͷܭࢉ͸िؒ w ޙஈͷܭࢉ͸ඵະຬ w Ұ࣌伴ͷΩϟογϡظؒ಺ʹલஈͷܭࢉ͕ऴΘΕ͹ ΫϥΠΞϯτͷλΠϜΞ΢τ෼ʹؒʹ߹͏
  16. Ԡ༻ɿ)454$VUUFS߈ܸ w )454ϔομΛಉ༷ʹΦʔόʔϑϩʔͤ͞
 ڧ੍੾அʹΑͬͯ)454ػೳΛམͱ͢ w TUSJDUUSBOTQPSUTFDVSJUZNBYBHF JODMVEF4VC%PNBJOT w NBYBHF͸༗ޮظؒʢඵʣ w

    JODMVEF4VC%PNBJOT͸αϒυϝΠϯʹؔͯ͠΋ )5514ͷΈڐՄ͢ΔΦϓγϣϯ w ϓϩύςΟͷ஋͸࣍ճͷϨεϙϯε࣌ͷ஋Ͱ্ॻ͖ ͞ΕΔ࢓༷ͳͷͰڧ੍੾அ߈ܸ͕ศར