สัมภาษณ์คุณชิดชนก จึงเสถียรทรัพย์ ทีมงานวิจัย BADA55 ข้อระวังการสุ่มที่ยืนยันได้

by lew
16 June 2014 - 04:22

เมื่อเดือนที่แล้วมีงานวิจัยด้านวิทยาการเข้ารหัสลับชิ้นหนึ่งนำเสนอในงาน Eurocrypt 2014 เกี่ยวกับการยืนยันได้ว่าค่าพารามิเตอร์ของกระบวนการเข้ารหัสนั้นเป็นค่าที่สุ่มจริง (verifiably random) ผมได้อ่านงานวิจัยนี้แล้วพบว่าหนึ่งในทีมงานนั้นเป็นคนไทย คือคุณชิดชนก จึงเสถียรทรัพย์ ที่กำลังศึกษาในระดับปริญญาเอกที่มหาวิทยาลัย Eindhoven ในโอกาสนี้ผมจึงอีเมลไปติดต่อขอสัมภาษณ์ และก็ได้มาเป็นบทสัมภาษณ์ฉบับนี้กันครับ

เบื้องต้นเกี่ยวกับงานวิจัยนี้ เราควรรู้ก่อนว่าในกระบวนการเข้ารหัสรูปแบบต่างๆ มักมีค่าพารามิเตอร์ที่สามารถเปลี่ยนแปลงได้ เพื่อให้กระบวนการเข้ารหัสทำงานร่วมกันได้ จึงจำเป็นที่จะต้องเลือกค่าบางค่าเป็นมาตรฐาน หน่วยงานออกมาตรฐานอย่าง NIST เป็นผู้ทำหน้าที่เลือกค่าพารามิเตอร์เหล่านั้นมาเสนอ โดยทั่วไปจะเลือกค่าพารามิเตอร์จากค่าสุ่ม ซึ่งกระบวนการที่ทำให้ยืนยันได้ว่าค่านั้นมาจากการสุ่มคือมาตรฐานจะระบุว่าค่าที่ได้มาจากการแฮช การที่ค่าผ่านการแฮชมาทำให้ยากมากที่ผู้ออกมาตรฐานจะสามารถเลือกค่าพารามิเตอร์ได้เองตามใจชอบ

ถึงตรงนี้เราคุยกับคุณชิดชนกกันครับ

สนใจคอมพิวเตอร์มาตั้งแต่เมื่อไหร่

เริ่มสนใจตั้งแต่ที่บ้านมีคอมพิวเตอร์ (น่าจะประมาณ ป.4) ตอนแรกก็ใช้งานโปรแกรมทั่วไป เช่น พิมพ์รายงาน ต่อมาตอน ป.5 ก็เริ่มฝึกทำเว็บ โดยเริ่มจาก HTML แล้วมาอ่าน Javascript, Perl, CGI บ้าง แต่ก็ไม่ค่อยสนใจทางนี้สักเท่าไหร่ จากนั้นตอน ป.6 ได้ลองฝึกเขียน Pascal ซึ่งถือได้ว่าเป็นภาษาคอมพิวเตอร์ภาษาแรกที่ฝึก แล้วก็ศึกษา C/C++, VisualBasic, Java, C# เพิ่มมาเรื่อยๆ

อย่างนั้นตอนเลือกเรียนปริญญาตรีเลือกเรียนคอมพิวเตอร์เลยรึเปล่าครับ?

ตอนเลือกคณะเรียนปริญญาตรีค่อนข้างลังเลค่ะว่าจะเลือกคณะไหน เพราะนอกจากด้านคอมพิวเตอร์แล้ว ยังสนใจด้านภาษาอีกด้วย จึงกลายเป็นตัวเลือกที่อยู่คนละทางระหว่างอักษรศาสตร์กับวิศวกรรมศาสตร์ สุดท้ายตัดสินใจเลือกวิศวกรรมคอมพิวเตอร์จุฬาฯ เป็นอันดับหนึ่ง โดยตอนนั้นบอกกับตัวเองว่าเรียนภาษาญี่ปุ่นด้วยตัวเองก็ยังสอบ JPLT ได้ระดับสอง ก็น่าจะสามารถเรียนภาษาด้วยตัวเองต่อไปได้

แล้วทำไมจึงมาสนใจทำวิจัยด้านวิทยาการเข้ารหัสลับ (cryptography)

