เมื่อเดือนที่แล้วมีงานวิจัยด้านวิทยาการเข้ารหัสลับชิ้นหนึ่งนำเสนอในงาน Eurocrypt 2014 เกี่ยวกับการยืนยันได้ว่าค่าพารามิเตอร์ของกระบวนการเข้ารหัสนั้นเป็นค่าที่สุ่มจริง (verifiably random) ผมได้อ่านงานวิจัยนี้แล้วพบว่าหนึ่งในทีมงานนั้นเป็นคนไทย คือคุณชิดชนก จึงเสถียรทรัพย์ ที่กำลังศึกษาในระดับปริญญาเอกที่มหาวิทยาลัย Eindhoven ในโอกาสนี้ผมจึงอีเมลไปติดต่อขอสัมภาษณ์ และก็ได้มาเป็นบทสัมภาษณ์ฉบับนี้กันครับ
เบื้องต้นเกี่ยวกับงานวิจัยนี้ เราควรรู้ก่อนว่าในกระบวนการเข้ารหัสรูปแบบต่างๆ มักมีค่าพารามิเตอร์ที่สามารถเปลี่ยนแปลงได้ เพื่อให้กระบวนการเข้ารหัสทำงานร่วมกันได้ จึงจำเป็นที่จะต้องเลือกค่าบางค่าเป็นมาตรฐาน หน่วยงานออกมาตรฐานอย่าง NIST เป็นผู้ทำหน้าที่เลือกค่าพารามิเตอร์เหล่านั้นมาเสนอ โดยทั่วไปจะเลือกค่าพารามิเตอร์จากค่าสุ่ม ซึ่งกระบวนการที่ทำให้ยืนยันได้ว่าค่านั้นมาจากการสุ่มคือมาตรฐานจะระบุว่าค่าที่ได้มาจากการแฮช การที่ค่าผ่านการแฮชมาทำให้ยากมากที่ผู้ออกมาตรฐานจะสามารถเลือกค่าพารามิเตอร์ได้เองตามใจชอบ
ถึงตรงนี้เราคุยกับคุณชิดชนกกันครับ
เริ่มสนใจตั้งแต่ที่บ้านมีคอมพิวเตอร์ (น่าจะประมาณ ป.4) ตอนแรกก็ใช้งานโปรแกรมทั่วไป เช่น พิมพ์รายงาน ต่อมาตอน ป.5 ก็เริ่มฝึกทำเว็บ โดยเริ่มจาก HTML แล้วมาอ่าน Javascript, Perl, CGI บ้าง แต่ก็ไม่ค่อยสนใจทางนี้สักเท่าไหร่ จากนั้นตอน ป.6 ได้ลองฝึกเขียน Pascal ซึ่งถือได้ว่าเป็นภาษาคอมพิวเตอร์ภาษาแรกที่ฝึก แล้วก็ศึกษา C/C++, VisualBasic, Java, C# เพิ่มมาเรื่อยๆ
ตอนเลือกคณะเรียนปริญญาตรีค่อนข้างลังเลค่ะว่าจะเลือกคณะไหน เพราะนอกจากด้านคอมพิวเตอร์แล้ว ยังสนใจด้านภาษาอีกด้วย จึงกลายเป็นตัวเลือกที่อยู่คนละทางระหว่างอักษรศาสตร์กับวิศวกรรมศาสตร์ สุดท้ายตัดสินใจเลือกวิศวกรรมคอมพิวเตอร์จุฬาฯ เป็นอันดับหนึ่ง โดยตอนนั้นบอกกับตัวเองว่าเรียนภาษาญี่ปุ่นด้วยตัวเองก็ยังสอบ JPLT ได้ระดับสอง ก็น่าจะสามารถเรียนภาษาด้วยตัวเองต่อไปได้
ตั้งแต่เริ่มเขียนโปรแกรมก็สนใจการเข้ารหัสและถอดรหัส (encode/decode) ของรหัสรูปแบบต่างๆ อย่างพวก ASCII หรือ Huffman code มาตลอด ตอนหลังจึงเริ่มสนใจการเข้ารหัสลับและการถอดรหัสลับ (encryption/decryption) เพราะสงสัยว่าจากข้อความปกติสามารถเปลี่ยนไปข้อความอื่นแล้วเปลี่ยนกลับมาเป็นข้อความเดิมได้อย่างไร โดยเฉพาะกระบวนการเข้ารหัสที่ใช้กุญแจเข้ารหัสและถอดรหัสต่างกัน
พอใกล้จบปริญญาตรีก็สอบได้ทุนรัฐบาลญี่ปุ่น และได้เลือกแล็บที่ทำวิจัยด้านวิทยาการเข้ารหัสลับ เมื่อเข้าไปเรียนปริญญาโทที่แล็บนั้นรุ่นพี่ที่แล็บก็แนะนำ Elliptic Curve Cryptography (ECC) พอได้เรียนก็รู้สึกยิ่งสนใจมากขึ้น โดยเฉพาะประเด็น Pairing-Based Cryptography ที่อาศัยการนำสมาชิกของกลุ่มหนึ่งไปจับกับอีกกลุ่มหนึ่งเพื่อโยงไปยังอีกกลุ่มหนึ่ง ซึ่งประเด็นนี้ต้องใช้ความรู้เกี่ยวกับ elliptic curve เช่นกัน
หลังจากนั้นได้ขออาจารย์ไปเรียนซัมเมอร์และเข้าร่วมเวิร์คช็อป ที่งาน ECC 2011 แล้วสมัครทุนไปทำวิจัยระยะสั้น (lab visit) ที่มหาวิทยาลัย Eindhoven ที่เรียนปริญญาเอกอยู่ ณ ขณะนี้ ตอนนั้นได้พูดคุยกับผู้ที่ทำงานด้านการเข้ารหัสลับนี้หลายท่าน และพบว่ามีอะไรให้เรียนรู้และทำวิจัยอีกมาก
ตอนหลังทางมหาวิทยาลัย Eindhoven เสนอทุนเรียนปริญญาเอกให้ จึงตอบรับและหันมาวิจัยด้านนี้อย่างเต็มตัว
ECC มีข้อได้เปรียบการเข้ารหัสลับแบบ RSA ที่ใช้กันมากในทุกวันนี้คือที่ระดับความปลอดภัยเท่ากัน ขนาดกุญแจของ ECC จะสั้นกว่าของ RSA มาก โดยสองกระบวนการตั้งอยู่บนพื้นฐานของปัญหาที่ต่างกัน ตัว ECC ตั้งอยู่บนพื้นฐานว่าปัญหา discrete logarithm นั้นยาก ส่วน RSA ตั้งอยู่บนพื้นฐานว่าปัญหา factorization (การแยกตัวประกอบของตัวเลข) นั้นยาก
เมื่อก่อนทั้งสองปัญหายากในระดับ exponential เหมือนๆ กัน แต่ปัญหา factorization มีการพัฒนาวิธีใหม่ๆ ในการแก้ปัญหา ทำให้ความยากต่ำกว่า exponential และทำให้กุญแจที่ใช้ต้องยาวขึ้นเรื่อยๆ
อย่างทุกวันนี้ที่ระดับความยาก 128 บิต ความยาวกุญแจของ ECC จะประมาณ 256 บิตเท่านั้น ขณะที่ของ RSA นั้นจะยาวถึง 3072 บิต
ทีมของโครงงานนี้ประกอบด้วยศาสตร์ตราจารย์, นักวิจัย post-doc, และนักเรียนระดับปริญญาเอกของ Cryptographic Implementations Group ที่มหาวิทยาลัย Eindhoven ประเด็นที่ทำให้รวมทีมกันเข้ามาทำโครงงานนี้คือทางกลุ่มเพิ่งได้ GPU ชุดใหม่มาจำนวนหนึ่งและมีงานประชุมวิชาการด้านวิทยาการเข้ารหัสลับ Eurocrypt 2014 กำลังจะจัดขึ้น อาจารย์หัวหน้ากลุ่มวิจัยจึงเสนอโครงงานนี้เพื่อไปนำเสนอใน Rump Session
งานวิจัยนี้ต้องการสื่อว่า การสร้าง curve ของ ECC ถึงแม้ว่าค่าพารามิเตอร์จะได้มาจากการสุ่ม คนที่สร้างขึ้นมาก็อาจจะแฝงอะไรไว้อย่างจงใจได้ ในกรณีของโครงงานนี้เราใส่คำว่า BADA55 (อ่านว่า bad-ass) เข้าไว้ในค่าพารามิเตอร์ของ 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 ที่ได้ก็จะไม่ปลอดภัย
การโจมตีแบบพื้นฐานที่เราเห็นในการเข้ารหัสลับคือกระบวนการแบบ brute force โดยผู้โจมตีไม่จำเป็นต้องรู้อะไรเลย แต่ในกรณีของ ECC ตัว curve ที่ใช้อาจจะมี twisted curve ที่อ่อนแอ ซึ่งผู้โจมตีอาจจะเลือกส่งค่าที่ไม่ถูกต้องอย่างจงใจ โดยเลือกค่าที่ไม่อยู่บน curve ที่เราใช้งานแต่เลือกค่าที่อยู่บน twisted curve แทน
หาก curve นั้นๆ ไม่ปลอดภัยแบบ twist-secure และซอฟต์แวร์ที่ใช้คำนวณก็ไม่ได้ตรวจสอบความถูกต้องของอินพุตเสียก่อน ค่าที่คืนกลับไปยังผู้โจมตีอาจจะใช้คำนวณกุญแจลับได้โดยง่าย
เงื่อนไขนี้อาจจะไม่สำคัญนักหากซอฟต์แวร์มีการตรวจสอบอินพุตอย่างระมัดระวังก่อนคำนวณผลและคืนค่า แต่ในโลกความเป็นจริงโปรแกรมเมอร์อาจจะไม่ได้ตรวจสอบอินพุตอย่างดีก่อนก็เป็นได้ การเลือก curve ที่มีคุณสมบัติ twist-secure ด้วยจึงเป็นทางเลือกที่ดีกว่า
โดยส่วนตัวเห็นว่ากระบวนการยืนยันโดยสาธารณะ (publicly verifiable) นั้นสำคัญ โดยผู้สร้าง curve ควรที่จะต้องเปิดเผยกระบวนการทุกอย่างให้คนทั่วไปตรวจสอบ และอธิบายถึงการเลือกตัวแปรต่างๆ ด้วย
แม้ว่ากระบวนการ verifiably random ยังมีช่องให้ผู้สร้าง curve เลือก curve ที่ตนเองต้องการ แต่การผ่านการทดสอบหลายๆ ชั้นก็ช่วยเพิ่มความมั่นใจให้กับผู้ใช้ได้
โดยรวมแล้วการเข้ารหัสลับจะปลอดภัยได้ต้องผ่านการทดสอบให้ได้จำนวนมาก การเปิดให้คนทั่วไปทดสอบเป็นวงกว้างและยังไม่เจอช่องโหว่ ก็น่าเชื่อได้ว่าเป็นกระบวนการที่ปลอดภัย
ที่จริงแล้วในฐานะผู้ใช้ทั่วไปเราคงไม่สามารถเข้าไปแก้ไขมาตรฐานอะไรได้ แต่สิ่งที่เราเลือกได้คือการเลือกซอฟต์แวร์ที่เปิดให้ยืนยันความปลอดภัยโดยสาธารณะ เพราะนอกจากเราเองจะเข้าไปตรวจสอบความปลอดภัยได้แล้ว คนอื่นๆ ก็ยังช่วยกันยืนยันได้ และหากพบข้อบกพร่องก็สามารถเข้าไปช่วยกันแก้ไขให้ดีขึ้นได้ การเปิดเผยกระบวนการและซอร์สโค้ดของซอฟต์แวร์อาจจะไม่ได้เพิ่มความปลอดภัยโดยตรง เพราะมีซอฟต์แวร์ที่เปิดเผยซอร์สโค้ดและกระบวนการแต่กลับมีข้อบกพร่อง แต่การเปิดให้เข้าไปตรวจสอบได้เป็นการช่วยเพิ่มความมั่นใจให้กับผู้ใช้
ในทางกลับกัน หากซอฟต์แวร์เป็นความลับ เราจะไม่รู้เลยว่าข้ออ้างต่างๆ ที่ผู้ผลิตบอกมานั้นถูกต้องเพียงใด ที่ผ่านมาเคยมีเหตุการณ์เช่นซอฟต์แวร์เข้ารหัสระบุว่าใช้เวลาคงที่เสมอ (constant time) แต่ปรากฎว่าในความเป็นจริงเวลากลับไม่คงที่อย่างที่อ้าง ทำให้ถูกโจมตีด้วยการจับเวลาการทำงานได้ (timing attack)
ข้อสำคัญอีกอย่างคือเราควรใช้งานตามรูปแบบที่แนะนำว่าปลอดภัยไม่ใช่เน้นความสะดวก ซอฟต์แวร์บางตัวมีตัวเลือกปิดความสามารถด้านความปลอดภัยลงบางอย่างเพื่อให้ทำงานเร็วขึ้น หากปิดความสามารถเหล่านั้นแล้วความปลอดภัยต่ำลงก็ควรพิจารณาให้ดีก่อน
งานวิจัย BADA55 เกี่ยวข้องกับงานวิจัยหลักในระดับหนึ่งค่ะ หัวข้อวิจัยหลัก คือ fast implementation ของ elliptic & hyperelliptic curves ตัวอย่างงานวิจัยที่ตีพิมพ์แล้ว เช่น Pairings and Arithmetic และ Kummer surfaces ส่วนงานอื่นๆ ที่ทำอยู่ เช่น Curve41417, fast integer factorization, group signature ฯลฯ
ทีมงาน Blognone ขอขอบคุณคุณชิดชนก ที่สละเวลามาให้สัมภาษณ์ในครั้งนี้ครับ
Comments
กด like ให้รัวๆๆๆๆๆๆ
สงสัยเลเวลผมยังน้อยอยู่อ่านไป ต้องตามไปหาคำอธิบายเพิ่ม คนที่มาด้านนี้เก่งจริงๆ เยี่ยมมากครับ
งึมงำๆ Elliptic Curve Cryptography ...
/me ติดสตั้น 10 วินาที
แต่ถ้ามีการใช้ ECC เยอะขึ้น ก็จะทำให้มีคนสนใจปัญหาด้าน discrete logarithm มากตามมาจนพบเทคนิคใหม่ๆ สำหรับโจมตี ECC โดยเฉพาะ (เหมือนกับที่เดี๋ยวนี้เรามีเทคนิค factorization มากมาย และก็ไม่น้อยที่พัฒนาขึ้นมาสำหรับ prime ขนาดใหญ่ 2 ตัวซึ่งเป็นหัวใจของ RSA) แล้วสุดท้าย ECC จะไปเล่นท่าง่ายคือเพิ่มขนาดความยาวกุญแจขึ้นไป (เหมือนที่เคยเกิดมาแล้วตอน 3DES) เพื่อรักษาความยากหรือเปล่าครับ?
อ่านไปคิดแบบนี้ไปเหมือนกันครับ แต่อย่างน้อย ๆ ผมว่ามันก็คงช่วยยื้อเวลาได้พักนึง กว่าที่จะคิด algorithm ช่วยแก้ปัญหาได้เร็วขึ้น
เทคโนโลยีไม่ผิด คนใช้มันในทางที่ผิดนั่นแหละที่ผิด!?!
น่าสนใจว่าเดี๋ยวนี้การสร้างระบบเข้ารหัสซับซ้อนเร็วยิ่งขึ้นไป แต่การถอดรหัสกลับนั้นกลับเร็วยิ่งกว่า
บล็อกส่วนตัวที่อัพเดตตามอารมณ์และความขยัน :P
รูปน้อยไปครับ
สวยและเก่ง หลงรักเลย ขอสมัครเป็นแฟนคลับ
cryptographic implementation group... ฟังแล้วโคตรเท่ มูลค่าทางธุรกิจมหาศาลด้วย คนไทยเรา theoretical math ไม่เป็นรองใครอยู่แล้ว ขาดแค่ผู้นำลัทธิที่สามารถสร้าง value ได้เท่านั้นเอง เป็นกำลังใจให้กลับมาบุกเบิกวงการนี้ในไทยนะครับ
ตอนแรกอ่านเป็น บาด้าห้าห้า นะ แต่พอเผยคำอ่านเท่านั้นแหละ..
อ่าน บาด้าห้าห้า เหมือนกันครับ ที่ไหนได้...
เก่งมากเลยครับ ข้าน้อยเวลไม่ถึงอ่านไปก็งงไป แต่ทำไมไม่รู้อ่านแล้วสนุกจัง :)