1 คะแนน โดย GN⁺ 2025-06-16 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ท่ามกลางการแข่งขันของเบราว์เซอร์ระหว่าง Netscape และ Microsoft ในช่วงกลางทศวรรษ 1990 ได้เกิด โปรโตคอล SSL ขึ้น
  • SSL 2 มีข้อบกพร่องทั้งด้านการเข้ารหัสและการใช้งาน และจากจุดนั้น Microsoft จึงนำ โปรโตคอล PCT มาใช้
  • Netscape พัฒนา SSL 3.0 ขึ้นเป็นมาตรการตอบโต้ เพื่อพยายามยึดความเป็นผู้นำกลับมา
  • อุตสาหกรรมและชุมชนต้องการคงไว้ซึ่ง ความเข้ากันได้ ระหว่างเบราว์เซอร์ จึงมอบบทบาทด้านมาตรฐานให้ IETF
  • ในกระบวนการนี้ ชื่อโปรโตคอลจึงถูกเปลี่ยนเป็น TLS 1.0 และใช้สืบต่อมาจนถึงปัจจุบัน

ภูมิหลัง: การแข่งขันของเบราว์เซอร์และการกำเนิดของโปรโตคอลความปลอดภัย

  • ในช่วงกลางทศวรรษ 1990 Netscape และ Microsoft อยู่ในภาวะการแข่งขันอย่างดุเดือดในตลาดเบราว์เซอร์
  • ระหว่างการแข่งขันนี้ Netscape ได้พัฒนาโปรโตคอล SSL ขึ้น

SSL 2 และปัญหาต่าง ๆ

  • SSL เวอร์ชันแรกสุดถูกทำให้ใช้การไม่ได้แทบจะทันทีจากข้อบกพร่องด้านการเข้ารหัส จึงไม่ได้ออกสู่ตลาด
  • SSL 2 ที่ถูกแจกจ่ายใช้งานจริงถูกใช้ต่อเนื่องอยู่หลายปี แต่มี ข้อบกพร่องด้านการเข้ารหัสและด้านการใช้งาน หลายประการ
  • แม้ข้อบกพร่องเหล่านี้จะไม่ใช่วิกฤตร้ายแรงในทันที แต่ก็มีการเรียกร้องให้ปรับปรุงอย่างต่อเนื่อง

การตอบโต้ของ Microsoft: โปรโตคอล PCT

  • ท่ามกลางการแข่งขันที่รุนแรงขึ้น Microsoft ได้เพิ่มความสามารถของตนเองลงใน SSL 2 แล้วนำเสนอโปรโตคอลชื่อ PCT
  • PCT รองรับเฉพาะใน Internet Explorer (IE) และ IIS เท่านั้น

กลยุทธ์ใหม่ของ Netscape: SSL 3.0

  • Netscape เองก็ต้องการแก้ไข ปัญหาของ SSL 2 เช่นกัน แต่ไม่ต้องการให้ Microsoft ครองความเป็นผู้นำ
  • ด้วยเหตุนี้จึงพัฒนา SSL 3.0 ขึ้น โดยมุ่งสร้างการเปลี่ยนแปลงที่แตกต่างจากเดิมอย่างชัดเจน

การเจรจามาตรฐานของอุตสาหกรรมเบราว์เซอร์

  • ผู้คนในอุตสาหกรรมและชุมชนไม่ต้องการให้โปรโตคอลแตกออกเป็นสองสาย (เพื่อหลีกเลี่ยงการเกิดฟอร์ก)
  • Consensus Development (สถานที่ทำงานของผู้เขียน) เป็นผู้นำการประชุมของ ตัวแทนจาก Netscape และ Microsoft
    • ในการประชุมมี Bruce Schneier (ก่อนจะมีชื่อเสียง), Paul Kocher (ผู้ออกแบบ SSL 3) และ Barbara Fox (ตัวแทนจาก Microsoft) เข้าร่วม เป็นต้น