ตั้งแต่เริ่มเขียนโปรแกรมก็สนใจการเข้ารหัสและถอดรหัส (encode/decode) ของรหัสรูปแบบต่างๆ อย่างพวก ASCII หรือ Huffman code มาตลอด ตอนหลังจึงเริ่มสนใจการเข้ารหัสลับและการถอดรหัสลับ (encryption/decryption) เพราะสงสัยว่าจากข้อความปกติสามารถเปลี่ยนไปข้อความอื่นแล้วเปลี่ยนกลับมาเป็นข้อความเดิมได้อย่างไร โดยเฉพาะกระบวนการเข้ารหัสที่ใช้กุญแจเข้ารหัสและถอดรหัสต่างกัน

พอใกล้จบปริญญาตรีก็สอบได้ทุนรัฐบาลญี่ปุ่น และได้เลือกแล็บที่ทำวิจัยด้านวิทยาการเข้ารหัสลับ เมื่อเข้าไปเรียนปริญญาโทที่แล็บนั้นรุ่นพี่ที่แล็บก็แนะนำ Elliptic Curve Cryptography (ECC) พอได้เรียนก็รู้สึกยิ่งสนใจมากขึ้น โดยเฉพาะประเด็น Pairing-Based Cryptography ที่อาศัยการนำสมาชิกของกลุ่มหนึ่งไปจับกับอีกกลุ่มหนึ่งเพื่อโยงไปยังอีกกลุ่มหนึ่ง ซึ่งประเด็นนี้ต้องใช้ความรู้เกี่ยวกับ elliptic curve เช่นกัน

หลังจากนั้นได้ขออาจารย์ไปเรียนซัมเมอร์และเข้าร่วมเวิร์คช็อป ที่งาน ECC 2011 แล้วสมัครทุนไปทำวิจัยระยะสั้น (lab visit) ที่มหาวิทยาลัย Eindhoven ที่เรียนปริญญาเอกอยู่ ณ ขณะนี้ ตอนนั้นได้พูดคุยกับผู้ที่ทำงานด้านการเข้ารหัสลับนี้หลายท่าน และพบว่ามีอะไรให้เรียนรู้และทำวิจัยอีกมาก

ตอนหลังทางมหาวิทยาลัย Eindhoven เสนอทุนเรียนปริญญาเอกให้ จึงตอบรับและหันมาวิจัยด้านนี้อย่างเต็มตัว

การเข้ารหัสลับแบบ ECC สำคัญอย่างไรในทุกวันนี้

ECC มีข้อได้เปรียบการเข้ารหัสลับแบบ RSA ที่ใช้กันมากในทุกวันนี้คือที่ระดับความปลอดภัยเท่ากัน ขนาดกุญแจของ ECC จะสั้นกว่าของ RSA มาก โดยสองกระบวนการตั้งอยู่บนพื้นฐานของปัญหาที่ต่างกัน ตัว ECC ตั้งอยู่บนพื้นฐานว่าปัญหา discrete logarithm นั้นยาก ส่วน RSA ตั้งอยู่บนพื้นฐานว่าปัญหา factorization (การแยกตัวประกอบของตัวเลข) นั้นยาก

เมื่อก่อนทั้งสองปัญหายากในระดับ exponential เหมือนๆ กัน แต่ปัญหา factorization มีการพัฒนาวิธีใหม่ๆ ในการแก้ปัญหา ทำให้ความยากต่ำกว่า exponential และทำให้กุญแจที่ใช้ต้องยาวขึ้นเรื่อยๆ

อย่างทุกวันนี้ที่ระดับความยาก 128 บิต ความยาวกุญแจของ ECC จะประมาณ 256 บิตเท่านั้น ขณะที่ของ RSA นั้นจะยาวถึง 3072 บิต

มาเข้าร่วมทีม BADA55 ได้อย่างไร

ทีมของโครงงานนี้ประกอบด้วยศาสตร์ตราจารย์, นักวิจัย post-doc, และนักเรียนระดับปริญญาเอกของ Cryptographic Implementations Group ที่มหาวิทยาลัย Eindhoven ประเด็นที่ทำให้รวมทีมกันเข้ามาทำโครงงานนี้คือทางกลุ่มเพิ่งได้ GPU ชุดใหม่มาจำนวนหนึ่งและมีงานประชุมวิชาการด้านวิทยาการเข้ารหัสลับ Eurocrypt 2014 กำลังจะจัดขึ้น อาจารย์หัวหน้ากลุ่มวิจัยจึงเสนอโครงงานนี้เพื่อไปนำเสนอใน Rump Session

งานวิจัยนี้นำเสนออะไรบ้าง

