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

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

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

sylph01

June 22, 2018
Tweet

More Decks by sylph01

Other Decks in Technology

Transcript

  1. ୈ9ষ: ύϑΥʔϚϯε
    ࠷దԽ
    @ʰϓϩϑΣογϣφϧSSL/TLSʱಡ
    ॻձ
    Ryo Kajiwara (@s01), 6/22/2018

    View Slide

  2. TLS͸஗͍
    ͱ͓΋ʔ͡ΌΜʁ

    View Slide

  3. 9.1 ஗Ԇͱ઀ଓͷ؅ཧ
    TCPϨΠϠʔͷ࿩ɻ
    • ଳҬ: ͓ۚͰղܾͩʂ
    • ஗Ԇ: ޫͷ଎͞Λॻ͖׵͑Δʹ͸͍͘ΒੵΊ͹͍͍Ͱ͔͢

    View Slide

  4. 9.1 ஗Ԇͱ઀ଓͷ؅ཧ
    [ఆٛ] RTT(round trip time): ϦΫΤετ͕໨త஍ʹ౸ୡ͠Ϩεϙϯ
    ε͕ฦͬͯ͘Δ·Ͱʹ͔͔Δ࣌ؒɻ
    ͜͜Ͱ͸αʔόͷॲཧ࣌ؒ͸ແࢹ͞Ε͍ͯΔͱࢥͬͯΑ͍ɻཁ͢
    Δʹʢޫͷ଎͞͸ҰఆͱԾఆ͠ʣέʔϒϧͷԟ෮Ͱͷ௕͞ͱؔ܎
    ͕͋Δɻ
    3way handshake͸1.5RTTɻͨͩ͠ΫϥΠΞϯτ͔Β௨৴Λ։࢝͢
    ΔHTTPͳͲ͸ACKͱಉ࣌ʹΞϓϦέʔγϣϯσʔλΛૹ৴͢Δͷ
    Ͱ1RTTɻ

    View Slide

  5. 9.1.1 TCPͷ࠷దԽ
    TCP slow start: TCPͷ᫔᫓੍ޚํࣜɻ
    ૬ख͕ͲΕ͘Β͍ͷ଎౓Λग़ͤΔ͔Θ͔Βͳ͍ͷͰɺ࠷ॳ͸খ͞
    ͳ᫔᫓΢Οϯυ΢(congestion window)Λ࢖͍ɺঃʑʹͦͷαΠζΛ
    ্͍͛ͯ͘ɻ
    (7ষͷղઆͰHEIST߈ܸΛղઆͨ͠ࡍʹઆ໌ͨ͠Α͏ͳؾ͕͢Δ)
    HTTP઀ଓ͸୹໋ͳͷͰcwnd͕খ͍͞ঢ়ଶͰӡ༻͞Ε͕ͪɻTLSϋ
    ϯυγΣΠΫ͸઀ଓͷ࠷ॳʹى͜ΔͷͰখ͍͞cwndͷӨڹΛड͚
    ͕ͪɻ

    View Slide

  6. 9.1.1 TCPͷ࠷దԽ
    • ᫔᫓΢Οϯυ΢ॳظ஋ͷνϡʔχϯά
    • ࠷ۙ͸10 segment෼㲈15KBΛॳظ஋ͱ͢Δͷ͕ਪ঑
    • idleޙͷslow start཈ࢭ
    • /etc/sysctl.conf ʹͯ
    net.ipv4.tcp_slow_start_after_idle=0

    View Slide

  7. 9.1.2 ઀ଓͷ࣋ଓੑ
    TCPϋϯυγΣΠΫ/TLSϋϯυγΣΠΫ͕஗ԆͷӨڹΛड͚͕ͪ
    (RTTΛ૿΍͕ͪ͠)ͳͷͰ઀ଓΛ։͖ͬͺʹ͍ͨ͠ɻˠkeep-alive
    ͨͩ͠ରԠෆे෼ͳWebαʔό͕ͨ·ʹ͍Δɻ
    ҎԼͷέʔεͰ༗ར/ෆར:
    (+) ΫϥΠΞϯτ͕ಉ͡αʔόʔʹͨ͘͞ΜͷϦΫΤετΛ͢Δ
    (-) ΫϥΠΞϯτ͕αʔόʔʹ1ճ͔͠ϦΫΤετΛ͠ͳ͍

    View Slide

  8. 9.1.3 SPDY, HTTP/2
    ΈΜͳେ޷͖H2ͷ࿩ɻ
    SPDY: TCPͱHTTPͷؒʹ৽ͨͳϨΠϠΛಋೖɻෳ਺ͷHTTP req/res
    ΛଟॏԽ͢ΔͷͰ1αʔό͋ͨΓ1ϦΫΤετɻHTTP/2ͷ΋ͱʹ
    ͳͬͨɻ
    • TCP Fast Open: TCPϋϯυγΣΠΫ͔Β1RTTݮΒ͢
    • QUIC: UDPͷ্ͰTCPͱಉ͡Α͏ͳ͜ͱͰ͖ͨΒ࠷ڧͩΑͶ

    View Slide

  9. 9.1.4 CDN
    ஍ཧతʹ෼ࢄͨ͠େྔͷαʔόΛӡ༻ɻ
    • Τοδʹ͓͚ΔΩϟογϯά
    • ઀ଓͷ؅ཧ
    • ಺෦ωοτϫʔΫͰ઀ଓΛ௕ظʹΘͨͬͯҡ࣋͢Δͱ઀ଓΛ
    ຖճൃੜͤ͞ͳͯ͘Α͍
    • ಺෦ωοτϫʔΫ಺Ͱ࠷దͳroutingΛ͢Δ
    • ߋͳΔ࠷దԽͷͨΊͷಠࣗϓϩτίϧ͕࢖͑Δ

    View Slide

  10. 9.2 TLSͷ࠷దԽ

    View Slide

  11. 9.2.1 伴ަ׵
    • 伴௕: ௕͍ͱsecure͚ͩͲͦΕ͚ͩॏ͍ɻ
    • ൿີ伴ΞϧΰϦζϜ
    • RSA͸࠷௿Ͱ΋2048bitҎ্ʹͳ͖ͬͯͯΔɻܭࢉྔ͕ͭΒ
    ͍ɻECDSAͳΒ΋ͬͱ଎͍ɻ

    View Slide

  12. 9.2.1 伴ަ׵
    • 伴ަ׵ΞϧΰϦζϜ
    • RSA͸Forward Secrecy͕ͳ͍
    • DHE͸஗͍
    • ΑΖ͍͠ɺͳΒ͹ECDHEͩ
    • secp256v1ͳΒ128bit҆શ
    • secp384v1ʹͯ͠΋҆શੑ͸ͦ͜·ͰΑ͘ͳΒͳ͍͚Ͳܭ
    ࢉྔ͕૿͑Δ

    View Slide

  13. 9.2.1 伴ަ׵
    ςετ݁Ռͷάϥϑ(p268):
    • RSA -> ECDHE_ECDSA ʹ͢ΔͱPFSΛಘ্ͨͰϋϯυγΣΠΫͷ
    ύϑΥʔϚϯε͕2ഒʹ޲্ʂ
    • DHE͸1024bitͰ͢Β஗͍ɻ
    • ஫: ΫϥΠΞϯτ͸࡞ۀ͕૿͑ͯ΋໰୊Ͱ͸ͳ͍ɻαʔόʔ͸ͨ
    ͘͞Μͷ઀ଓΛ͞͹͘ͷͰ࡞ۀ͕૿͑Δͱͦͷ෼͚ͩͭΒ͍ɻ

    View Slide

  14. False Startʹ͍ͭͯ
    ϋϯυγΣΠΫ͕੒ޭ͢ΔલఏͰΞϓϦέʔγϣϯσʔλΛૹΕ
    ΔΑ͏ʹ͢Δ࢓༷ɻ
    ߈ܸ͞Εͨ৔߹҉߸Խ͞ΕͨΞϓϦέʔγϣϯσʔλͷҰ෦͕ૹ
    ৴͞Εͯ͠·͏ɻ·ͨɺϋϯυγΣΠΫͷ׬શੑݕূ͸ϋϯυ
    γΣΠΫ͕ऴΘΒͳ͍ͱͰ͖ͳ͍ͷͰ҉߸ԽύϥϝʔλΛ߈ܸ͞
    ΕΔ͜ͱ͕͋Γ͏Δɻ
    →Googleʮڧ͍҉߸࢖ͬͯΕ͹͍͍Μ͡Όͳ͍ͷʁʯ
    →Logjam߈ܸʮͦΜͳ͜ͱ͸ͳ͍ʯʢڧ͍伴ަ׵΋ඞཁʣ

    View Slide

  15. 9.2.2 ূ໌ॻ
    • ূ໌ॻνΣʔϯ͸ඞཁ࠷௿ݶͷαΠζʹ͠ɺ׬શͳνΣʔϯΛ
    ఏࣔ͢Δ͜ͱ
    • αʔόͷূ໌ॻ + ൃߦݩCAͷূ໌ॻ
    • ϧʔτূ໌ॻ͸UAͷखݩʹ͋ΔͷͰ͚ͭͳͯ͘Α͍
    • ׬શͳ΋ͷͰͳ͍ͱ୳͠ʹߦ͘ख͕ؒൃੜ
    • αΠζ͕খ͘͞ͳΔͷͰECDSAূ໌ॻΛ࢖͏

    View Slide

  16. 9.2.2 ূ໌ॻ
    • 1ͭͷূ໌ॻΛෳ਺αΠτͰڞ༗͢Δͱɺϗετ໊Λূ໌ॻʹ௥
    Ճ͠ͳͯ͘͸͍͚ͳ͘ͳͬͯূ໌ॻͷαΠζ͕௕͘ͳΔ
    • ओʹSNIඇରԠΫϥΠΞϯτରࡦͱ͍͏͚ΕͲɺͦ΋ͦ΋͜
    Μͳ͜ͱ͠ͳ͍ͷ͕ਖ਼͍͠ͷͰ͸…ʁ
    • ͱ͸͍͑ɺCloudFlareܦ༝ͷGitHub PagesͷSSLԽͩͱ
    SubjectAltName͕ࢁ΄Ͳ͍ͭͯ͘Δͷͩͬͨ
    • ࠷ۙ͸ͦͷඞཁͳ͘ͳͬͨ

    View Slide

  17. 9.2.3 ࣦޮͷ֬ೝ
    • CRLͰ͸ͳ͘OCSPΛ࢖͏ɻCRL͸௕͘ͳΓ͕ͪɻ
    • ߴ଎ͳOCSPϨεϙϯμΛඋ͑ͨCAΛ࢖͏
    • OCSP staplingΛ࢖͏
    EV͸ৗʹࣦޮ֬ೝΛ͢Δ͕DV͸ඞͣ͠΋ͦͷݶΓͰ͸ͳ͍ͷͰEV
    ΑΓDVͷ΄͏͕଎͍ʂEV͸ΦϫίϯʂʁˠOCSP stapling͢Ε͹ύ
    ϑΥʔϚϯε͸มΘΒͳ͍ͷͰͦΜͳ͜ͱ͸ͳ͍ɻ

    View Slide

  18. 9.2.4 ηογϣϯϦβϯϓγϣϯ
    ϑϧϋϯυγΣΠΫͷ਺͕ݮΕ͹ݮΔ΄ͲΑ͍ɻsession cacheΛద
    ੾ʹઃఆ͠Α͏ɻ

    View Slide

  19. 9.2.5 సૹͷΦʔόʔϔου
    TLSͷసૹ୯Ґ͸TLSϨίʔυ(௨ৗ16384byte)ɻ͜͜ʹσʔλ͕ଟ
    ͘ೖΕ͹ೖΔ΄Ͳޮ཰͕Α͍ɻ
    σʔλҎ֎ͷ෦෼ͱ͸ϔομɺMACɺύσΟϯάɺIVͳͲɻ
    AEADͩͱΦʔόʔϔου͕খ͍͞ɻMAC-then-Encryptͷ᠘ͷӨڹ
    ΋ड͚ͳ͍͠ɺTLS 1.2Ҏ߱ͷAEADར༻͸ηΩϡϦςΟͰ΋ύ
    ϑΥʔϚϯεͰ΋༏ΕͯΔͱΘ͔Δɻ

    View Slide

  20. 9.2.6 ڞ௨伴҉߸Խํࣜ
    AES-NIରԠϚγϯΛ࢖͑ɻ/proc/cpuinfoͷflagsʹaesͬͯೖͬͯ
    Ε͹okɻ
    • AES͸଎͍ɻRC4͸଎͍͚Ͳ੬ऑͳͷͰ࢖͏ཧ༝͕ͳ͍ɻ
    • CAMELLIAͱAES͸ΞΫηϥϨʔγϣϯ͕͋ΔͱAESͷ΄͏͕2.77
    ഒ଎͍ɻ
    • SHA256͸SHA-1ΑΓ஗͍ɻ࢓ํͳ͍Ͷɻ
    • AEAD(GCMϞʔυ)͸CBCϞʔυͱൺ΂ͯ଎͍ɻ׬ᘳͰ͸ʁ

    View Slide

  21. 9.2.7 TLSϨίʔυͷόοϑΝ…
    TLSϨίʔυ͕ෳ਺ύέοτʹ෼ׂ͞ΕΔ͜ͱ͕͋Δɻͦͷ৔߹Ͱ
    ΋TLSϨίʔυ͕׬શʹἧ͏·Ͱ͸෮߸Խ/׬શੑݕূ͕Ͱ͖ͳ
    ͍ɻ
    TLSϨίʔυαΠζͷௐ੔͕Ͱ͖ΔWebαʔόͳΒϨίʔυαΠζ
    ΛԼ͛Δํ๏΋͋Δɻ
    MTU - IPv6 header - TCP header - TCP record = data size
    MTU͕มԽ͠͏Δ͜ͱʹ஫ҙɻ

    View Slide

  22. 9.2.8 ૬ޓӡ༻ੑ
    ৽͍͠ϓϩτίϧΛαʔόʔ͕ड͚෇͚ͳ͍ͱࣗಈతʹ࠶ωΰγ
    Τʔγϣϯ͕ൃੜͯ͠͠·͍RTT͕૿͑Δɻ͓ͱͳ͘͠࠷৽όʔ
    δϣϯ/࠷৽֦ுʹରԠͤ͞Δͷ͕Α͍ɻ

    View Slide

  23. 9.2.9 ϋʔυ΢ΣΞΞΫηϥϨʔγϣ
    ϯ
    ݱ୅తʹ͸αʔό͕҉߸νοϓΛผʹ࣋ͭཧ༝͸ύϑΥʔϚϯε
    ໘Ͱ͸΄ͱΜͲଘࡏ͠ͳ͍ɻͲͪΒ͔ͱ͍͏ͱHSM(hardware
    security module)ͱͯ͠ͷ༻్ɻ

    View Slide

  24. 9.3 DoS߈ܸ
    TLSʹؔ܎ͳ͍ରࡦͱͯ͠͸
    • গ਺ͷIPΞυϨε͔ΒདྷΔ৔߹͸throttling
    • αʔό਺Λ૿΍͢ʢࡳଋͰԥΔʣ
    • ͦΕͰ΋ແཧͳΒDDoSରࡦઐ໳ۀऀΛཔΔʢ΍͸ΓࡳଋͰԥ
    Δʣ

    View Slide

  25. 9.3.1 伴ަ׵ͱ҉߸Խʹର͢ΔCPUͷ
    ίετ
    RSAͰ͸ެ։伴ͷॲཧʢʹΫϥΠΞϯτ͕΍ΔʣΑΓ΋ൿີ伴ͷ
    ॲཧʢʹαʔό͕΍Δʣͷ΄͏͕ॏ͍ɻ
    →ECDSAΛ࢖͑ɻ

    View Slide

  26. 9.3.2 ΫϥΠΞϯτىݯͷ࠶ωΰγ
    Τʔγϣϯ
    ͜Ε͕ՄೳͳΒɺಉҰ઀ଓͰେྔͷϋϯυγΣΠΫΛൃੜͤ͞Β
    ΕΔͷͰɺthrottlingͷҙຯ͕ͳ͍ɻ
    IIS 6ɺApache 2.2.15Ҏ߱Ͱ͸ΫϥΠΞϯτىݯͷ࠶ωΰγΤʔ
    γϣϯ͸ରԠ͍ͯ͠ͳ͍ʢNginx͸ͦ΋ͦ΋࠷ॳ͔Βͳ͍ʣͷͰݱ
    ୅తʹ͸΄΅໰୊ͳ͍ɻηΩϡϦςΟ্ͷ੬ऑੑ΋͋Γ͏ΔͷͰ
    ࢖Θͳ͍΄͏͕͍͍ػೳͰ͢Ͷʢˠ7.1ষʣɻ

    View Slide

  27. 9.3.3 TLSʹର͢ΔDoS߈ܸͷ࠷దԽ
    ஫: DoS߈ܸͷ࠷దԽͰ͢ɻ
    • ҉߸ॲཧΛ͠ͳ͍ϋϯυγΣΠΫϝοηʔδΛϋʔυίʔυ
    • αʔό͔Βड͚औͬͨϝοηʔδͷparse/ݕূΛলུ
    ͢Δͱαʔόʹ͸࠷ޙ·Ͱ༗ޮͳϋϯυγΣΠΫʹݟ͑ΔͷͰɺ
    αʔόͰ͸ܭࢉ͕૸ͬͯ͠·͏ɻαʔόʹରͯ͠ʮޮ཰Α͘ʯ
    ʮܭࢉΛͤ͞Δʯ͜ͱ͕Ͱ͖ͯ͠·͏ɻ͜ΕΛ΍Δͷ͕
    sslsqueezeɻ

    View Slide