สืบเนื่องจาก blog กระทู้ก่อนหน้า

http://gotoknow.org/blog/wwibul/40340  

มีเรื่องค้างคาใจที่ยังแก้ไม่ได้โดยง่าย บางระบบที่ค่อนข้าง 'หลุดเทรนด์' อาจไม่สามารถใช้ open-souce utility มาช่วยได้ ซึ่งอาจทำให้ webboard จำนวนหนึ่ง ต้องล้มหายตายจากไป

ในฐานะที่ผมต้องรับผิดชอบอยู่หนึ่งบอร์ด ผมไม่ยอม

ปรกติเราเข้าไปในห้อง ถ้าเข้าไปคนเดียว ยุงทั้งห้องจะรุมเรา

แต่ถ้าเข้าไปหลาย ๆ คน จะช่วยแบ่งเบากันได้ ('มียุงร่วมเสพ มีเลือดร่วมต้าน')

เพื่อปกปักเพื่อนร่วม(หาร)ชะตากรรม ผมจึงขอกลับมาต่อภาค 2

ฐานบท (เอ้อ .. หมายถึงข้อสมมติพื้นฐาน หรือที่เขาแปลกันว่า Assumption):

1. ระบบ spambot เป็น bot ขนานแท้

2. bot ที่ว่านี้เป็น webboard-bot

3. bot นี้ ไม่ใช่รุ่นไทยประดิษฐ์

4. bot นี้เป็น bot ที่เขาสร้างแบบกลาง ๆ ให้ใช้ได้ทั่วโลก

5. bot นี้ไม่ได้ใช้ heuristic ที่ฉลาดระดับอัจฉริยะ

ถ้า Assumption เหล่านี้เป็นจริง ผมเชื่อว่าเป็นไปได้ทางทฤษฎีที่จะหาทางรับมือได้โดยใช้เทคโนโลยีแบบ text mode

text mode เขียนโปรแกรมง่าย สามารถแฝงมิติทางวัฒนธรรมเข้ามาได้อีกต่างหาก  ซึ่งระบบปัญญาประดิษฐ์ยังไม่น่าจะโตทันในช่วงเวลาอันสั้นนี้ และกรองทิ้งคนที่ไม่คุ้นกับภาษาและวัฒนธรรมไทยออกไปได้ ระดับหนึ่งด้วย

แนวคิดหลักในการออกแบบ: 

โดยทั่วไป ระบบที่ใช้ได้ผลดีคือ graphic mode เพราะคุณสมบัติ asymmetric mapping ของตัวเลขไปเป็นภาพตัวเลข นั่นคือ สมมติผมนึกเลขขึ้นมาชุดหนึ่ง ผมเขียนลงกระดาษ ตัวเลขนี้จะกลายเป็นกลุ่มของจุดมากมาย ซึ่งในมุมมองของ bot ทั้งหลาย มันควรจะงงเพราะมันต้อง mapping กลุ่มของจุดคืนรูปไปเป็นตัวเลข ซึ่งถ้าใครสามารถทำแบบนี้ได้ดี แทนที่จะเขียน bot เลี้ยงชีพ เขียน OCR แปลงลายมือขายจะรวยเร็วกว่า

asymmetric mapping คืออะไร ยกตัวอย่างง่าย ๆ สมมติผมมีความสัมพันธ์

           y = 0.78 x ln x

ถ้าผมกำหนด x ขึ้นมา ผมสร้าง y ง่ายนิดเดียว แค่แทนค่า

แต่ถ้าผมทราบ x และ y ใด ๆ มาเป็นตัวเลข ต่อให้ทราบหลายชุด ถ้าไม่ทราบความสัมพันธ์มาก่อน ผมก็คงต้องนั่งงมกันนานกว่าจะหาความสัมพันธ์พื้นฐานออกมาได้ และต่อให้ทราบความสัมพันธ์ กว่าผมจะทำ regression เพื่อดึงค่า 0.78 กลับออกมา ก็ไม่ใช่เรื่องง่ายนัก

การที่มีชุดสมการและชุดค่าคงที่ ผมสร้างคู่ลำดับ x,y ง่าย

แต่ต่อให้ผมทราบคู่ลำดับ x,y ผมก็ต้องเสียเวลานานกว่าจะ reverse numerating ได้คืนออกมาเป็นชุดสมการพร้อมค่าคงที่

