มองระบบที่ทางภาครัฐฯ พัฒนาขึ้น สำหรับการเลือกตั้งครั้งที่ 28 (24 มี.ค. 2562)

Pattarawat Chormai
2 min readAug 12, 2019

--

ในการเลือกตั้งวันที่ 24 มี.ค. 2562 ที่ผ่านมา เป็นการเลือกตั้งทั่วไปครั้งที่ 28 ของประเทศไทย เราทุกคนทราบถึงความวุ่นวายและการไม่สอดคล้องของผลคะแนนดิบ ณ ขณะนับและหลังนับ เช่น การเกิดตัวเลขบัตรเขย่ง เป็นต้น ส่วนตัวคิดว่า ข้อผิดพลาดเหล่านี้สามารถป้องกันได้ ถ้าเรานำเทคโนโลยีมาใช้อย่างเป็นรูปธรรม

เนื่องจากช่วง เดือนกว่า ก่อนการเลือกตั้ง ผมได้มีส่วนร่วมงานกับทาง elect.in.th และมีโอกาสได้ร่วมพัฒนาระบบหลายๆตัวขึ้นมา เช่น http://elect.in.th/candidates/เลยคิดว่าน่าจะพอเห็นภาพรวมของระบบที่เกี่ยวข้องประมาณหนึ่ง และอยากจะลองวิเคราะห์เก็บเอาไว้ ว่าในการเลือกตั้งครั้งก่อน ภาครัฐมีการพัฒนานำเทคโนโลยีมาใช้อย่างไรกับการเลือกตั้ง เช่นมีระบบอะไรบ้าง และแต่ละอันมีจุดอ่อนและข้อควรปรับปรุงอย่างไรบ้าง

โดยระบบที่จะนำมาพูดถึงในบทความนี้ มีดังนี้

  1. เว็บไซต์ตรวจสอบหน่วยเลือกต้ังจากกรมการปกครอง
  2. แอพพลิเคชั่น SmartVote
  3. การจัดการข้อมูลผู้สมัคร ส.ส.​ของทาง กกต.​

ในส่วนของระบบที่ใช้ในการรายงานผลการเลือกตั้งนั้น ได้มีบทวิเคราะห์อยู่หลายแหล่ง ที่ค่อนข้างครอบคลุม เช่น “คุยกับโปรแกรมเมอร์ ELECT Live เรื่อง Human Error ของระบบ และความรันทดในคืนนับคะแนน” จากทาง Way Magazine เป็นต้น

1. เว็บไซต์ตรวจสอบหน่วยเลือกต้ังจากกรมการปกครอง

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

หน้าจอการใช้งานของระบบตรวจสอบสิทธิการเลือกตั้งของกรมการปกครอง

แต่อย่างไรก็ตาม เรามองว่าการใช้เพียงแค่เลขบัตรประชาชนกับ CAPTCHA นั้น ค่อนข้างไม่ปลอดภัยสำหรับการอนุญาตให้เข้าถึงข้อมูลส่วนตัวที่ค่อนข้างสำคัญเหล่านี้ โดยเหตุผลคือ

  1. CAPTCHA เป็นแค่ตัวตรวจเช็คว่าผู้ใช้งานที่เปิดหน้าเว็บอยู่นั้นเป็นคนจริงๆ หรือเปล่า แต่ไม่ป้องกันการเรียกขอข้อมูล (Request) ไปที่เซิฟเวอร์ตรงๆ
  2. นั้นหมายความว่า ถ้าเรารู้ว่าตัวเว็บมีการขอข้อมูลจากเซิฟเวอร์อย่างไร ผู้ไม่หวังดีก็จะสามารถใช้คำสั่งด้านล่างเรียกซุ่มดูข้อมูลเหล่านี้ได้ เพียงเปลี่ยน <ID> ถ้าหากรู้โครงสร้างของรหัสบัตรประชาชน ซึ่งโครงสร้าง 13 หลักของเลขบัตรประชาชนนั้นมีเปิดเผยต่อสาธารณะ นั้นหมายความว่าการซุ่มเผื่อให้ได้เลขบัตรที่ถูกต้องตามหลักนั้นเป็นไปได้
curl -X POST \ https://election.__.go.th/Election/cervote/Indexctl/vote_info \  
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'search_check=pid&id_no=<ID>'

