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

SSL勉強会 - 「クラウドを支えるこれからの暗号技術」を読んで

mashijp
November 22, 2016

SSL勉強会 - 「クラウドを支えるこれからの暗号技術」を読んで

クラウドを支えるこれからの暗号技術: https://herumi.github.io/ango/
の第一部を前提に、SSL(TLS)について解説します

- SSLにおける鍵交換: DH, RSA, .... の解説
- SSLネゴシエーション: 具体的にどのようなメッセージがやりとりされているかの解説
- SSLセッションの再利用

mashijp

November 22, 2016
Tweet

More Decks by mashijp

Other Decks in Technology

Transcript

  1. ࠓ೔ͷSSLษڧձͷ໨త • SSL / TLS ͰͲͷΑ͏ʹ҉߸௨৴͕ߦΘΕ͍ͯΔ͔Λղ આ͠ͳ͕Βٞ࿦͠Α͏ • ର৅ऀ •

    ʮΫϥ΢υΛࢧ͑Δ͜Ε͔Βͷ҉߸ٕज़ʯͷୈҰ෦ΛಡΜͰ۩ ମతʹͲ͏௨৴͍ͯ͠Δͷ͔ؾʹͳͬͨਓ • ͜ͷຊΛલఏʹ࿩ΛਐΊΔ • SSLͰެ։伴҉߸Λ࢖͏͜ͱ΍αʔόূ໌ॻΛ࢖͏͜ͱ͸஌ͬ ͍ͯΔ͕ɺγʔέϯε͸஌Βͳ͍ਓ • ূ໌ॻൃߦػؔ, ೝূہͷ࿩͸͠ͳ͍ ※ Ϋϥ΢υΛࢧ͑Δ͜Ε͔Βͷ҉߸ٕज़ … https://herumi.github.io/ango/
  2. SSL / TLS • SSL (Secure Sockets Layer) • SSL

    2.0, 3.0 (੬ऑͳͨΊར༻ېࢭ) • ΦϫίϯͳΜͰ๨ΕΑ͏ • TLS (Transport Layer Security) • SSL ͷޙܧɻ৽͍͠SSLͱࢥ͍ͬͯΕ͹OK • TLS 1.0, 1.1, 1.2 (ΈΜͳઈࢍར༻த) • TLS 1.3 (ࡦఆத) • ͜ͷࢿྉͰ͸Ұ෦Λআ͖ ·ͱΊͯ SSL ͱදه
  3. 伴ަ׵: DH + RSA • αʔόূ໌ॻ͕RSAͷ৔߹ʹར༻Մೳ • αʔό͔Βૹ৴͢ΔDHެ։஋ʹαʔόূ໌ॻͷൿີ伴 Ͱॺ໊͢Δ •

    ΫϥΠΞϯτ͸ॺ໊Λαʔόূ໌ॻͷެ։伴Ͱݕূ͢Δ • ެ։伴͸ೝূہʹΑͬͯॺ໊͞Ε͍ͯΔͨΊվ͟Μͷ ڪΕ͸ͳ͍
  4. Forward Secrecy / લํൿಗੑ (5.8ষ) • αʔό্ͷൿີ伴͕ྲྀग़͢ΔͱͲ͏ͳΔ͔ʁ • ྫ) αʔόͷRSAൿີ伴͕ྲྀग़

    • RSA ʹΑΔ伴ަ׵ • ڞ௨伴ΛRSAެ։伴Ͱ҉߸Խ͠΍ΓͱΓ͍ͯ͠Δ͚ͩ • ௨৴Λه࿥͍ͯ͠Ε͹աڈʹḪͬͯ҉߸จΛ෮߸Ͱ͖Δ • DH (+ RSA) ʹΑΔ伴ަ׵ • DHͷ஋(=ڞ௨伴)Λຖճม͍͑ͯΔͳΒ෮߸Ͱ͖ͳ͍ • ൿີ伴ྲྀग़ޙ͸தؒऀ߈ܸͷڪΕ͕͋Δ
  5. Forward Secrecy / લํൿಗੑ (5.8ষ) • RSAൿີ伴͸௕ظʹ౉ͬͯ࢖ΘΕΔ • ྫ) ༗ޮظݶ1ʙ3೥ͷSSLূ໌ॻऔಘ

    • ௕ظʹ౉ͬͯ࢖ΘΕΔ伴͕࿙Ӯͨ͠ͱͯ͠΋ɺͦΕΑΓ աڈͷ҉߸จΛ෮߸Ͱ͖ͳ͍͜ͱΛ લํൿಗੑ ͱ͍͏
 (FS: Forward Secrecy) • “ʮCRYPTREC Report 2013ʯͷ෇࿥ 4ʮPerfect Forward Secrecy ʹؔ͢Δٕ ज़తݟղʹ͍ͭͯʯʹΑΔͱ PFS ͱ FS ͷҧ͍ʹؔ͢Δ౷Ұతݟղ͸ͳ͍ͱͷ ͜ͱͰ͢. “ • …ͩͦ͏Ͱ͢ɻؾʹ͠ͳ͍Ͱ͓͖·͠ΐ͏…
  6. લํൿಗੑʹؔ͢Δ࣮ࡍͷࣄ݅ (5.8ষ) • ΞϝϦΧࠃՈ҆શอোہ (NSA) ͕Πϯλʔωοτͷ௨৴Λ ౪ௌ, อଘ, ղੳ͍ͯͨ͜͠ͱ͕໌Β͔ʹͳΔ •

    ͞ΒʹFBI͕ϝʔϧࣄۀऀʹαʔόൿີ伴ͷఏग़ΛٻΊͨ • ଟ෼RSAൿີ伴 • ௨৴ͷอଘ + ൿີ伴ͷྲྀग़ => աڈͷ௨৴ͷ࿙Ӯ ͕ݱ࣮ʹ • લํൿಗੑ͕ΑΓٻΊΒΕΔΑ͏ʹͳͬͨ • TLS 1.3(࡞੒த) Ͱ͸લํൿಗੑ͕ͳ͍伴ަ׵͸ར༻Ͱ͖ͳ ͘ͳΔݟࠐΈ
  7. 伴ަ׵ํࣜͷදݱ • DHE_RSA ͷΑ͏ʹදݱ͢Δ • DH … 伴ަ׵ϝΧχζϜ • E

    … Ephemeral (Ұ࣌తͳ) / ڞ௨伴Λຖճੜ੒ • RSA … 伴΁ͷॺ໊ • DH_RSA ͸ ͣͬͱಉ͡伴(DHͷύϥϝʔλ)Λ࢖༻ • લํൿಗੑ͸ͳ͍ • ୭΋ಘ͠ͳ͍͠๨Ε·͠ΐ͏
  8. 伴ަ׵ํࣜ·ͱΊ ໊শ 伴ަ׵ 伴΁ͷॺ໊ લํൿಗੑ 34" 34" ॺ໊ෆཁ ☓ %)@34"

    %) 34" ☓ %)&@34" %) 34" ˓ &$%)&@34" &$%) 34" ˓ &$%)&@&$%4" &$%) &$%4" ˓
  9. (ࢀߟ) 伴ަ׵ํࣜͱͦͷෛՙʹ͍ͭͯ • ͡Ό͋શ෦ DHE_RSA ͕͍͍͡ΌΜʂ • → ҰൠʹDHE_RSA ͸૬౰ॏ͍ͱݴΘΕΔ

    • ͜ͷษڧձͰ͸ৄ͘͠৮Εͳ͍͕ɺ伴ަ׵ํࣜʹΑͬͯ ෛՙ͕େ͖͘ҟͳΔ • 伴ަ׵ํࣜΛมߋ͢Δ৔߹͸े෼ݕ౼͔ͯ͠Βʹ͢ Δ͜ͱ
  10. Cipher Suite • SSLͰ͸ҎԼͷ3ͭͷཁૉ͕ඞཁ • 伴ަ׵ΞϧΰϦζϜ • ڞ௨伴҉߸ • ϋογϡؔ਺

    • ͜ΕΒΛ૊Έ߹Θͤͯදݱ • ྫ) ECDHE_RSA_WITH_AES_128_GCM_SHA256 • 伴ަ׵ ECDH, 伴͸ Ephemeral (ຖճੜ੒) • ڞ௨伴҉߸ AES-128 GCMϞʔυ • ϋογϡؔ਺ SHA-256 • SSLωΰγΤʔγϣϯ࣌ʹͲͷCipher SuiteΛ࢖͏͔߹ҙ͢Δ
  11. 1. Client Hello -> • αʔόʹର͠ɺSSLͷཱ֬Λґཔ͢Δ • ૹ৴͢Δओཁͳσʔλ • client_version:

    ཱ͍֬ͨ͠SSLͷόʔδϣϯ (ྫ: TLS1.2) • session_id (ޙड़) • cipher_suites: ରԠ͢ΔCipher SuiteҰཡ (༏ઌॱҐ෇͖)
  12. 2. <- Server Hello • ૹ৴͢Δओཁσʔλ • server_version: બ୒ͨ͠TLSͷόʔδϣϯ (ྫ:

    TLS1.0) • ΫϥΠΞϯτ͕ఏࣔͨ͠΋ͷҎԼΛબͿ • session_id (ޙड़) • cipher_suite: બ୒ͨ͠Cipher Suite • ΫϥΠΞϯτ͕ఏࣔͨ͠΋ͷ͔ΒબͿ • Ͳͷ TLSͷόʔδϣϯ / Cipher Suite ΛબͿ͔͸αʔόͷࣗ༝ • Cipher Suite ͸༏ઌॱҐ෇͖ͰΫϥΠΞϯτ͔ΒఏҊ͞Ε Δ͕࠷ऴతͳܾఆݖ͸αʔόʹ͋Δ
  13. தؒऀ߈ܸʹৗʹཹҙ TLS 1.2Ͱ • SSLωΰγΤʔγϣϯ࣌ʹ҉߸௨৴ཱ֬લͳͷͰɺ௨৴Λվ͟Μ͢Δ༨஍͸͍ ͘ΒͰ΋͋Δ • ྫ) Cipher Suite

    Λதؒऀ߈ܸʹΑͬͯݻఆԽͤ͞Δ • ྫ) TLSͷόʔδϣϯΛதؒऀ߈ܸʹΑͬͯԼ͛Δ(Լਤ) • SCSV ͱ͍͏৽͍͠࢓૊ΈͰ๷͕Εͦ͏ https://tools.ietf.org/html/rfc7507 TLS 1.0 Ͱ OK, TLS 1.0 TLS1.0ʙTLS1.2
 ʹରԠ TLS1.0ʙTLS1.2
 ʹରԠ ѱҙ͋Δ
 தؒऀ
  14. 3. <- Server Certificate • Cipher Suite ʹ߹கͨ͠αʔόͷূ໌ॻΛૹ৴͢Δ • RSA,

    DHE_RSA, ECDHE_RSA • → RSAূ໌ॻ • ECDHE_ECDSA • → ECDSAূ໌ॻ • ྫ͑͹ɺECDHE_RSA ͱ ECDHE_ECDSA ͷ྆ํʹରԠ ͍ͨ͠ͳΒ2छྨͷূ໌ॻΛαʔόʹઃఆ͢Δඞཁ͕͋Δ
  15. 4. <- Server Key Exchange (DHE, ECDHEͷ৔߹ͷΈ) • 伴ަ׵ʹඞཁͳ৘ใΛ౉͢ •

    ૹ৴σʔλ • DHͷ৔߹ • DHͷެ։஋ • signed_params • DH(ECDH)ύϥϝʔλʹαʔόൿີ伴Ͱॺ໊Λ͢Δ • DHE_RSA ͳΒ RSAαʔόূ໌ॻ
 ECDHE_ECDSA ͳΒ ECDSAαʔόূ໌ॻ
 Λ “3. Server Certificate” Ͱૹ৴͢Δඞཁ͕͋Δ KA(= ga mod p ) , g, p
  16. 6. Client Key Exchange -> • 伴ަ׵ʹඞཁͳ৘ใΛ౉͢ • DHͷ৔߹ •

    ɹɹɹɹɹɹΛૹ৴ • RSAͷ৔߹ • ΫϥΠΞϯτͰڞ௨伴Λੜ੒͠ɺαʔόূ໌ॻ͔Β औΓग़ͨ͠ެ։伴Ͱ҉߸Խɺૹ৴ KB(= gb mod p )
  17. 8. <- Finished -> • 伴ަ׵, ೝূ͕׬ྃͨ͜͠ͱΛද͢ • Change Cipher

    Spec ͷ௚ޙʹૹ৴ • ͭ·Γ҉߸Խ͞Ε͍ͯΔ • ਖ਼͘͠҉߸௨৴͕Ͱ͖͍ͯΔ͜ͱͷ֬ೝʹͳΔ
  18. SSLωΰγΤʔγϣϯ͸ίετ͕ߴ͍ • ྫ͑͹DHE_RSAͷ৔߹ʹαʔό͕΍Δ͜ͱ… • DHެ։஋ͷੜ੒ • RSAൿີ伴(2048bitʙ)Λ࢖ͬͯ͜Εʹॺ໊ • →ෛ୲͕େ͖͍ʂ •

    ΍ΓͱΓͷճ਺΋ଟ͍ͨΊωοτϫʔΫ஗Ԇ͕େ͖͍ͱηογϣ ϯͷཱ֬·Ͱʹ͕͔͔࣌ؒͬͯ͠·͏ • 2ճ໨Ҏ߱ͷ௨৴͸ָΛ͍ͨ͠ • → ηογϣϯΛ࠶։͠Α͏ (Session Resumption) KA(= ga mod p ) , g, p
  19. ηογϣϯIDʹΑΔSession Resumption • 1ճ໨ͷωΰγΤʔγϣϯͰαʔό͔ΒηογϣϯID͕ฦ͞ΕΔ(Server Hello) • 2ճ໨઀ଓ࣌ɺΫϥΠΞϯτ͕ͦͷηογϣϯIDΛ෇༩ͯ͠Client HelloΛ͢Δ • ηογϣϯIDΛجʹɺલճͷCipher

    Suiteɺڞ௨伴Ͱ࠶։ • αʔό͕ ηογϣϯID ͱ Cipher Suite, ڞ௨伴౳ͷωΰγΤʔγϣϯ݁Ռ ͷͻ΋෇͖Λอଘ͓͔ͯ͠ͳ͚Ε͹ͳΒͳ͍ͱ͍͏͜ͱ • = αʔό͸εςʔτϑϧʹͳΔ Server Hello (࠶։OK!) Client Hello (ηογϣϯID෇͖) ͓ޓ͍طʹ΋͍ͬͯΔڞ௨伴Ͱ҉߸௨৴ ID͔Βલճͷ
 ݁ՌΛऔΓग़͢
  20. ηογϣϯνέοτʹΑΔSession Resumption • ωΰγΤʔγϣϯ݁ՌΛઐ༻ͷαʔό伴Ͱ҉߸Խͨ͠΋ͷΛΫϥΠΞϯτʹ౉͢ • ͜ΕΛʮηογϣϯνέοτʯͱݺͿ • ΫϥΠΞϯτ͸෮߸ɾվ͟ΜͰ͖ͳ͍ • αʔό͸ঢ়ଶΛ࣋ͨͳͯ͘Α͘ͳΔ

    • ηογϣϯIDํࣜͷ৔߹ʹ memcached ʹอଘ͍ͯͨ͠΋ͷΛ҉߸Խ͠ɺΫ ϥΠΞϯτʹ౉͢Πϝʔδ • = αʔό͸εςʔτϨεʹͳΔ (ωΰγΤʔγϣϯ) νέοτΛ
 ෮߸ νέοτΛૹ৴
  21. ηογϣϯνέοτͷ໰୊఺ • νέοτ༻ͷ伴ͷ҆શੑΛͲ͏୲อ͢Δ͔ʁ • ͜ͷ伴͕ྲྀग़͢ΔͱαʔόҎ֎ͷୈࡾऀ͕νέοτΛ෮ ߸͢Δ͜ͱ͕Ͱ͖Δ = σʔλ௨৴༻ڞ௨伴͕ྲྀग़͢Δ • ͔ͤͬ͘

    DHE_RSA Λ࢖͍ͬͯͯ΋લํൿಗੑ͕୲อ Ͱ͖ͳ͍ڪΕ • νέοτ༻ͷ伴Λ୹ظؒͰมߋ͢ΔͳͲͷରࡦ͕ඞཁ • ౰વաڈͷ伴͸ഁغ
  22. SSL·ͱΊ • ʮSSL௨৴ʯͱݴͬͯ΋҆શੑ͸બ୒ͨ͠ΞϧΰϦζϜ(Cipher) ʹΑͬͯେ͖͘ҟͳΔ • લํൿಗੑ ͷ͋Δ Cipher ͷ҆৺ײ •

    TLS 1.3 Ͱ͸લํൿಗੑͷͳ͍ Cipher ͸࢖͑ͳ͘ͳΔงғؾ • SSLηογϣϯͷ࠶ར༻ઃఆ͸ັྗత͕ͩઃఆΛޡΔͱલํൿಗ ੑ͕ͳ͘ͳΔ • ͜ͷษڧձͷ಺༰ΛϕʔεʹɺSSLͷ੬ऑੑʹ͍ͭͯͷ஌ࣝ΋૿ ΍͍͖͍ͯͨ͠ • μ΢ϯάϨʔυ߈ܸ, Renegotiationͷ੬ऑੑ….
  23. ग़య/ࢿྉ • ࢿྉ - SSLϋϯυγΣΠΫ • ཧղͯ͠Δͭ΋ΓͷSSL/TLSͰ΋ɺ΋ͬͱཧղͨ͠Β໘ന͔ͬͨ࿩ • http://tkengo.github.io/blog/2015/12/01/https-details/ •

    TLSϓϩτίϧv1.2 (೔ຊޠ༁) • https://www.ipa.go.jp/security/rfc/RFC5246-00JA.html • ࣗତམͳٕज़ऀͷ೔ه • http://blog.livedoor.jp/k_urushima/archives/cat_38371.html • ࢿྉ - SSL ηογϣϯ࠶ར༻ • લํൿಗੑ (forward secrecy) Λ΋ͭ΢ΣϒαΠτͷਖ਼͍͠ઃఆํ๏ • http://blog.kazuhooku.com/2015/07/forward-secrecy.html • Forward Secrecyͷམͱ݀͠ - ϫβϊό • http://wazanova.jp/items/874 • Apache 2.4 ৽ػೳ SSLฤ • http://www.slideshare.net/nappa_zzz/apache-24-ssl • ࡉ͔͗ͯ͢఻ΘΒͳ͍SSL/TLS • https://techblog.yahoo.co.jp/infrastructure/ssl-session-resumption/