Tags:
Node Thumbnail

ระหว่างที่เมลลิ่งลิสต์ mozilla.dev.security.policy (MDSP) กำลังพิจารณารองรับให้บริษัท DarkMatter เข้าเป็นหน่วยงานออกใบรับรองเข้ารหัส (certification authority - CA) Corey Bonnell วิศวกรจาก Sophos พบว่าใบรับรองของ DarkMatter นั้นออกใบรับรองที่หมายเลขซีเรียลความยาวขาดไป 1 บิต จึงโต้แย้งว่าไม่ควรรับ DarkMatter เข้าเป็น CA แต่ปรากฎว่าเมื่อตรวจสอบใบ CA รายสำคัญได้แก่ แอปเปิล, กูเกิล, และ GoDaddy ก็ล้วนออกใบรับรองที่ความยาวหมายเลขซีเรียลไม่เพียงพอเช่นกัน และต้องออกใบรับรองใหม่ทั้งหมดกว่าล้านใบ

ข้อกำหนดของ CA/Browser Forum ระบุให้ใบรับรองเข้ารหัสต้องมีหมายเลขซีเรียลที่สุ่มขึ้นมา โดยกระบวนการสุ่มต้องมีความยุ่งเหยิง (entropy) ไม่ต่ำกว่า 64 บิต ทำให้ CA จำนวนหนึ่งคอนฟิกระบบให้ออกใบรับรองเข้ารหัสที่มีหมายเลขซีเรียลความยาว 64 บิตพอดี หมายเลขซีเรียลนั้นต้องเป็นจำนวนเต็มบวกตามฟอร์แมตไฟล์ X.509 ทำให้การสุ่มเลขเต็มบวก 64 บิตกลายเป็นเลขที่มีความยุ่งเหยิง 63 บิต เนื่องจากเลขบิตแรกเป็น sign bit หรือสัญลักษณ์บวกลบ

ความผิดพลาดนี้เป็นบั๊กของ EJBCA โครงการซอฟต์แวร์ CA โอเพนซอร์ส ทำให้ CA หลายรายได้รับผลกระทบร่วมกัน

CA ที่คอนฟิกให้ออกเลขซีเรียลไว้ 64 บิตพอดีได้แก่ แอปเปิล, กูเกิล, และ GoDaddy ล้วนออกใบรับรองที่หมายเลขผิดไปแล้วกว่าสองล้านใบ โดยแอปเปิลออกไปแล้ว 878,000 ใบและยังใช้งานได้อยู่ 558,000 ใบ ขณะที่กูเกิลออกไปกว่าแสนใบ แต่มีใช้งานได้อยู่เพียง 7,100 ใบเท่านั้น ส่วน GoDaddy คาดว่ามีใบรับรองที่ได้รับผลกระทบ 12,000 ใบ อย่างไรก็ดี เป็นไปได้ว่าจะมี CA อื่นๆ พบปัญหาแบบเดียวกัน

ข้อกำหนดหมายเลขซีเรียล 64 บิต เป็นข้อกำหนดที่ CA/Browser Forum เพิ่มเติมเข้ามาเมื่อปี 2016 เพื่อช่วยลดช่องโหว่ในกรณีที่กระบวนการเซ็นลายเซ็นใบรับรองยังเป็น MD5 ที่มีช่องโหว่ การใช้หมายเลขซีเรียลที่ยาวขึ้นจะช่วยเพิ่มความยากในการโจมตีได้ เนื่องจากใบรับรองสำหรับเว็บสมัยใหม่ล้วนใช้ SHA-2 กันหมดแล้วหลังจากกูเกิลไม่รองรับใบรับรอง SHA-1 เมื่อปี 2015 การโจมตีเช่นเดิมไม่น่ามีอีกต่อไป อย่างไรก็ตาม เนื่องจากใบรับรองทั้งหมดออกผิดข้อกำหนดของ CA/Browser Forum ทำให้ต้องออกใบรับรองใหม่อยู่ดี ตอนนี้กูเกิลก็เริ่มออกใบรับรองได้เกือบทั้งหมดแล้ว และส่วนที่เหลือก็จะหมดอายุภายในเดือนนี้

ที่มา - ArsTechnica

No Description

ภาพโดย typographyimages

Get latest news from Blognone

Comments

By: whitebigbird
Contributor
on 14 March 2019 - 07:30 #1101229
whitebigbird's picture

ลืมตั้งเป็น unsigned?

By: McKay
ContributorAndroidWindowsIn Love
on 14 March 2019 - 13:44 #1101304 Reply to:1101229
McKay's picture

ต้องตั้งเป็น signed bit + entropy 64bit = 65bit ครับ


there are 2 types of salim. one is donkey and another one is asshole.

By: IDCET
Contributor
on 14 March 2019 - 14:48 #1101336 Reply to:1101304

นึกว่าใช้ Header ใส่ใบรับรองเสียอีก

By: whitebigbird
Contributor
on 14 March 2019 - 14:58 #1101345 Reply to:1101304
whitebigbird's picture

เอ สอบถามหน่อยครับ ว่าทำไมมันถึง expected เป็น signed ครับ คืองงว่าทำไมต้อง 65 bit

เพราะ int ใน programming สมมติว่ามีขนาด 16 bit (2 byte)

ถ้า signed = -128 ถึง 127

ถ้า unsigned = 0 ถึง 255

แต่ในกรณี int มันเอาไปคำนวณได้ จะมีเลขติดลบจึงไม่แปลก แต่ถึงแม้มีเลขติดลบก็ยังคงใช้ 16 bit ไม่ใช่ 17 bit

แต่กรณี X.509 นี่มันจะเอาค่าติดลบไปทำไมอ่ะครับ แล้วก็งงว่าทำไมค่าติดลบถึงมีความยาว 64 bit + 1 signed bit

By: McKay
ContributorAndroidWindowsIn Love
on 14 March 2019 - 17:12 #1101406 Reply to:1101345
McKay's picture

ผมก็ไม่เข้าใจเหมือนกันครับ ตามที่ไปอ่านมาคือมันต้องมี fixed bit เพื่อทำให้ค่าเป็น positive ส่วนตามสเปกคือค่า entropy ต้องมีขั้นต่ำ 64 ตัวหน่ะครับ

อันนี้รอคุณ lew ที่น่าจะเชี่ยวชาญเรื่อง cryptography มาตอบน่าจะดีกว่าว่าทำไมถึงต้องมี fixed bit


there are 2 types of salim. one is donkey and another one is asshole.

By: whitebigbird
Contributor
on 14 March 2019 - 17:23 #1101407 Reply to:1101406
whitebigbird's picture

ขอบคุณครับ มางงรวมกันครับ

ผมเดาว่ากรณีนี้มัน expect ผิด คือแทนที่จะ expect เป็น unsigned แต่ใช้ตัวแปรแบบ signed ไว้ เลยถูกตัดออกไป 1 บิท

ก็ยังคงงงๆ อยู่ดีว่าทำไมไม่ expect เป็น string ถึงแม้จะเข้าใจว่าแม้กระทั่ง IPv4 ยังมีหลายระบบที่เลือกเก็บแบบ byte int x 4

โอ๊ย งง พยายามหาอ่านก็ไม่เจอสักที