แนวทางการ implement ระบบ e-Election
สวัสดีครับ ห่างหายไปจาก Medium เสียนาน วันนี้บังเอิญมีการพูดคุยเรื่อง e-Election ทาง ThaiChain Foundation จึงขอใช้โอกาสนี้มาเล่าคอนเซ็ปต์คร่าวๆ ตามที่ทางมูลนิธิ เคยศึกษาข้อมูลไว้ครับ
ข้อควรทราบก่อนจะเริ่มกัน
เนื้อหาที่จะนำเสนอดังต่อไปนี้ ทางมูลนิธิฯ ไม่ได้เป็นผู้คิดค้นเอง เราเป็นเพียงผู้ที่ศึกษาและรวบรวมเนื้อหาเท่านั้น อีกทั้งมูลนิธิก็ยังไม่เคย Implement ระบบจริง เนื่องจากในเชิงรายละเอียด ยังขาดองค์ความรู้ที่จำเป็นอีกมาก
โอเคครับ ได้เวลาแล้ว ผมจะเริ่มนำเสนอเนื้อหา โดยเริ่มจาก Why, What, แล้วก็ How ไปตามลำดับครับ
Why?
ทำไมต้องทำ e-Election?
การยืนยันตัวบุคคล (การลงชื่อว่ามาใช้สิทธิ์)
ในการเลือกตั้งปัจจุบัน ไม่มีประสิทธิภาพครับ ที่ว่าไม่มีประสิทธิภาพคือ มันเสียเวลาแล้วก็งบประมาณในการจัดการสูง ในเขตการเลือกตั้งใหญ่ๆ นี่ รถก็ติด ที่จอดก็หายาก ฝ่ามาถึงคูหาได้ก็ใช่ว่าจะจบ ต้องคิวอีกเป็นร้อยคิว นี่ยังไม่นับคนที่ต้องการเลือกตั้งนอกเขตอีกนะครับ
ความโปร่งใส
ก็อย่างที่เห็นตามข่าวเลยครับ หีบหาย บัตรเขย่ง
การนับคะแนน
ทำได้ล่าช้า สิ้นเปลืองงบประมาณ แถมไม่น่าเชื่อถือด้วย เลือกตั้งทีไร มีการขอให้นับคะแนนใหม่อยู่เสมอๆ
What?
แล้ว e-Election จะช่วยอะไรได้?
การยืนยันตัวบุคคล (การลงชื่อว่ามาใช้สิทธิ์)
การยืนยันตัวบุคคลก็จะสามารถทำได้สะดวกขึ้น ไม่ต้องไปยังสถานที่ที่กำหนด อันที่จริง ถ้ามี Digital ID แล้ว ก็ไม่ต้องออกจากบ้านแล้วด้วยซ้ำ ขอแค่มีโทรศัพท์มือถือที่เชื่อมอินเทอร์เน็ตได้ก็พอ (ส่วนใครไม่มี ก็สามารถไปใช้สิทธิ์ด้วยวิธีเดิมได้)
ให้เปรียบเทียบก็เหมือนกับ Mobile Banking ที่เมื่อยี่สิบปีก่อน การไปธนาคารจะเสียเวลามาก แต่ยุคนี้เปิดแอพก็โอนเงินกันได้แล้ว ใครที่ไม่สะดวกก็ไปที่สาขาได้เหมือนเดิม ทางธนาคารหลายแห่งจึงสามารถปิดหลายๆ สาขา เพื่อลดต้นทุนการจัดการได้ เมื่อมี e-Election แล้ว คนส่วนมากก็ควรเลือกตั้งผ่านแอพได้ เมื่อเป็นดังนี้ กกต. ก็สามารถลดต้นทุนการจัดเตรียมคูหาได้ ให้เล็กลง และ/หรือ ให้มีน้อยลงได้ เผลอๆ มีแค่อำเภอละจุดก็เพียงพอ
ความโปร่งใส
เมื่อข้อมูลมาอยู่ในรูปแบบของอิเล็กทรอนิกส์ มันก็จะสะดวกในการกระทบยอด สะดวกในการตรวจบัญชี มีอะไรผิดปกติก็จะรู้ได้ในทันที ถ้าใครเคยทำธุรกิจตั้งแต่ยุคที่การทำบัญชีเป็นงานกระดาษ ก็น่าจะเข้าใจดีว่าเมื่อย้ายมันมาเป็นระบบอิเล็กทรอนิกส์แล้ว มันสะดวกขนาดไหน ยื่นงบก็ไม่วุ่นวาย อะไรก็ง่ายไปเสียหมด
การนับคะแนน
ปิดหีบปุ๊บ รู้ผลในระบบ e-Election ทันที ไม่ต้องขนย้ายหีบ ไม่ต้องขานคะแนน
How?
จะใช้อะไรพัฒนา?
การยืนยันตัวบุคคล (การลงชื่อว่ามาใช้สิทธิ์)
ใช้ Digital ID เลยครับ ตอนนี้ประเทศไทยพร้อมมาก เรื่อง Digital ID หลายๆ คนคงเริ่มได้ยินข่าวเรื่องการเปิดบัญชีธนาคารด้วย Digital ID ผ่านระบบ NDID ใช่ไหมครับ นั่นแหละ ทำเหมือนกันเลย
การพิสูจน์ตัวที่ความน่าเชื่อถือระดับ IAL 2.3 เนี่ย มันมีมาตรการที่น่าเชื่อถือมากกว่าการโอนเงินผ่านแอพอีกนะครับ เพราะตอนที่ยืนยันตัว จะทำที่ระดับ AAL 2.2 ซึ่งเป็น 3-factor authentication ที่ผ่านมาพวกเราคุ้นเคยดีกับการใช้รหัสผ่าน + OTP แต่ระดับ AAL 2.2 มันสูงกว่านั้น นอกจาก รหัสผ่าน + OTP แล้ว คุณต้องทำ Biometric comparison แบบ Liveness ด้วย (ใช้ AI เปรียบเทียบใบหน้า ว่าเป็นตัวจริงไหม)
ดังนั้นลืมไปได้เลยเรื่องการสวมรอยใช้สิทธิ์แทนคนอื่น ทำไม่ได้แน่ๆ ครับ
…ส่วนปัญหาเรื่องขายเสียง คงแก้ไม่ได้ แต่มีกรณีที่น่าสนใจคือประเทศเอสโตเนีย เปิดให้โหวตใหม่ได้เรื่อยๆ จนกว่าจะปิดหีบครับ เพราะฉะนั้น สามารถขายเสียงไปก่อน แล้วแก้ใหม่ไปลงคะแนนให้คนที่ต้องการได้ครับ
ความโปร่งใส
ใช้ FOO’92 Protocol ในการเลือกตั้ง โดยอาศัยเทคนิค Blind Signature กับ Zero-knowledge proof ในการ implement
การนับคะแนน
ระบบ e-Election จะเกิดขึ้นบน Smart Contract ให้มากที่สุดที่สามารถทำได้ บัตรเลือกตั้งทุกใบต้องอยู่บน Blockchain เพื่อความโปร่งใส
ความท้าทายในการพัฒนาระบบ e-Election
หลายๆ คนที่เสนอเรื่อง e-Election มักจะลืมสองเรื่องนี้ไปเสมอๆ
- การเลือกตั้งเนี่ย ต้องรู้ว่าใครมาใช้สิทธิ์บ้าง แต่ห้ามรู้ว่าลงคะแนนให้เบอร์ไหน เพราะการไม่มาใช้สิทธิ์ จะทำให้เสียสิทธิ์ทางการเมือง จึงต้องระบุให้ได้ว่าใครมาบ้าง
- การเผยคะแนนก่อนการปิดหีบ เป็นการชี้นำคนที่ยังไม่มาใช้สิทธิ์ ผลคะแนน จึงต้องห้ามถูกนับ จนกว่าจะปิดหีบ แม้แต่กกต. เองก็ต้องไม่สามารถแอบนับได้
มาถึงเรื่องน่าปวดหัวกันเสียที ภาพด้านบนคือ Flow การเลือกตั้งตาม FOO’92 Protocol ที่เสนอโดย Fujioka, Okamoto, และ Ohta ในปี 1992 ครับ โอ้โห เป็นนักวิจัยที่แนวคิดนำยุคนำสมัยมาก สมัยนั้นคอมพิวเตอร์ยังไม่มีการใช้งานตามบ้านเลย แต่น่าเสียดายที่ยังไม่มีการนำไปใช้จริง เนื่องจากเทคโนโลยีไม่พร้อมในหลายจุด เพิ่งมาพร้อมก็ตอนที่โลกเรามี Blockchain Technology นี่แหละ
- ผู้ใช้สิทธิ์ ยืนยันตัวกับ กกต. ด้วย Digital ID พร้อมกับแนบบัตรเลือกตั้งอิเล็กทรอนิกส์ที่ลงคะแนนไว้เรียบร้อยว่าจะเลือกเบอร์อะไร แต่ลงลายเซ็นแบบ Blind Signature เอาไว้ เจ้า Blind Signature เนี่ย เป็นเทคนิคที่ใช้รับรองเนื้อหาอะไรบางอย่าง คนอ่านจะรู้ว่าเป็นของจริง แต่ไม่สามารถอ่านเนื้อหาด้านในได้
- กกต. ตรวจสอบดูว่ามีสิทธิ์จริงไหม มาใช้สิทธิ์ซ้ำไหม จากนั้นก็จดชื่อไว้ว่ามาใช้สิทธิ์แล้ว เพื่อรักษาสิทธิ์ทางการเมืองให้กับบุคคลดังกล่าว
- กกต. รับรองบัตรเลือกตั้งอิเล็กทรอนิกส์ ด้วย e-Signature
- ผู้ใช้สิทธิ์ Unblind Signature ทิ้ง เพื่อเปิดเผยเนื้อหาที่ซ่อนไว้ด้านใน
- ส่งบัตรเลือกตั้งไปยังระบบ ด้วยช่องทางนิรนาม ในเบื้องต้นทางมูลนิธิฯ คิดว่า Zero-knowledge proof น่าจะเป็นเทคนิคที่ช่วยตรงนี้ได้
- ระบบจัดการเลือกตั้ง ตรวจสอบความถูกต้องของบัตรเลือกตั้งอิเล็กทรอนิกส์ การตรวจสอบที่ว่านี่ก็ไม่ยากอะไร แค่ดูว่ามี e-Signature จากกกต. รับรองเอาไว้หรือเปล่า จากนั้นก็รอถึงเวลาปิดหีบแล้วก็นับคะแนน ขั้นตอนนี้จะเกิดบน Smart Contract ทั้งหมด
Zero-knowledge Proof
ส่วนนี้จะเป็นส่วนที่เข้าใจยากที่สุดแล้ว ทางมูลนิธิเองก็ยังไม่เข้าใจในรายละเอียด เนื่องจากเป็นการใช้คณิตศาสตร์ที่ซับซ้อนมาก
Zero-Knowledge Proof (ZK, ZKP) เป็นเทคนิคในการส่งข้อมูลหากัน โดยจะไม่เผยข้อมูลออกมาตรงๆ ซึ่งผลพลอยได้ของมันคือการส่งข้อมูลแบบนี้จะเป็นแบบนิรนามด้วย ถูกต้องตามโจทย์ที่เราสนใจ เป๊ะๆ
สำหรับคนที่สนใจเรื่องนี้ แนะนำให้หาเวลาว่างเยอะๆ เปิดใจพร้อมรับสมการคณิตศาสตร์เยอะๆ แล้วนั่งดูคลิปนี้ครับ
ส่วนใครที่คิดว่าไม่ดีกว่า ผมดีใจครับที่คุณเลือกแบบนั้น 555 เพราะมันยากจริงๆ
เอาเป็นว่า ZKP แบ่งได้เป็นสองเทคนิคหลักๆ คือ Interactive กับ Non-interactive
ถ้าให้เล่าแบบเร็วๆ Interactive คือการพิสูจน์ด้วยการถามไปถามมาเยอะๆ จนคิดว่า ถ้ามันตอบถูกเยอะขนาดนี้ มันคงเป็นตัวจริงนั่นแหละ เชื่อก็เชื่อวะ
เช่น สามารถตอบคำถามที่เป็น yes/no question ได้ถูกต้องติดต่อกัน 20 ครั้ง เราก็ยอมเชื่อแล้วว่าเค้าเป็นตัวจริง เพราะโอกาสที่จะเดาถูกต่อเนื่องกัน 20 ครั้งคือ 1 ใน ล้าน (1 ใน 2²⁰ ซึ่งก็คือ 1 ใน 1,048,576)
ส่วน Non-interactive จะใช้การพิสูจน์ทางคณิตศาสตร์แทน ดีกว่าแบบแรกตรงที่ไม่ต้องเสียเวลาถามไปถามมา เพราะแบบนั้นมันจะเกิด transaction ขึ้นในระบบเยอะมาก เป็นภาระต่อระบบ server
ซึ่ง Zero-knowledge proof แบบ Non-interactive เนี่ย หลายคนที่สนใจ Blockchain Technology คงจะเคยผ่านหูผ่านตามาบ้างแล้ว เพราะมีการ implement และใช้งานจริงแล้ว บน ZCash และ ZCoin ของคุณหนึ่ง ปรมินทร์ ผู้ก่อตั้ง Satang.pro
โปรโตคอลที่ใช้ใน ZCash เรียกว่า ZK-snarks ย่อมาจาก
Zero-knowledge Succinct Non-interactive Argument Of Knowledge Protocol
อ่านเข้าใจยากชิบเป๋ง 555
เอาเป็นว่า มันเป็น ZKP แบบ Non-interactive แบบนึงละกัน
และข่าวดีก็คือ มีการพอร์ทเอาเฉพาะส่วนของโปรโตคอลนี้ ออกมาเป็น Smart Contract แล้ว จัดทำโดย Big 4 ด้าน Audit ชื่อดังอย่าง E&Y ชื่อว่าโครงการ Nightfall
นั่นแปลว่า ในปัจจุบัน เทคโนโลยีต่างๆ มีความพร้อมแล้ว เหลือแค่การลงมือประกอบมันเข้าเป็นระบบเดียวกัน ก็เท่านั้นเอง
หวังว่าบล็อกนี้จะเป็นประโยชน์ต่อประเทศไทยต่อไปครับ
ใครมีข้อสงสัย สามารถทิ้งคำถามไว้ได้เลยนะครับ ตอบได้จะตอบ ตอบไม่ได้จะไปหาผู้รู้มาตอบให้ครับ
วันนี้พอแค่นี้ก่อน สวัสดีครับ