งานวิจัยนี้ต้องการสื่อว่า การสร้าง curve ของ ECC ถึงแม้ว่าค่าพารามิเตอร์จะได้มาจากการสุ่ม คนที่สร้างขึ้นมาก็อาจจะแฝงอะไรไว้อย่างจงใจได้ ในกรณีของโครงงานนี้เราใส่คำว่า BADA55 (อ่านว่า bad-ass) เข้าไว้ในค่าพารามิเตอร์ของ curve ที่สุ่มขึ้นมา

การที่ผู้เลือก curve สามารถแฝงอะไรไว้ในค่าพารามิเตอร์ของ curve ที่สร้างขึ้นมาได้ อาจจะทำให้สามารถเลือก curve ที่มีจุดอ่อนจนสามารถถอดรหัสได้ โดยทั่วไปเวลาที่เราใช้งาน เรามักใช้ curve ที่เลือกมาเป็นมาตรฐานแล้ว หากองค์กรที่กำหนดมาตรฐานสามารถเลือก curve ที่มีจุดอ่อนได้ องค์กรออกมาตรฐานก็อาจจะถอดรหัสของผู้อื่นที่เข้ารหัสด้วย curve นั้นได้

การสร้าง curve ที่ไม่ปลอดภัยง่ายขนาดนั้น?

ความปลอดภัยของ curve ขึ้นกับหลายปัจจัย เช่น
1. ขนาดของ field เช่น curve-224 หมายถึง field มีขนาด 224 บิต ซึ่งหาก field มีขนาดเล็กก็อาจถูกโจมตีด้วย brute force ได้ง่าย
2. curve นั้นๆ สามารถ transfer จาก elliptic curve group ไปเป็น linear algebraic group ได้หรือไม่ หากทำได้ก็จะแก้ปัญหา discrete logarithm ได้ง่าย
3. ขนาดของ complex-multiplication field discriminant ถ้ามีขนาดเล็กก็จะถูกโจมตีได้ง่าย
4. ความยืดหยุ่นในกระบวนการสร้าง ถ้ามีกระบวนการแน่นอนและอธิบายได้ การสร้าง curve ให้มีคุณสมบัติบางประการอย่างจงใจก็ทำได้ยาก หากกระบวนการปรับเปลี่ยนได้ คนสร้าง curve อาจจะปรับค่าและกระบวนการต่างๆ จนได้ curve ที่พอใจ
5. curve นั้นปลอดภัยแบบ twist-secure ด้วยหรือไม่
จากตัวอย่างปัจจัยข้างต้น หากมีข้อใดข้อหนึ่งไม่เหมาะสม curve ที่ได้ก็จะไม่ปลอดภัย

Twist-Secure คืออะไร

การโจมตีแบบพื้นฐานที่เราเห็นในการเข้ารหัสลับคือกระบวนการแบบ brute force โดยผู้โจมตีไม่จำเป็นต้องรู้อะไรเลย แต่ในกรณีของ ECC ตัว curve ที่ใช้อาจจะมี twisted curve ที่อ่อนแอ ซึ่งผู้โจมตีอาจจะเลือกส่งค่าที่ไม่ถูกต้องอย่างจงใจ โดยเลือกค่าที่ไม่อยู่บน curve ที่เราใช้งานแต่เลือกค่าที่อยู่บน twisted curve แทน

หาก curve นั้นๆ ไม่ปลอดภัยแบบ twist-secure และซอฟต์แวร์ที่ใช้คำนวณก็ไม่ได้ตรวจสอบความถูกต้องของอินพุตเสียก่อน ค่าที่คืนกลับไปยังผู้โจมตีอาจจะใช้คำนวณกุญแจลับได้โดยง่าย

เงื่อนไขนี้อาจจะไม่สำคัญนักหากซอฟต์แวร์มีการตรวจสอบอินพุตอย่างระมัดระวังก่อนคำนวณผลและคืนค่า แต่ในโลกความเป็นจริงโปรแกรมเมอร์อาจจะไม่ได้ตรวจสอบอินพุตอย่างดีก่อนก็เป็นได้ การเลือก curve ที่มีคุณสมบัติ twist-secure ด้วยจึงเป็นทางเลือกที่ดีกว่า

งานวิจัยนี้แสดงว่าแม้แต่กระบวนการ verifiably random ก็ยังสามารถเลือก curve ที่ผู้ออกแบบต้องการได้ อย่างนั้นเราจะต้องมีกระบวนการเพิ่มเติมเพื่อยืนยันได้ไหม หรือเราต้องไว้ใจคนออกแบบ curve