การทำมาตรฐานโดย IETF และการเปลี่ยนชื่อ

  • ทั้ง Netscape และ Microsoft เห็นพ้องให้ IETF (Internet Engineering Task Force) เป็นผู้ขับเคลื่อนกระบวนการทำมาตรฐานของโปรโตคอล
  • ผู้เขียนรับหน้าที่แก้ไขเอกสารมาตรฐานของ IETF (RFC)
  • ในฐานะส่วนหนึ่งของ การประนีประนอมทางการเมือง จึงต้องมีการปรับเปลี่ยนบางส่วนใน SSL 3.0 และตั้งชื่อใหม่ด้วย (เพื่อหลีกเลี่ยงภาพลักษณ์ว่า IETF เพียงแค่ ‘รับรอง’ โปรโตคอลเดิมโดยไม่มีเงื่อนไข)
  • ผลลัพธ์คือชื่อ TLS 1.0 ได้ถือกำเนิดขึ้น และในทางปฏิบัติก็คือโปรโตคอลที่เทียบได้กับ SSL 3.1

บทส่งท้าย

  • เมื่อหวนกลับไปมองในวันนี้ กระบวนการทั้งหมดของ การตั้งชื่อและการทำมาตรฐาน นี้ก็ดูชวนขันอยู่ไม่น้อย