นั่นคือ asymmetric mapping คือการที่แปลงไปด้านนึงง่าย แต่แปลงกลับมาย๊าก..ยาก

แบบนี้เป็นเหมือนการว่ายตามน้ำและว่ายทวนน้ำ

โปรแกรมเมอร์ของระบบเป็นผู้กำหนดความแรงของกระแสน้ำ

bot เป็นนักว่ายน้ำ

เมื่อเรารำคาญมัน เราก็สั่งให้น้ำไหลแรง ๆ อยากเข้ามาก็เชิญว่ายทวนน้ำซะให้เข็ด

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

1. มีคุณสมบัติแบบ asymmetric mapping

2. เพื่อกรอง bot ที่ฉลาดมากจนสามารถ reverse enumerating ออกไปได้ ผมก็อาจใส่ 'ความกำกวม' ลงไปเพิ่ม เหมือนอย่างที่เราเห็น GotoKnow แสดงตัวเลขเอียงโย้ไปเย้มาให้เราดูนั่นแหละ คือ bot ต้องฉลาดมากจนอ่านลายมือคนได้ จึงจะทะลวงปราการด่านนี้ (graphic mode) ได้ เพียงแต่ในที่นี้ เราจะใช้วิธี mapping ไปเป็น text mode แทน

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

ข้อ 2 กับ 3 นี่ ถ้ายุบรวมกันได้ ก็ยิ่งดี

ตัวอย่างของระบบ

ความเป็นไปได้มีหลากหลายมาก เขตสิ้นสุดอยู่ที่ระดับจินตนาการ 

ในที่นี้ผมขอยกตัวอย่างระบบแปลงตัวเลขเป็นข้อความ

ลองนึกดู 1021 แปลงเป็น 'หนึ่งพันยี่สิบเอ็ด'

เขียนโปรแกรมแปลงเลขเป็นข้อความ ไม่ยาก

แต่ทำกลับกันนี่ ผมคงหงอกไปสัก 1 เส้น

ยังครับ ยังไม่หนำใจ

เราจะแปลงต่อ เพิ่มความกำกวม (ความ 'เบลอ') จาก 'หนึ่งพันยี่สิบเอ็ด' ไปเป็น 'หึ่งฮันคี่หิบเห็ด" ก็ได้  หรือ "หนึ่งพานเย่เสบเก็ด" ก็ได้ (ตรงนี้ต้องไหว้วานครูภาษาไทยสอนเรื่องเสียงสูง เสียงกลาง เสียงต่ำ ให้หน่อยแหละ จะได้แปลงแล้วฟังเนียนหู ฟังปุ๊บนึกเป็นตัวเลขได้เลย)

ถ้าบรรลุถึงขั้นทำร้อยรอบ ไม่ซ้ำกันสักรอบนี่   ก็คงไม่เป็นเหยื่อให้เคี้ยวได้สะดวกปากเหมือนเมื่อก่อนอีกต่อไป bot รุ่นที่อีเดียตหน่อย อาจเดี้ยงตั้งแต่ยกแรก

ความ'เบลอ'นี่แหละ ที่จะปราบเซียนได้ เพราะปรกติแล้ว การเขียนโปรแกรมให้วิเคราะห์สถานการณ์ที่มีรูปแบบตายตัว ไม่ยากนัก แต่ถ้าเจอรูปแบบดิ้นได้ การตีความจะยากขึ้นนับสิบ ๆ เท่า

แต่ไม่ว่าผมใช้ระบบ text mode หรือ graphic mode จุดโหว่เบ้อเร้อก็ยังอยู่ เช่น หากใช้ระบบตัวเลข 5 หลัก เรารู้ว่ารูปแบบที่เป็นไปได้ของการผสมคำคือ 10 ยกกำลัง 5 หรือ 1 แสน ซึ่งตามหลักสถิติของการเดา ถ้าเดา 1 แสนครั้งในกรณีนี้ จะมีครึ่งนึงจะผ่านด่านนี้ได้ ! และถ้าเดาถึง 7 เท่าของค่าเฉลี่ย (นั่นคือ ในกรณีนี้เท่ากับ 7 แสนครั้ง) ในทางปฎิบัติเกือบจะเรียกได้ว่า ผ่านแน่ ๆ (เพราะจะมีโอกาสน้อยกว่า 1 ในพันล้านที่ผ่านไปไม่ได้ ตัวเลขนี้คือส่วนหางของโค้งแจกแจงปรกติตั้งแต่ Z = +6 ถึงอนันต์) ดังนั้น หากมันใช้วิธีโจมตีแบบหักโหมไปเรื่อย ๆ ยังไงก็ผ่านแน่สำหรับระบบตัวเลข 5 หลัก (ดังที่มีผู้ตั้งข้อสังเกตุไว้ว่ามันผ่านไปได้นิดหน่อยทั้งที่มีระบบป้องกัน ซึ่งทำให้สงสัยว่าเป็นฝีมือคน แต่ผมมองว่าอาจเป็นได้ทั้งคนหรือ bot)

