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

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

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

404139d782ec666acea93dffc86e089f?s=128

sylph01

May 12, 2017
Tweet

Transcript

  1. (1) SSL/TLSͱ҉߸ٕज़ @ʰϓϩϑΣογϣφϧSSL/TLSʱಡ ॻձ Ryo Kajiwara (@s01), 5/12/2017

  2. 1.1 Transport Layer Security (p.1-2) TLSͷ4ͭͷ໨ඪ(্͔Βߴ༏ઌ): • ҉߸ֶతͳηΩϡϦςΟ(Cryptographic security) •

    ૬ޓӡ༻ੑ(Interoperability) • ֦ுੑ(Extensibility) • ޮ཰ੑ(Efficiency)
  3. 1.2 ωοτϫʔΫͷ֊૚ ͍ΘΏΔOSIࢀরϞσϧͷ࿩ɻTLS͸໊લͷ௨Γτϥϯεϙʔτ૚ (ୈ4૚ = TCP, UDP)ʹରͯ͠securityΛఏڙ͢ΔɻϓϨθϯςʔγϣ ϯ૚=ୈ6૚ʹҐஔ͢Δɻ TLS͕ͳͯ͘΋HTTP(=ୈ7૚)͸ʮػೳ͢Δʯɻ

  4. 1.3 ϓϩτίϧͷྺ࢙ • SSL2: 1994/11 • SSL 3.0: 1995ޙ൒ •

    TLS 1.0(RFC 2246): 1999/1 • ΄ͱΜͲSSL 3.0ͱࠩ͸ͳ͍͕ޓ׵ੑͳ͠ • TLS 1.1: 2006/4 (security fix, TLS֦ு(2003/6)) • TLS 1.2: 2008/4 (AEADରԠ) • TLS 1.3: ongoing
  5. 1.4 ҉߸ٕज़ Ͳͷ͘Β͍҉߸ٕज़ʹ਌͠Έ͕͋Δ͔ʹΑͬͯಡΈඈ͹͠·͢ɻ • ҉߸ֶͷ࿦จ͕ಡΊΔ/ॻ͚Δ: ৸ͯͯେৎ෉ • ʢͨͿΜ͜ͷؒͩͱࢥ͍·͢ʣ • ύεϫʔυͬͯ҉߸Խͯ͠อଘ͞ΕΔΜͩΑͶʁ:

    Ώͬ͘ΓಡΉ
  6. 1.4.1 ཁૉٕज़ (p.5) Kerckhoffsͷݪଇ ҉߸γεςϜ͸ɺ伴Ҏ֎ͷ͢΂͕ͯ߈ܸऀʹঠѲ͞Εͨͱͯ͠΋ ҆શͰͳ͚Ε͹ͳΒͳ͍ɻ • ҉߸ΞϧΰϦζϜ͕ఢରऀʹ࿙Εͯ΋҆શͰ͋Δඞཁ͕͋Δ • ༏Εͨ҉߸ΞϧΰϦζϜΛઃܭ͢Δͷ͸೉͍͠ɻͨ͘͞Μͷਓ

    ͷ໨ʹ৮Εͯਫ਼ࠪ͞Εͨ΋ͷ΄Ͳ҆શɻ ݱ୅ͷ҉߸͸ʮܭࢉྔత҆શੑʯʹͦͷࠜڌΛஔ͍͍ͯΔ
  7. 1.4.1 ཁૉٕज़ (p.7) ετϦʔϜ҉߸ 伴͔ΒϥϯμϜʹݟ͑ΔจࣈྻͰ͋Δ伴ετϦʔϜΛੜ੒͠ɺ ͱͯ͠҉߸จΛಘΔɻ ετϦʔϜ҉߸Ͱ͸ʮಉ͡伴Λ࢖͍·Θ͞ͳ͍͜ͱʯ͕ඇৗʹॏ ཁɻˠ௕ظؒʹΘͨͬͯར༻͢Δൿີ伴͔Βɺ௨৴ͷͨͼʹ1ճݶ Γͷ伴ʢηογϣϯ伴ʣΛಋग़ͯ͠࢖͏ɻ RC4͕༗໊͕ͩऑ఺͕஌ΒΕ͍ͯΔɻECRYPT

    Stream Cipher Project ʹ࠷৽ͷ΋ͷ͕͋ΔɻSalsa20/12΍SOSEMANUKͳͲɻ
  8. 1.4.1 ཁૉٕज़ (p.8) ϒϩοΫ҉߸ ϒϩοΫ୯ҐͰ·ͱΊͯ҉߸Խɻଟ͘ͷํࣜͰ16byte͝ͱɻೖྗ Λड͚ͱͬͯϥϯμϜʹݟ͑Δग़ྗΛฦؔ͢਺ɻ ϒϩοΫ҉߸͸೚ҙͷ௕͞ͷσʔλΛ҉߸Խ͢ΔͨΊ҉߸ར༻Ϟ ʔυͱ૊Έ߹ΘͤͰ࢖͏ɻ ੈքͰ࠷΋Α͘ར༻͞Ε͍ͯΔͷ͸AESɻ伴௕͕128bit/192bit/ 256bitɺϒϩοΫ௕͸128bitݻఆɻ

  9. 1.4.1 ཁૉٕज़ (p.9) ϋογϡؔ਺ • ݪ૾ܭࢉࠔ೉ੑ: ͋Δϋογϡ஋ʹର͠ɺಉ͡ϋογϡ஋ʹͳΔ ϝοηʔδΛݟ͚ͭΔ͜ͱ͕ࠔ೉Ͱ͋Δੑ࣭ • ୈ2ݪ૾ܭࢉࠔ೉ੑ(ऑিಥ଱ੑ):

    ͋Δϝοηʔδͱϋογϡ஋͔ Βɺಉ͡ϋογϡ஋ʹͳΔผͷϝοηʔδΛݟ͚ͭΔ͜ͱ͕ࠔ ೉Ͱ͋Δੑ࣭ • িಥ଱ੑ(ڧিಥ଱ੑ): ಉ͡ϋογϡ஋ʹͳΔϝοηʔδͷ૊Έ ߹ΘͤΛݟ͚ͭΔ͜ͱ͕ࠔ೉Ͱ͋Δੑ࣭
  10. 1.4.1 ཁૉٕज़ (p.9) SHA1(160bit)͕Α͘࢖ΘΕ͍ͯΔ͕SHA256΁ͷஔ͖׵͕͑ਪ঑͞ Ε͍ͯΔɻ ϋογϡؔ਺ͷڧ౓͸ݪཧతʹʮ஀ੜ೔ͷύϥυοΫεʯ͔ΒΑ ͯ͘ϋογϡ஋ͷ௕͞ͷ൒෼ɻn-bitͷϋογϡ͸2^(n/2)ճϋογ ϡ஋ܭࢉ͢Ε͹িಥΛߴ֬཰Ͱݟ͚ͭΒΕΔɻ

  11. 1.4.1 ཁૉٕज़ (p.10) MAC(Message Authentication Code) ͋Δ͍͸ 伴෇͖ϋογϡ(keyed- hash):ϋογϡؔ਺Λ֦ுͯ͠ೝূΛՄೳʹͨ͠΋ͷɻϋογϡ஋ ΛσʔλͱҰॹʹૹΔͱϋογϡ஋ͦͷ΋ͷ΋վ͟Μ͞Ε͏Δͷ

    Ͱͦͷରࡦʹ࢖͏ɻ
  12. 1.4.1 ཁૉٕज़ (p.10-11) ҉߸ར༻Ϟʔυ • ECB: ϒϩοΫ୯ҐͰݸผʹ҉߸Խɻ҉߸จʹฏจͷ৘ใ͕ݱΕ ͯ͠·͏ͨΊ੬ऑɻ࢖͏ཧ༝ͳ͠ɻ • CBC:

    લͷϒϩοΫͷ҉߸Խ݁ՌͷXORΛͱ͔ͬͯΒ҉߸Խɻ • ॳظԽϕΫτϧ(IV)ΛऔΔɻϥϯμϜͳ஋Λ࢖͏͜ͱͱɺ͜ͷ ஋Λ࢖͍·Θ͞ͳ͍͜ͱ͕ॏཁɻ • ଞ: CTRɺGCMɺOCBͳͲɻGCMͱOCB͸ೝূ͖ͭ҉߸Λఏڙɻ
  13. None
  14. None
  15. CTRϞʔυͷ৔߹ɺ҉߸Խ/෮߸Խ྆ํͰNonceͱcounterͷ҉߸Խ Λߦ͏ɻΑͬͯCTRϞʔυʹద༻͢Δؔ਺͸block cipherͰ͸ͳ͘ pseudo-random functionͰे෼ɻ

  16. 1.4.1 ཁૉٕज़ (p.11-12) ެ։伴҉߸ํࣜ ҉߸Խʹ࢖͏伴ͱ෮߸ʹ࢖͏伴͕ผɻ ެ։伴Λ҆શʹ޿͘ڞ༗Ͱ͖Ε͹ࣗ෼͚͕ͩಡΊΔϝοηʔδΛ શһ͔Βૹͬͯ΋Β͑ΔʢˠPKIɺୈ3ষʹͯʣɻ ެ։伴҉߸͸ܭࢉʹ͕͔͔࣌ؒΔͷͰɺڞ༗伴ͷωΰγΤʔγϣ ϯʹ࢖ΘΕɺͦͷޙ͸ڞ༗伴Λ࢖ͬͯରশ伴҉߸Λ࢖͏ɻ RSAɺElGamal(DH伴ަ׵Λެ։伴҉߸ʹద༻ͨ͠΋ͷ)

  17. 1.4.1 ཁૉٕज़ (p.13) ిࢠॺ໊ ిࢠϝοηʔδ΍จॻͷਅਖ਼ੑ(authenticity)ΛݕূՄೳʹ͢Δ҉߸ ֶతͳखஈɻ MAC΋ిࢠॺ໊ͷҰछ͕ͩMAC伴ͷڞ༗ͱ͍͏໰୊͕͋Δɻ RSAΛٯํ޲ʹద༻͢Δ͜ͱͰిࢠॺ໊ΞϧΰϦζϜͱͯ͠࢖͑ ΔɻҰํͰDSA/ECDSA͸҉߸ԽΞϧΰϦζϜͱͯ͠͸࢖͑ͳ͍ɻ

  18. 1.4.1 ཁૉٕज़ (p.13) ཚ਺ੜ੒ث ҉߸ʹ͸඼࣭ͷ͍͍ʢhigh entropyͳʣཚ਺͕ඞཁɻ ֎෦૷ஔͷׂΓࠐΈʹΑΔΤϯτϩϐʔͷऩू(=TRNG)Ͱ͸͍ͩͨ ͍ͷ৔߹े෼ͳΤϯτϩϐʔ͕ू·Βͳ͍ͷͰ࣮ࡍ͸ٙࣅཚ਺ੜ ੒ث(PRNG)Λ࢖͏ɻ҉߸ʹ༻͍Δ΋ͷʹ͸಺෦ঢ়ଶͷ༧ଌෆՄೳ ੑΛ࣋ͬͨCSPRNG͕ඞཁɻ

  19. 1.4.2 ϓϩτίϧ (p.14) ؆୯ͳ҉߸௨৴ϓϩτίϧͷྫΛ͍ࣔͯ͠Δɻ • ·ͱ·ͬͨσʔλͷ҉߸Խ͸AESͰ • վ͟Μʹରॲ͢ΔͨΊϝοηʔδʹMACΛ෇༩ • ϝοηʔδͷܽམ/ϦϓϨΠ߈ܸʹରॲ͢ΔͨΊ࿈൪Λ෇༩

    • ձ࿩ͷऴྃΛࣔ͢ಛघͳϝοηʔδ • ձ࿩ʹઌཱͬͯެ։伴҉߸ํࣜͰޓ͍Λೝূ • 伴ަ׵ΞϧΰϦζϜͰ҉߸伴Λަ׵
  20. 1.4.2 ϓϩτίϧ (p.14) TLSʹ͓͍ͯ΋ 1. ೝূͱ伴ަ׵ΛؚΜͩϋϯυγΣΠΫ 2. ϋϯυγΣΠΫޙʹػີੑͱ׬શੑͷ͋Δঢ়ଶͰσʔλΛަ׵ 3. γϟοτμ΢ϯͷखॱͰऴྃ

    Λߦ͏ɻ
  21. 1.4.3 ҉߸ٕज़ʹର͢Δ߈ܸ (p.15) • ૯౰Γ߈ܸ • ࣮૷ʢόάʣʹର͢Δ߈ܸ: λΠϛϯά߈ܸͳͲ͕Α͘஌ΒΕΔ • αʔόʹ௚઀৵ೖͯ͠҉߸伴ΛऔΔ΄͏͕؆୯ͳ͜ͱ΋

    ΄ͱΜͲͷ৔߹ɺʮϓϩτίϧΛࣗ෼Ͱઃܭ͠ͳ͍ʯʮ҉߸ॲཧ ͷίʔυΛࣗ෼Ͱ࣮૷͠ͳ͍ʯ΄͏͕҆શɻ
  22. 1.4.4 ҉߸ڧ౓ (p.16-17) ҉߸ͷڧ౓ = ҉߸ΞϧΰϦζϜΛഁΔͷʹඞཁͳૢ࡞ͷճ਺ɺ͜ ΕΛϏοτ҆શੑͱ͍͏ɻ ҉߸ԽํࣜʹΑͬͯϏοτ҆શੑͷॏΈ͕ҟͳΔͷͰɺଞͷํࣜ ͷͲͷϨϕϧͱ౳Ձ͔ɺͱ͍͏ม׵ද͕͋Δɻ 2012೥࣌఺Ͱʮ30೥ͷ߈ܸʹର͢Δอޢʯɿڞ௨伴҉߸Խʹ͓͚

    Δ128Ϗοτ૬౰
  23. 1.4.4 ҉߸ڧ౓ (p.16-17) NIST SP800-57 Part1 Rev.3 ͷp.64ʹ͋Δ౳Ձ҆શੑͷද1 ڞ௨伴҉߸ RSA/DSA/DH

    ପԁۂઢ҉߸ ϋογϡ஋ 80 1024 160 160 112 2048 224 224 128 3072 256 256 256 15360 512 512 1 ୯Ґ͸ͦΕͧΕbit
  24. 1.4.5 MITM߈ܸ (p.17-21) ΞΫηεͷୣऔ • ARP spoofing: MACΞυϨεͱIPΞυϨεͷؔ࿈෇͚Λ࠮শ͢Δ ͜ͱͰϩʔΧϧωοτϫʔΫʹ͓͚Δܦ࿏৘ใΛ࠮শ͢Δ •

    WPAD(Web Proxy Auto-Discovery) hijacking: ِͷϓϩΩγʹ༠ಋ • DNS hijacking, DNS cache poisoning: ِͷDNS৘ใΛ༩͑Δ͜ͱͰ υϝΠϯʹ޲͔͏τϥϑΟοΫΛ৐ͬऔΔɻ • BGP route hijacking: Πϯλʔωοτ্ͷϧʔλ͕ෆਖ਼ͳܦ࿏Λ ࢦఆ͢Δ͜ͱͰ௨৴͕߈ܸऀͷͱ͜ΖΛ௨Δ
  25. 1.4.5 MITM߈ܸ (p.17-21) डಈత߈ܸ • ҉߸Խ͞Ε͍ͯͳ͍τϥϑΟοΫΛܧଓతʹϞχλϦϯά • ҉߸Խ͞ΕͨτϥϑΟοΫͰ΋௕ظؒอଘͯ͠҉߸͕ഁΒΕΔ ͷΛ଴ͯ͹Α͍ •

    Perfect Forward Secrecy2ͷॏཁੑɻಉ͡伴Λ࢖ͬͯաڈʹ͞ ͔ͷ΅ͬͯ௨৴͕෮ݩͰ͖ΔͱϚζ͍ɻ 2 Perfect Forward SecrecyͱForward Secrecy͸ಉٛɻ
  26. 1.4.5 MITM߈ܸ (p.17-21) ೳಈతͳ߈ܸ ैདྷͷMITM߈ܸ: Mallory͕ʮBobͱ࿩͍ͯ͠Δ͔ͷΑ͏ʹAliceʹࢥ ͍ࠐ·ͤΔʯʹೝূΛλʔήοτʹͨ͠΋ͷɻ ௨ৗͷDH伴ަ׵Ͱ͸ೝূ͕ఏڙ͞Εͳ͍ͷͰ͜Ε͕Մೳɻ

  27. 1.4.5 MITM߈ܸ (p.17-21) ೳಈతͳ߈ܸ TLSͷ৔߹ɺAlice͕༗ޮͳ΋ͷͱͯ͠ड͚औΔΑ͏ͳূ໌ॻΛ Mallory͕ఏࣔ͢Δ͜ͱ͕ཧ૝తͳ߈ܸɻ αʔϏεΛὃͯ͠ূ໌ॻΛೖख͢Δํ๏͸4ষɺ༗ޮʹݟ͑Δূ໌ ॻΛߏ੒͢Δ߈ܸ͸6ষʹͯɻܯࠂΛແࢹ͢Δ͜ͱΛظ଴ͯ͠ෆਖ਼ ͳূ໌ॻΛఏࣔ͢Δ͜ͱ΋ɻϒϥ΢βʹ҉߸ԽΛແޮԽ͢ΔΑ͏ ͳϦΫΤετΛૹ৴͢Δ߈ܸ΋ɻ7ষʹͯɻ

    ίετ͕ߴ͍ͨΊେن໛ʹ͸ߦΘͣಛఆͷର৅ʹରͯ͠ߦ͏ɻ
  28. None
  29. ิ଍ ຊʹ͸ࡌͬͯͳ͍͚Ͳؔ࿈͢Δ࿩·ͱΊɻ 1. ετϦʔϜ҉߸ͱOne-Time Pad 2. িಥ଱ੑʹؔ͢Δ༻ޠʹ͍ͭͯ 3. HMACͷఆٛ 4.

    DH伴ަ׵ʹ͓͚Δதؒऀ߈ܸ
  30. ετϦʔϜ҉߸ͱOne-Time Pad One-Time Pad(Vernam҉߸)Ͱ͸ฏจͱಉ͡௕͞ͷཚ਺ྻΛ伴ͱ͠ ͯ ͷΑ͏ʹ҉߸จΛಘΔɻOne-Time Pad ͸ฏจͷ৘ใΛҰ੾҉߸จʹ࢒͞ͳ͍৘ใྔతʹperfectly secret ͳ҉߸͕ͩݱ࣮తͰͳ͍ͷͰɺݱ࣮ʹ͸୹͍伴͔Β伴ετϦʔϜ

    Λੜ੒͢Δɻ
  31. িಥ଱ੑʹؔ͢Δ༻ޠʹ͍ͭͯ SHA1͸SHAtteredͰڧিಥ଱ੑʢʹ1ͭͷিಥ͢ΔϖΞΛ࡞Γग़͢ ͜ͱʣ͸ಥഁ͞Ε͕ͨɺऑিಥ଱ੑʢʹ͋Δจࣈྻʹର͢Δϋο γϡ஋ͱಉ͡ϋογϡ஋Λ༩͑ΔผͷจࣈྻΛࣔ͢ʣ͸·ͩಥഁ ͞Ε͍ͯͳ͍ͷͰɺ͜Ε͚ͩͰ΋ͬͯʮύεϫʔυϋογϡͱͯ͠ ෆద֨ʯͱ͍͏ͷ͸΢ιɻ΋ͬͱ΋ɺଞͷબ୒ࢶ͕΋ͬͱ༏लͳ ͷͰSHA256΍bcryptΛ࢖͍·͠ΐ͏ɻ

  32. HMACͷఆٛ ϋογϡؔ਺Hͱ伴KΛ࢖ͬͯɺ ipad = Kͷ௕͞෼ͷ0x36 opad = Kͷ௕͞෼ͷ0x5c ʢ ||

    ͸࿈݁Λද͢ɻͳͷͰɺ ͱtextΛ͚ͬͭͨ͘΋ͷͷϋ ογϡ஋Λɺ ͷޙΖʹ͚ͬͭͯ͘ɺͦͷϋογϡΛऔ Δɺͱ͍͏͜ͱʣ
  33. DH伴ަ׵ʹ͓͚Δதؒऀ߈ܸ (ECͰͳ͍)DH伴ަ׵: • ެ։ͷ஋ • p ͸஋ͷେ͖ͳૉ਺ • g ͸

    ͷੜ੒ݩ • ൿີͷ஋: • ૬खʹૹΒΕΔ஋:
  34. None
  35. None
  36. DH伴ަ׵ʹ͓͚Δதؒऀ߈ܸ தؒऀEve͕ ͷ஋Λड͚औΓɺ ͱಉ༷ͷੑ࣭Λ࣋ͭ Λੜ੒͠ɺҎԼͷ஋Λ૬खʹ୅ΘΓʹ౉͢:

  37. DH伴ަ׵ʹ͓͚Δதؒऀ߈ܸ ͦ͏͢ΔͱAliceͱBob͸ҎԼͷ஋Λܭࢉ͢Δ: ͜ͷͱ͖ɺAliceͱEveɺEveͱBobͷؒʹڞ௨伴ͷਃ͠߹Θ͕ͤ੒ཱ ͢Δʢલऀ͸ ɺޙऀ͸ ʣɻ