Share
Embed
SSL勉強会 - 「クラウドを支えるこれからの暗号技術」を読んで
クラウドを支えるこれからの暗号技術: https://herumi.github.io/ango/
の第一部を前提に、SSL(TLS)について解説します
- SSLにおける鍵交換: DH, RSA, .... の解説
- SSLネゴシエーション: 具体的にどのようなメッセージがやりとりされているかの解説
- SSLセッションの再利用
mashijp
November 22, 2016
Transcript
42 slides
-
ࠓͷSSLษڧձͷత • SSL / TLS ͰͲͷΑ͏ʹ҉߸௨৴͕ߦΘΕ͍ͯΔ͔Λղ આ͠ͳ͕Βٞ͠Α͏ • ରऀ •
ʮΫϥυΛࢧ͑Δ͜Ε͔Βͷ҉߸ٕज़ʯͷୈҰ෦ΛಡΜͰ۩ ମతʹͲ͏௨৴͍ͯ͠Δͷ͔ؾʹͳͬͨਓ • ͜ͷຊΛલఏʹΛਐΊΔ • SSLͰެ։伴҉߸Λ͏͜ͱαʔόূ໌ॻΛ͏͜ͱͬ ͍ͯΔ͕ɺγʔέϯεΒͳ͍ਓ • ূ໌ॻൃߦػؔ, ೝূہͷ͠ͳ͍ ※ ΫϥυΛࢧ͑Δ͜Ε͔Βͷ҉߸ٕज़ … https://herumi.github.io/ango/ -
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 ͱදه -
伴ަ: DH • αʔό͔ΒDHެ։Λૹ৴ͯ͠Β͍ɺΫϥΠΞϯτ ͦͷ݁ՌΛͬͯαʔόʹܭࢉΛૹΓฦ͢ • ௨৴Λ౪ௌ͞Εͯڞ௨伴ྲྀग़͠ͳ͍ • தؒऀ߈ܸʹΑΓ伴Λࠩ͠ସ͑Δ͜ͱ͕Մೳ DHެ։
KA(= ga mod p ) , g, p KB(= gb mod p ) a b DHެ։ gab mod p ͔Βڞ௨伴ੜ gab mod p ͔Βڞ௨伴ੜ (ൿີ) (ൿີ) -
伴ަ: DH + RSA • αʔόূ໌ॻ͕RSAͷ߹ʹར༻Մೳ • αʔό͔Βૹ৴͢ΔDHެ։ʹαʔόূ໌ॻͷൿີ伴 Ͱॺ໊͢Δ •
ΫϥΠΞϯτॺ໊Λαʔόূ໌ॻͷެ։伴Ͱݕূ͢Δ • ެ։伴ೝূہʹΑͬͯॺ໊͞Ε͍ͯΔͨΊվ͟Μͷ ڪΕͳ͍ -
Forward Secrecy / લํൿಗੑ (5.8ষ) • αʔό্ͷൿີ伴͕ྲྀग़͢ΔͱͲ͏ͳΔ͔ʁ • ྫ) αʔόͷRSAൿີ伴͕ྲྀग़
• RSA ʹΑΔ伴ަ • ڞ௨伴ΛRSAެ։伴Ͱ҉߸Խ͠ΓͱΓ͍ͯ͠Δ͚ͩ • ௨৴Λه͍ͯ͠ΕաڈʹḪͬͯ҉߸จΛ෮߸Ͱ͖Δ • DH (+ RSA) ʹΑΔ伴ަ • DHͷ(=ڞ௨伴)Λຖճม͍͑ͯΔͳΒ෮߸Ͱ͖ͳ͍ • ൿີ伴ྲྀग़ޙதؒऀ߈ܸͷڪΕ͕͋Δ -
Forward Secrecy / લํൿಗੑ (5.8ষ) • RSAൿີ伴ظʹͬͯΘΕΔ • ྫ) ༗ޮظݶ1ʙ3ͷSSLূ໌ॻऔಘ
• ظʹͬͯΘΕΔ伴͕࿙Ӯͨ͠ͱͯ͠ɺͦΕΑΓ աڈͷ҉߸จΛ෮߸Ͱ͖ͳ͍͜ͱΛ લํൿಗੑ ͱ͍͏ (FS: Forward Secrecy) • “ʮCRYPTREC Report 2013ʯͷ 4ʮPerfect Forward Secrecy ʹؔ͢Δٕ ज़తݟղʹ͍ͭͯʯʹΑΔͱ PFS ͱ FS ͷҧ͍ʹؔ͢Δ౷Ұతݟղͳ͍ͱͷ ͜ͱͰ͢. “ • …ͩͦ͏Ͱ͢ɻؾʹ͠ͳ͍Ͱ͓͖·͠ΐ͏… -
લํൿಗੑʹؔ͢Δ࣮ࡍͷࣄ݅ (5.8ষ) • ΞϝϦΧࠃՈ҆શอোہ (NSA) ͕Πϯλʔωοτͷ௨৴Λ ౪ௌ, อଘ, ղੳ͍ͯͨ͜͠ͱ͕໌Β͔ʹͳΔ •
͞ΒʹFBI͕ϝʔϧࣄۀऀʹαʔόൿີ伴ͷఏग़ΛٻΊͨ • ଟRSAൿີ伴 • ௨৴ͷอଘ + ൿີ伴ͷྲྀग़ => աڈͷ௨৴ͷ࿙Ӯ ͕ݱ࣮ʹ • લํൿಗੑ͕ΑΓٻΊΒΕΔΑ͏ʹͳͬͨ • TLS 1.3(࡞த) Ͱલํൿಗੑ͕ͳ͍伴ަར༻Ͱ͖ͳ ͘ͳΔݟࠐΈ -
伴ަํࣜͷදݱ • DHE_RSA ͷΑ͏ʹදݱ͢Δ • DH … 伴ަϝΧχζϜ • E
… Ephemeral (Ұ࣌తͳ) / ڞ௨伴Λຖճੜ • RSA … 伴ͷॺ໊ • DH_RSA ͣͬͱಉ͡伴(DHͷύϥϝʔλ)Λ༻ • લํൿಗੑͳ͍ • ୭ಘ͠ͳ͍͠Ε·͠ΐ͏ -
伴ަํࣜ·ͱΊ ໊শ 伴ަ 伴ͷॺ໊ લํൿಗੑ 34" 34" ॺ໊ෆཁ ☓ %)@34"
%) 34" ☓ %)&@34" %) 34" ˓ &$%)&@34" &$%) 34" ˓ &$%)&@&$%4" &$%) &$%4" ˓ -
(ࢀߟ) 伴ަํࣜͱͦͷෛՙʹ͍ͭͯ • ͡Ό͋શ෦ DHE_RSA ͕͍͍͡ΌΜʂ • → ҰൠʹDHE_RSA ૬ॏ͍ͱݴΘΕΔ
• ͜ͷษڧձͰৄ͘͠৮Εͳ͍͕ɺ伴ަํࣜʹΑͬͯ ෛՙ͕େ͖͘ҟͳΔ • 伴ަํࣜΛมߋ͢Δ߹ेݕ౼͔ͯ͠Βʹ͢ Δ͜ͱ -
SSLωΰγΤʔγϣϯ • ͔͜͜ΒSSL௨৴ͷཱ֬(SSLωΰγΤʔγϣϯ) = ڞ௨伴ͷަͷϑ ϩʔΛղઆ • ࠓճΑ͋͘ΔHTTPSαʔόΛར༻έʔεΛߟ͑Δ(αʔόূ໌ॻ͋ ΓɺΫϥΠΞϯτূ໌ॻͳ͠) •
ओʹ DHE_RSA, RSA ʹΑΔωΰγΤʔγϣϯΛղઆ • WiresharkͰ௨৴ΛͿͬ͜͵͖ͳ͕Β֬ೝ͢Δͱཧղ͕ḿ͓ͬͯ͢͢Ί -
Cipher Suite • SSLͰҎԼͷ3ͭͷཁૉ͕ඞཁ • 伴ަΞϧΰϦζϜ • ڞ௨伴҉߸ • ϋογϡؔ
• ͜ΕΒΛΈ߹Θͤͯදݱ • ྫ) ECDHE_RSA_WITH_AES_128_GCM_SHA256 • 伴ަ ECDH, 伴 Ephemeral (ຖճੜ) • ڞ௨伴҉߸ AES-128 GCMϞʔυ • ϋογϡؔ SHA-256 • SSLωΰγΤʔγϣϯ࣌ʹͲͷCipher SuiteΛ͏͔߹ҙ͢Δ -
1. Client Hello -> • αʔόʹର͠ɺSSLͷཱ֬Λґཔ͢Δ • ૹ৴͢Δओཁͳσʔλ • client_version:
ཱ͍֬ͨ͠SSLͷόʔδϣϯ (ྫ: TLS1.2) • session_id (ޙड़) • cipher_suites: ରԠ͢ΔCipher SuiteҰཡ (༏ઌॱҐ͖) -
2. <- Server Hello • ૹ৴͢Δओཁσʔλ • server_version: બͨ͠TLSͷόʔδϣϯ (ྫ:
TLS1.0) • ΫϥΠΞϯτ͕ఏࣔͨ͠ͷҎԼΛબͿ • session_id (ޙड़) • cipher_suite: બͨ͠Cipher Suite • ΫϥΠΞϯτ͕ఏࣔͨ͠ͷ͔ΒબͿ • Ͳͷ TLSͷόʔδϣϯ / Cipher Suite ΛબͿ͔αʔόͷࣗ༝ • Cipher Suite ༏ઌॱҐ͖ͰΫϥΠΞϯτ͔ΒఏҊ͞Ε Δ͕࠷ऴతͳܾఆݖαʔόʹ͋Δ -
தؒऀ߈ܸʹৗʹཹҙ 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 ʹରԠ ѱҙ͋Δ தؒऀ -
3. <- Server Certificate • Cipher Suite ʹ߹கͨ͠αʔόͷূ໌ॻΛૹ৴͢Δ • RSA,
DHE_RSA, ECDHE_RSA • → RSAূ໌ॻ • ECDHE_ECDSA • → ECDSAূ໌ॻ • ྫ͑ɺECDHE_RSA ͱ ECDHE_ECDSA ͷ྆ํʹରԠ ͍ͨ͠ͳΒ2छྨͷূ໌ॻΛαʔόʹઃఆ͢Δඞཁ͕͋Δ -
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 -
6. Client Key Exchange -> • 伴ަʹඞཁͳใΛ͢ • DHͷ߹ •
ɹɹɹɹɹɹΛૹ৴ • RSAͷ߹ • ΫϥΠΞϯτͰڞ௨伴Λੜ͠ɺαʔόূ໌ॻ͔Β औΓग़ͨ͠ެ։伴Ͱ҉߸Խɺૹ৴ KB(= gb mod p ) -
7. <- Change Cipher Spec -> • ͜ΕҎ߱҉߸Խ௨৴Λߦ͏͜ͱΛએݴ͢Δ • αʔό/ΫϥΠΞϯτํ͔Βૹ৴͢Δ
• ͜͜·Ͱͷϝοηʔδ҉߸Խɾೝূ͞Ε͍ͯͳ͍ -
8. <- Finished -> • 伴ަ, ೝূ͕ྃͨ͜͠ͱΛද͢ • Change Cipher
Spec ͷޙʹૹ৴ • ͭ·Γ҉߸Խ͞Ε͍ͯΔ • ਖ਼͘͠҉߸௨৴͕Ͱ͖͍ͯΔ͜ͱͷ֬ೝʹͳΔ -
SSLωΰγΤʔγϣϯίετ͕ߴ͍ • ྫ͑DHE_RSAͷ߹ʹαʔό͕Δ͜ͱ… • DHެ։ͷੜ • RSAൿີ伴(2048bitʙ)Λͬͯ͜Εʹॺ໊ • →ෛ୲͕େ͖͍ʂ •
ΓͱΓͷճଟ͍ͨΊωοτϫʔΫԆ͕େ͖͍ͱηογϣ ϯͷཱ֬·Ͱʹ͕͔͔࣌ؒͬͯ͠·͏ • 2ճҎ߱ͷ௨৴ָΛ͍ͨ͠ • → ηογϣϯΛ࠶։͠Α͏ (Session Resumption) KA(= ga mod p ) , g, p -
ηογϣϯIDʹΑΔSession Resumption • 1ճͷωΰγΤʔγϣϯͰαʔό͔ΒηογϣϯID͕ฦ͞ΕΔ(Server Hello) • 2ճଓ࣌ɺΫϥΠΞϯτ͕ͦͷηογϣϯIDΛ༩ͯ͠Client HelloΛ͢Δ • ηογϣϯIDΛجʹɺલճͷCipher
Suiteɺڞ௨伴Ͱ࠶։ • αʔό͕ ηογϣϯID ͱ Cipher Suite, ڞ௨伴ͷωΰγΤʔγϣϯ݁Ռ ͷͻ͖Λอଘ͓͔ͯ͠ͳ͚ΕͳΒͳ͍ͱ͍͏͜ͱ • = αʔόεςʔτϑϧʹͳΔ Server Hello (࠶։OK!) Client Hello (ηογϣϯID͖) ͓ޓ͍طʹ͍ͬͯΔڞ௨伴Ͱ҉߸௨৴ ID͔Βલճͷ ݁ՌΛऔΓग़͢ -
ηογϣϯIDʹΑΔSession Resumptionͷ • ηογϣϯIDͱωΰγΤʔγϣϯ݁ՌΛͲ͜ʹอ࣋͢Δ͔ʁ • ϑϩϯταʔό͕ෳ͋Δ߹ʹʹͳΔ • αʔόAͰωΰγΤʔγϣϯ, 2ճαʔόBʹଓ →
Resumption Ͱ͖ͳ͍ • memcached ʹอ࣋ͤ͞ΔΑ͏ͳέʔε͋Δ memcachedͳͲ ηογϣϯIDใͷऔಘ -
ηογϣϯνέοτʹΑΔSession Resumption • ωΰγΤʔγϣϯ݁ՌΛઐ༻ͷαʔό伴Ͱ҉߸Խͨ͠ͷΛΫϥΠΞϯτʹ͢ • ͜ΕΛʮηογϣϯνέοτʯͱݺͿ • ΫϥΠΞϯτ෮߸ɾվ͟ΜͰ͖ͳ͍ • αʔόঢ়ଶΛ࣋ͨͳͯ͘Α͘ͳΔ
• ηογϣϯIDํࣜͷ߹ʹ memcached ʹอଘ͍ͯͨ͠ͷΛ҉߸Խ͠ɺΫ ϥΠΞϯτʹ͢Πϝʔδ • = αʔόεςʔτϨεʹͳΔ (ωΰγΤʔγϣϯ) νέοτΛ ෮߸ νέοτΛૹ৴ -
ηογϣϯνέοτʹΑΔSession Resumption • 2ճଓ࣌ɺΫϥΠΞϯταʔόʹηογϣϯνέοτΛ͢ • αʔόνέοτ༻ͷ伴Λͬͯ෮߸͠ɺڞ௨伴Cipher SuiteΛ औΓग़͢ Client Hello
(ηογϣϯνέοτ͖) νέοτΛ ෮߸ Server Hello (࠶։OK!) લճͷڞ௨伴Ͱ҉߸௨৴ -
ηογϣϯνέοτͷ • νέοτ༻ͷ伴ͷ҆શੑΛͲ͏୲อ͢Δ͔ʁ • ͜ͷ伴͕ྲྀग़͢ΔͱαʔόҎ֎ͷୈࡾऀ͕νέοτΛ෮ ߸͢Δ͜ͱ͕Ͱ͖Δ = σʔλ௨৴༻ڞ௨伴͕ྲྀग़͢Δ • ͔ͤͬ͘
DHE_RSA Λ͍ͬͯͯલํൿಗੑ͕୲อ Ͱ͖ͳ͍ڪΕ • νέοτ༻ͷ伴ΛظؒͰมߋ͢ΔͳͲͷରࡦ͕ඞཁ • વաڈͷ伴ഁغ -
SSL·ͱΊ • ʮSSL௨৴ʯͱݴͬͯ҆શੑબͨ͠ΞϧΰϦζϜ(Cipher) ʹΑͬͯେ͖͘ҟͳΔ • લํൿಗੑ ͷ͋Δ Cipher ͷ҆৺ײ •
TLS 1.3 Ͱલํൿಗੑͷͳ͍ Cipher ͑ͳ͘ͳΔงғؾ • SSLηογϣϯͷ࠶ར༻ઃఆັྗత͕ͩઃఆΛޡΔͱલํൿಗ ੑ͕ͳ͘ͳΔ • ͜ͷษڧձͷ༰ΛϕʔεʹɺSSLͷ੬ऑੑʹ͍ͭͯͷࣝ૿ ͍͖͍ͯͨ͠ • μϯάϨʔυ߈ܸ, Renegotiationͷ੬ऑੑ…. -
ग़య/ࢿྉ • ࢿྉ - 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/ -
ग़య • ༻ͨ͠ը૾ • ͘͞ΒͷΞΠίϯηοτ (৭ௐΛҰ෦มߋ) • http://knowledge.sakura.ad.jp/other/4724/ • ωοτϫʔΫɹτϙϩδʔɹΞΠίϯ
• http://www.cisco.com/web/JP/product/topology_icons.html