ในกรณี การแก้ปัญหาเบื้องต้น อาจจะเพิ่มข้อมูลส่วนตัวอีกชุดหนึ่ง เช่น การใช้วัน เดือน ปี เกิดควบคู่กับการกรอกเลขบัตรประชาชน

2. SmartVote

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

หน้าจอต่างๆของแอพพลิเคชัน SmartVote

ในขณะที่เราได้ศึกษาการทำงานของ SmartVote โดยโปรแกรม mitmproxy เพื่อดูว่าตัวแอพพลิเคชันนั้น เรียกใช้ API อะไรบ้างจากเซิฟเวอร์ เวลาค้นหารายชื่อผู้สมัครรายเขต เพื่อเอาข้อมูลผู้สมัครมาใช้กับ elect.in.th/candidates เราพบขึ้นตอนการทำงานของตัวแอพพลิเคชันดังนี้

(1) ตัวแอพมีการเริ่มเรียก API เพื่อตรวจสอบ วัน เลือกตั้ง

(2) เมื่อเลือกเขตเลือกตั้ง ตัวแอพพลิเคชั่น จะใช้เวลาเฉลี่ยประมาณ 1.4 วินาที สำหรับดึงข้อมูลผู้สมัครในเขตนั้นๆ ซึ่งข้อมูลขนาดประมาณ 8 KB

(3) ถ้ากดเข้าไปดูคุณสมบัติของผู้สมัคร ต้องใช้เวลาอีกประมาณ 1.2 วินาที สำหรับการดูข้อมูลคุณสมบัติผู้สมัครในแต่ละคน ขนาดประมาณ​ 1 KB

ขั้นตอนการเรียกขอข้อมูลจากเซิฟเวอร์ของแอพพลิเคชัน SmartVote

ถ้าหากลองวิเคราะห์ระยะเวลาที่เรียกขอข้อมูลและขนาดของข้อมูลที่ได้มา เวลาที่ใช้เรียกขอข้อมูลควรจะอยู่ที่ประมาณ 1xx ms (อ้างอิงจากเวลาเรียกขอข้อมูลไฟล์​ postcode-to-zone.json ของหน้า elect.in.th/candidates) ปัญหานี้น่าจะเป็นปัญหาที่ฝั่งเซิฟเวอร์ของทาง SmartVote ไม่ได้เตรียมข้อมูลไว้ให้พร้อมใช้งาน หรือไม่ได้ใช้ Cache กับ API เหล่านี้

ในอีกมุมหนึ่ง ข้อมูลผู้สมัครเหล่านี้แทบจะไม่เปลี่ยนแปลงเลย นั้นหมายความว่าทางฝั่งเซิฟเวอร์สามารถเตรียมข้อมูลของแต่ละเขตเป็นไฟล์ แล้วส่งให้ตัวแอพพลิเคชันเลยเมื่อถูกเรียกขอโดยที่ไม่ต้องประมวลผลเพิ่มเติม ซึ่งจะช่วยลดระยะเวลาเรียกขอข้อมูลลงได้อย่างมีนัยสำคัญ ซึ่งเทคนิคนี้ได้มีการนำไปประยุกต์ใช้ ในโปรเจ็ค เช่น elect.in.th/candidates, elect.in.th/politics-and-business, และ elect.thematter.co เป็นต้น

ข้อดีของ SmartVote

  • ในกรณีที่มีฟังก์ชันการใช้งานครบถ้วน SmartVote เป็นจุดเริ่มต้นที่ดีสำหรับการให้ข้อมูลประกอบการตัดสินใจในการเลือกตั้ง

ข้อเสียของ SmartVote

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

3. ระบบการจัดการข้อมูลผู้สมัคร และการเอาไปใช้งาน

ในช่วงที่มีการประกาศรายชื่อผู้สมัคร ส.ส. นั้น มีผู้สมัครบางรายมีคุณสมบัติไม่ตรงหรือผิดพลาด

รายงานข่าวเรื่องข้อผิดพลาดของข้อมูลผู้สมัคร ส.ส.

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

ตัวอย่างการใช้โปรแกรม Sketch สร้างเอกสารข้อมูลผู้สมัคร ส.ส.

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

ข้อมูลระบบต่างๆ ที่ได้ถูกพัฒนาขึ้นในช่วงการเลือกตั้งครั้งที่ 28 ได้ถูกรวบรวมไว้ที่ https://github.com/codeforthailand/awesome-election-62

--

--