1 ความคิดเห็น

 
GN⁺ 2025-06-16
ความเห็นจาก Hacker News
  • คำอธิบายถึงสถานการณ์ที่ชวนสับสนว่าดูจากเลขเวอร์ชันอย่างเดียวก็ยากจะเข้าใจได้ว่าตัวโปรโตคอลเปลี่ยนไปมากแค่ไหน โดย SSLv2 เป็น SSL เวอร์ชันแรกที่ถูกใช้อย่างแพร่หลาย แต่มีปัญหาหลายอย่าง ส่วน SSLv3 แทบจะเป็นโปรโตคอลที่สร้างขึ้นใหม่เกือบทั้งหมด TLS 1.0 คล้ายกับ SSLv3 มาก แต่มีการปรับแก้เล็กน้อยระหว่างกระบวนการทำให้เป็นมาตรฐานของ IETF TLS 1.1 เป็นเวอร์ชันแก้ไขขนาดเล็กเพื่อแก้ปัญหาเรื่องวิธีใช้ block cipher ใน TLS 1.0 ส่วน TLS 1.2 เป็นเวอร์ชันที่มีการแก้ไขระดับกลางให้สอดคล้องกับพัฒนาการของเทคโนโลยีเข้ารหัส เพิ่มการรองรับแฮชสมัยใหม่เพื่อตอบสนองต่อช่องโหว่ของ MD5 และ SHA-1 และเพิ่มการรองรับ AEAD cipher suites เช่น AES-GCM ขณะที่ TLS 1.3 เป็นโปรโตคอลที่สร้างขึ้นใหม่เกือบทั้งหมด แต่ยังผสานคุณลักษณะบางส่วนของ TLS 1.2 และเวอร์ชันก่อนหน้าไว้ โปรโตคอลแต่ละรุ่นถูกออกแบบให้มีการเจรจาเวอร์ชันอัตโนมัติ เพื่อให้ไคลเอนต์และเซิร์ฟเวอร์อัปเกรดแยกจากกันได้โดยไม่สูญเสียการเชื่อมต่อ

  • เมื่อคำนึงว่า Microsoft ในยุคนั้นเป็นบริษัทที่ต่างจากปัจจุบันโดยสิ้นเชิง ก็รู้สึกว่าเรื่องนี้ไม่ได้แปลกเลยแม้มองด้วยมาตรฐานสมัยนี้ ตอนนั้น 'M$' ใช้ทุกวิถีทางเพื่อสกัดเทคโนโลยีอินเทอร์เน็ตแบบโอเพนซอร์ส และท่าทีแบบนี้ก็ยังต่อเนื่องไปจนถึงต้นทศวรรษ 2010 มีความเห็นว่า Java Applets ไม่ได้พัฒนาและถูกเขี่ยออกจากตลาด ส่วนหนึ่งก็เพราะเรื่องนี้ และรู้สึกว่าการพัฒนาของ JavaScript กับ CSS ก็ช้าลงไปหลายปีด้วย ที่บริษัทบังคับให้ใช้เทคโนโลยีล่าสุดของ IE แต่ฉันเลือก Mozilla 3.0 แทน และหลังจากแก้บั๊ก JS แล้วก็ใช้ Mozilla กับการพัฒนา enterprise SPA ต่อไป แม้แต่ในบริษัท Fortune 500 ก็มีการนำ Mozilla/Firefox ไปใช้กับแอปภายในมากขึ้นในเวลาต่อมา และสุดท้ายก็จำได้ว่าเป็นการตัดสินใจที่ดี

    • พอนึกถึงยุคนั้น ก็ยังรู้สึกว่าฉายา 'M$' เหมาะอยู่จนถึงทุกวันนี้
  • มีความเห็นว่าชื่อเวอร์ชันถัดไปจะกลับไปใช้ SSL อีกครั้งก็ไม่น่ามีปัญหา เพราะทุกคนก็ยังเรียกมันว่า 'SSL' อยู่ดี

    • มีการพูดถึงด้วยว่าชื่อ "TLS" เองก็ถูกใช้ในหลายบริบทอยู่แล้ว และการอัปเดตค่าตั้งต้นกับ function signature ต่าง ๆ เป็นเรื่องยุ่งยากมาก

    • ย้ำว่าไม่อยากให้นี่กลายเป็นไอเดียสำหรับใครทั้งนั้น

  • เมื่อแนะนำให้ใครสักคนทำให้การเข้าเว็บปลอดภัยขึ้น (คือใช้คำว่า TLS/SSL) ปกติจะใช้คำว่าอะไร พร้อมเสริมว่าอยากรู้ด้วยว่าอายุเท่าไรและเริ่มทำงานก่อนปี 1999 หรือไม่ และจะมาตอบของตัวเองด้วยเช่นกัน

    • ฉันตอบว่า SSL (อายุ 27) ส่วนในโค้ดใช้ tls และในเอกสารชอบเขียนเป็น SSL/TLS เพื่อเลี่ยงความสับสน

      1. ฉันพูดว่า SSL อยู่นานมากกว่าจะรู้ว่า TLS คือ "สิ่งเดียวกัน" และถึงรู้แล้วก็ยังพูดว่า SSL อยู่ 9 ใน 10 ครั้ง 2. อายุ 38 (เริ่มทำงานตั้งแต่ปี 2011 แต่ทำ network programming มาตั้งแต่ 2004~2005) พอมองโค้ดที่เพิ่งทำเมื่อกี้ก็ยังเห็นชื่อฟังก์ชันอย่าง sslCertNotBefore ที่มี SSL อยู่เต็ม ๆ คิดว่าอาจเป็นเพราะโดยทั่วไปโปรแกรมเมอร์ไม่ได้แตะ TLS โดยตรงนัก โค้ดของฉันเองก็ต้อง parse ข้อมูล certificate จาก HTTPS ซึ่งเป็นงานที่ค่อนข้างยุ่งยาก ทุกอย่างถูกทำให้เป็นอัตโนมัติและ abstracted ไว้จนจัดการได้โดยไม่พลาด แต่ในอีกด้านก็กลายเป็นอุปสรรคต่อการเข้าใจกลไกการทำงานของ TLS อย่างลึกซึ้ง
    • คนส่วนใหญ่มักใช้คำว่า SSL เพราะไลบรารีที่ใช้ทำ secure communication อย่าง OpenSSL มีคำว่า ssl อยู่ในชื่อ นอกจาก OpenSSL แล้วก็ยังมี BoringSSL, LibreSSL, wolfSSL เป็นต้น ส่วนไลบรารีที่ใช้ชื่อ TLS มีชื่อเสียงน้อยกว่า เช่น GnuTLS, mbedTLS, s2n-tls และ RustTLS

    • เหตุผลหลักที่ใช้คำว่า SSL คือดูเหมือนคนจะเข้าใจคำนี้มากกว่า จริง ๆ แล้ว TLS คือคำที่ถูกต้องกว่า (เพราะในความเป็นจริงไม่มีใครใช้ SSL 3.0 แล้ว) แต่คำว่า SSL ก็ยังอยู่ในชื่อของไลบรารีหลัก ๆ เลยยังใช้กันต่อไป จริง ๆ แล้วฉันเรียนรู้ชื่อ SSL ในช่วงสงครามคริปโตยุค 90 และยังจำได้ว่าตอนนั้นถ้าอยากได้ SSL encryption ที่ใช้งานได้จริง ต้องไปดาวน์โหลด Netscape เวอร์ชัน "US only" แบบผิดกฎหมาย เลยรู้สึกว่าใช้เพราะความคุ้นเคยล้วน ๆ

    • ปกติฉันจะพูดว่า "https" เพราะคนทั่วไปพอเข้าใจความหมายคร่าว ๆ ได้ จึงชอบใช้มากกว่า

  • เพิ่งตระหนักเป็นครั้งแรกว่าที่ผ่านมาตัวเองแยกคำว่า SSL กับ TLS แบบไม่รู้ตัวไม่ออก และรู้สึกแปลกดีที่ผ่านไป 20 ปีเพิ่งรู้เหตุผลที่แท้จริง

    • รู้สึกเหมือนกันเลย ทำงานในวงการมา 15 ปี เพิ่งมารู้ตอนนี้เองว่า SSL กับ TLS แทบจะเป็นสิ่งเดียวกันในทางปฏิบัติ
  • คิดว่า "Transport Layer Security" เป็นชื่อที่ดีกว่าอย่างชัดเจน และชอบคำว่า TLS ด้วย รู้สึกขำ ๆ เพราะถ้าออกเสียง S ติดกันสองครั้งมันฟังเหมือนเสียงงู

    • แต่ TLS ก็ถูกใช้อย่างแพร่หลายในความหมายของ "Thread Local Storage" อยู่แล้ว แม้ว่า Transport Layer Security จะถูกใช้เป็นทางการตั้งแต่ปี 1999 แต่ Thread Local Storage มีอยู่ก่อนปี 1996 แล้วในสภาพแวดล้อมการพัฒนาของ MS หรือ IBM ส่วนในฝั่ง Unix ก็มีแนวโน้มจะนิยมคำว่า thread-specific data มาตั้งแต่ pthread ออกมาในปี 1995 และอาจเป็นไปได้ว่าเอกสาร Itanium ABI ปี 2001 ทำให้ "TLS" แพร่หลายมากขึ้น รวมถึง Sun Microsystems ก็อาจใช้คำนี้อยู่ก่อนแล้ว หากใครมีคู่มือ OS/2 เก็บไว้อยู่ก็ช่วยแชร์แหล่งอ้างอิงได้

    • ฉันกลับคิดว่า SSL เหมาะเป็นชื่อมากกว่า ในทางทฤษฎี TLS ควรเป็นกลไกความปลอดภัยทั่วไปที่ทำงานได้หลายเลเยอร์ (เช่นอาจผนวกกับ IPSec ได้) แต่ในความเป็นจริงกลับถูกใช้แทบจะเฉพาะกับ TCP sockets เท่านั้น รุ่นดัดแปลงสำหรับ UDP คือ DTLS และ QUIC ก็ไม่ได้นับว่าอยู่ใน TLS เอง ช่วงหลังมี Linux kernel TLS และโครงสร้างพื้นฐานเฉพาะของ Windows ด้วย แต่ก็ไม่ได้ใช้ได้ง่ายเหมือนแค่เปิด socket flag และพูดตามตรง เสียง S ที่เหมือนเสียงงูนี่ก็เท่ดี

    • "SSL" ออกเสียงง่ายกว่า "TLS" เพราะเวลาออกเสียง S-S-L ลิ้นแทบไม่ต้องขยับตำแหน่งเลย จึงเร็วและเป็นธรรมชาติกว่า

    • ถ้า Kaa จาก The Jungle Book มาพูดเรื่องความปลอดภัยของ TCP โดยใช้ชื่อ S~S~L ก็คงเข้ากันดี จริง ๆ จะเติมเสียง S อีกตัวแล้วเรียก SSSL ก็ยังดูขำดี

  • คนที่แยก TLS กับ SSL แบบเคร่งครัด มักเป็นคนที่อยากแสดงว่าตัวเองรู้ความต่างของสองสิ่งนี้ดี หรือเป็นสไตล์ที่อยากให้คนพูดแบบนั้น ความแตกต่างจริง ๆ ก็คล้ายกับ .doc และ .docx ที่พื้นฐานแล้วต่างกัน แต่สำหรับผู้ใช้ทั่วไปแทบจะใช้แทนกันได้ คนส่วนใหญ่สนแค่ว่า HTTPS ใช้งานได้ดีหรือไม่ ไม่ได้ใส่ใจกับโครงสร้างภายในหรือวิธีทำงานมากนัก

  • ลิงก์ที่เกี่ยวข้อง: แชร์บทความชื่อ 'Randomness and the Netscape Browser' (Dr. Dobb's Journal) ที่เขียนในปี 1996 https://people.eecs.berkeley.edu/~daw/papers/ddj-netscape.html เพราะเป็นบทความจากปี 1996 บรรยากาศทางภาษาจึงต่างจากงานวิจัยหรือบทความสมัยใหม่มาก และให้ความรู้สึกเก่าพอตัว

    • ประเด็นคือขึ้นอยู่กับว่าอ่านสิ่งพิมพ์ประเภทไหนด้วย (หรือก็คือขึ้นกับกลุ่มเป้าหมาย/รูปแบบ) ซึ่งก็หลากหลายไม่ต่างจากปี 1996 ทุกวันนี้ที่อย่าง LWN ก็ยังรายงานข่าวด้วยสไตล์คล้าย ๆ กันอยู่ (แค่แข็งน้อยลงเล็กน้อย) https://lwn.net/
  • มีคำถามว่า TLS 1.0 เมื่อเทียบกับ SSL 3.0 นั้นจริง ๆ แล้วมีการปรับปรุงหลายอย่างไม่ใช่หรือ เพราะในบทความดูเหมือนจะอธิบายแค่ว่าเป็น "การปรับเล็กน้อยเพื่อสร้างความแตกต่าง" เลยสงสัย

    • จริง ๆ แล้วก็มีการเปลี่ยนแปลงและปรับปรุงสำคัญอยู่มาก เพียงแต่ไม่ได้ถึงขั้น redesign ใหม่ทั้งหมดเหมือนตอน SSL 3.0
  • บนอินเทอร์เน็ตยังมีบริการมากกว่า 300,000 แห่งที่รองรับ SSLv2 อยู่ ลิงก์: https://shodan.io/search/report/… กราฟแนวโน้ม: https://trends.shodan.io/search?query=ssl.version%3Asslv2#overview แม้ตัวเลขจะลดลงมากในช่วงหลายปีที่ผ่านมา แต่ก็คงต้องใช้เวลาอีกสักพักกว่าจะหายไปหมด

    • ถ้าอย่างนั้นก็น่าสงสัยว่าทุกวันนี้ยังเหลือไคลเอนต์ที่ใช้ SSLv2 จริง ๆ อยู่กี่ตัว เพราะเท่าที่ทราบ ซอฟต์แวร์/ไลบรารีสมัยนี้แทบไม่มีการรองรับที่มีนัยสำคัญอีกแล้ว