ดังนั้น ทางออกคือแทนที่จะใช้ตัวเลขซึ่งแต่ละหลักเป็นไปได้แค่ 10 แบบ ก็อาจผสมตัวอักษรด้วย เช่น a-z, A-Z และเครื่องหมายต่าง ๆ ซึ่งสมมติว่าเพิ่มความหลากหลายขึ้นมาได้ได้เป็นหลักละ 70 แบบ ระบบรหัสผ่าน 5 หลัก ก็จะมีจำนวนรูปแบบการผสมคำกลายไปเป็น 70 ยกกำลัง 5 หรือประมาณ 1680 ล้านแบบ (ดีกว่าเดิมราวหมื่นเท่า) ซึ่งทำให้การโจมตีแบบหักโหมไม่คุ้มอีกต่อไป (จ้างคนแบบ outsource คุ้มกว่า)

(ถ้าเราเน้นใช้แต่ภาษาไทย ต่อไปการ outsource เพื่อแปะสแปมก็ต้องเบนเข้ามาในประเทศ เป็นการสร้างงานให้คนไทยที่ว่างงาน ผลประโยชน์เต็มเม็ดเต็มหน่วยก็จะตกกับคนไทย อือม์..ไม่เลวแฮะ เป็น win-win situation เชียวนะนี่)

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

ถ้า bot ยังทะลวงตรงนี้ไปได้ เราก็ยังสร้างระบบรองรับแบบสานเป็นตาข่าย ซึ่งอาจไม่เกี่ยวกับ user ทั่วไป เช่น ทำ content analysis แล้วลบอัตโนมัติ โดยยอมให้ข้อความดี ๆ ส่วนน้อยเสียหายอัตโนมัติ แลกกับการสลัดทิ้งจาก bot พวกนี้ เพราะสแปมมันมีลักษณะเฉพาะตัวคือชี้ออกไปหา web ข้างนอก ดังนั้น มีจะมี'ลักษณะเฉพาะตัว' เช่น มีคำว่า http://, [url, <a href ฯลฯ อยู่ชุกชุม ซึ่งสามารถเขียน script วิเคราะห์ว่าข้อความใดมีความหนาแน่นของชิ้นส่วนคำดังกล่าวชุกผิดปรกติ ก็โซ้ยแบบเงียบ ๆ ได้โดยระบบ

ระบบที่ว่านี้ ผมเชื่อว่าเป็นไปได้ และน่าจะพัฒนาได้เร็ว โดยปรับใช้จากสิ่งที่มีอยู่ในมือ เช่น โปรแกรมออกใบเสร็จที่แปลงตัวเลขเป็นข้อความ (ถ้าจำไม่ผิด เคยเห็น source code ของฟังก์ชันชื่อ Thaibaht แปะไว้ใน pantip อยู่เนือง ๆ) น่าจะปรับนิด ๆ หน่อย ๆ แล้วใส่ 'ลูกบ้าห้าร้อยจำพวก' ลงไปหน่อย เพื่อให้เกิดความ 'เบลอ' ผมเชื่อว่าจะเป็นระบบที่ใช้แก้ขัดได้ - อย่างน้อยก็สักระยะ 

อย่าลืมว่าควรเลี่ยงระบบที่มีแต่ตัวเลขน้อยกว่า 6 หลัก เพราะไม่ปลอดภัย ถ้าให้ดี ควรรองรับอักขระภาษาอังกฤษได้ (เผื่อคนไทยในต่างแดนไม่มีคีย์บอร์ดภาษาไทยใช้)