โดยส่วนตัวเห็นว่ากระบวนการยืนยันโดยสาธารณะ (publicly verifiable) นั้นสำคัญ โดยผู้สร้าง curve ควรที่จะต้องเปิดเผยกระบวนการทุกอย่างให้คนทั่วไปตรวจสอบ และอธิบายถึงการเลือกตัวแปรต่างๆ ด้วย

แม้ว่ากระบวนการ verifiably random ยังมีช่องให้ผู้สร้าง curve เลือก curve ที่ตนเองต้องการ แต่การผ่านการทดสอบหลายๆ ชั้นก็ช่วยเพิ่มความมั่นใจให้กับผู้ใช้ได้

โดยรวมแล้วการเข้ารหัสลับจะปลอดภัยได้ต้องผ่านการทดสอบให้ได้จำนวนมาก การเปิดให้คนทั่วไปทดสอบเป็นวงกว้างและยังไม่เจอช่องโหว่ ก็น่าเชื่อได้ว่าเป็นกระบวนการที่ปลอดภัย

ECC ได้รับความนิยมมากขึ้นเรื่อยๆ แต่ก็ยังมีเหตุการณ์ Dual_EC_DRBG ที่เชื่อว่า NSA วางช่องโหว่เอาไว้ เป็นไปได้ไหมที่เราจะหลีกเลี่ยงไม่ให้เกิดช่องโหว่แบบนั้นกับเรา

ที่จริงแล้วในฐานะผู้ใช้ทั่วไปเราคงไม่สามารถเข้าไปแก้ไขมาตรฐานอะไรได้ แต่สิ่งที่เราเลือกได้คือการเลือกซอฟต์แวร์ที่เปิดให้ยืนยันความปลอดภัยโดยสาธารณะ เพราะนอกจากเราเองจะเข้าไปตรวจสอบความปลอดภัยได้แล้ว คนอื่นๆ ก็ยังช่วยกันยืนยันได้ และหากพบข้อบกพร่องก็สามารถเข้าไปช่วยกันแก้ไขให้ดีขึ้นได้ การเปิดเผยกระบวนการและซอร์สโค้ดของซอฟต์แวร์อาจจะไม่ได้เพิ่มความปลอดภัยโดยตรง เพราะมีซอฟต์แวร์ที่เปิดเผยซอร์สโค้ดและกระบวนการแต่กลับมีข้อบกพร่อง แต่การเปิดให้เข้าไปตรวจสอบได้เป็นการช่วยเพิ่มความมั่นใจให้กับผู้ใช้

ในทางกลับกัน หากซอฟต์แวร์เป็นความลับ เราจะไม่รู้เลยว่าข้ออ้างต่างๆ ที่ผู้ผลิตบอกมานั้นถูกต้องเพียงใด ที่ผ่านมาเคยมีเหตุการณ์เช่นซอฟต์แวร์เข้ารหัสระบุว่าใช้เวลาคงที่เสมอ (constant time) แต่ปรากฎว่าในความเป็นจริงเวลากลับไม่คงที่อย่างที่อ้าง ทำให้ถูกโจมตีด้วยการจับเวลาการทำงานได้ (timing attack)

ข้อสำคัญอีกอย่างคือเราควรใช้งานตามรูปแบบที่แนะนำว่าปลอดภัยไม่ใช่เน้นความสะดวก ซอฟต์แวร์บางตัวมีตัวเลือกปิดความสามารถด้านความปลอดภัยลงบางอย่างเพื่อให้ทำงานเร็วขึ้น หากปิดความสามารถเหล่านั้นแล้วความปลอดภัยต่ำลงก็ควรพิจารณาให้ดีก่อน

สำหรับงานวิจัย BADA55 นี้เกี่ยวข้องกับหัวข้อปริญญาเอกรึเปล่าครับ

งานวิจัย BADA55 เกี่ยวข้องกับงานวิจัยหลักในระดับหนึ่งค่ะ หัวข้อวิจัยหลัก คือ fast implementation ของ elliptic & hyperelliptic curves ตัวอย่างงานวิจัยที่ตีพิมพ์แล้ว เช่น Pairings and Arithmetic และ Kummer surfaces ส่วนงานอื่นๆ ที่ทำอยู่ เช่น Curve41417, fast integer factorization, group signature ฯลฯ

ทีมงาน Blognone ขอขอบคุณคุณชิดชนก ที่สละเวลามาให้สัมภาษณ์ในครั้งนี้ครับ

Blognone Jobs Premium