วันพฤหัสบดีที่ 22 พฤษภาคม พ.ศ. 2568

ย้อนรอยประวัติศาสตร์ปัญญาประดิษฐ์ จากจุดเริ่มต้นสู่วันที่เราคุ้นเคย

AI-Chip
Photo by Igor Omilaev on Unsplash

ในทุกวันนี้เราใช้งาน ปัญญาประดิษฐ์ (artificial intelligence) หรือ AI กันจนอาจจะกลายเป็นเรื่องปกติในชีวิตไปแล้วนะครับ #พฤหัสจัดAI วันนี้ก็เลยอยากจะมาสรุปประวัติความเป็นมาของ AI ให้ฟังกัน ว่ามันมีที่มาอย่างไร เริ่มมาตั้งแต่ปีไหน และวิวัฒนาการชีวิตของ AI เป็นอย่างไร ซึ่งก็ต้องบอกว่าวัฏจักรชีวิตของ AI ก็เหมือนชีวิตคนแหละครับ คือมีช่วงรุ่งเรืองช่วงตกต่ำ ไปดูกันเลยดีกว่าครับ


📜 ยุคเริ่มต้น (1950-1960)

พวกเราอาจจะรู้สึกว่าเราได้ใช้ AI อย่างจริงๆ จังๆ มาเมื่อไม่กี่ปีมานี้ แต่จริงๆ แล้ว จุดเริ่มต้นของ AI เกิดในช่วงทศวรรษ 1950-1960 ครับ

Alan-Turing
Alan Turing 
https://commons.wikimedia.org/wiki/File:Code_breaker_-_Alan_Turing%27s_Life_and_Legacy_at_London_Science_Museum_(Ank_Kumar)_04.jpg


  • ปี 1950: Alan Turing ผู้ที่ได้ชื่อว่าเป็นบิดาแห่งวิทยาการคอมพิวเตอร์สมัยใหม่ (และใช่แล้วครับ คนเดียวกับในหนังเรื่อง Imitation Game นั่นแหละครับ) ได้เสนอ "Turing Test" ในบทความชื่อ "Computing Machinery and Intelligence" เพื่อทดสอบว่าเครื่องจักรคิดได้เหมือนคนหรือไม่
  • ปี 1956: John McCarthy ได้บัญญัติคำว่า "Artificial Intelligence" ขึ้นอย่างเป็นทางการในการประชุมวิชาการที่ Dartmouth ซึ่งเป็นจุดกำเนิดอย่างเป็นทางการของ AI ในฐานะสาขาวิชาการ

หลังจากการประชุมที่ Dartmouth นักวิจัยก็มีความกระตือรือร้น และความคาดหวังว่าการทำให้เครื่องจักรคิดได้เหมือนคนน่าจะอยู่ไม่ไกลเกินไป มีการพัฒนาระบบที่ใช้สัญลักษณ์และการให้เหตุผลเชิงตรรกะ ซึ่งนำไปสู่การสร้างโปรแกรมอย่าง Logic Theorist ซึ่งสามารถพิสูจน์ทฤษฎีบททางคณิตศาสตร์ได้ และยังมีการพัฒนาภาษาโปรแกรมสำหรับงานด้าน AI คือภาษา LISP (List Processing) ขึ้นอีกด้วย

✨ ยุคทองยุคแรก (1960-1970)

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

❄️ ฤดูหนาวอันหนาวเหน็บ (AI Winter, 1970-1980)

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

🌱 ยุคแห่งการฟื้นฟูและวางรากฐาน (1980-2010)

AI กลับมาอีกครั้งในช่วงปี 1980-2010 โดยเทคโนโลยีที่นำความสนใจด้าน AI กลับมาก็เช่น:

  • ระบบผู้เชี่ยวชาญ (Expert systems): ระบบที่ให้เครื่องจักรจำลองความรู้ของผู้เชี่ยวชาญเฉพาะด้าน เช่น การวินิจฉัยโรค และการให้คำปรึกษาด้านการเงิน
  • การเรียนรู้ของเครื่อง (Machine learning): แนวคิดที่จะให้คอมพิวเตอร์เรียนรู้เองจากข้อมูล โดยไม่ต้องเขียนอัลกอริทึมที่ชัดเจนให้มันทำตามเหมือนการเขียนโปรแกรมแบบดั้งเดิม อัลกอริทึมที่ช่วยให้เครื่องคอมพิวเตอร์เรียนรู้ด้วยตัวเองก็เช่น ต้นไม้ตัดสินใจ (decision tree) และ Support Vector Machine (SVM) ซึ่งทั้งสองอัลกอริทึมนี้มีบทบาทอย่างมากในช่วงปี 1990-2000 
  • ความก้าวหน้าของเครือข่ายประสาทเทียม (neural network): คือการจำลองแนวคิดของการสื่อสารระหว่างเครือข่ายประสาทในสมองของคนมาใช้งานกับเครื่อง จริงๆ ต้องบอกว่าแนวคิดนี้เริ่มต้นในช่วงทศวรรษ 1950 ก็คือช่วงแรกของ AI แล้วนะครับ และก็มีพัฒนาการมาเรื่อยๆ แต่สุดท้ายด้วยข้อจำกัดด้านพลังการประมวลผลของคอมพิวเตอร์ ก็ทำให้งานวิจัยนี้หยุดชะงักไปในช่วง AI Winter จุดเด่นของโครงข่ายประสาทเทียมในยุคนี้ก็คือการพัฒนาอัลกอริทึม backpropagation (แม้แนวคิดจะมีมาก่อนหน้านั้น แต่มาได้รับความนิยมและนำไปใช้อย่างแพร่หลายในช่วงนี้) ที่ช่วยให้การฝึกฝนเครือข่ายประสาทเทียมมีประสิทธิภาพมากขึ้น

🚀 ยุคทองใหม่ (ยุคเฟื่องฟู, 2010-ปัจจุบัน)

จากช่วงปี 2010 ถึงปัจจุบัน จัดเป็นยุคทองใหม่ หรือยุคเฟื่องฟูของ AI เหตุผลหลักก็คือความก้าวหน้าอย่างมากของอินเทอร์เน็ตและข้อมูลขนาดใหญ่ (big data) ซึ่งเอื้อประโยชน์อย่างมากในการพัฒนาสภาพแวดล้อมในการพัฒนา AI โดยเฉพาะอย่างยิ่งในสาขา การเรียนรู้เชิงลึก (deep learning) ซึ่งเป็นสาขาย่อยของการเรียนรู้ของเครื่อง

Alpha-go-Rag
AlphaGo Computer Rack
https://commons.wikimedia.org/wiki/File:AlphaGo_computer_rack.jpg

การเรียนรู้เชิงลึกใช้เครือข่ายประสาทเทียมเชิงลึก (deep learning neural network) หลักๆ ก็คือการใช้เครือข่ายประสาทเทียมที่มีหลายชั้น ในการเรียนรู้และสร้างปัญญาจากข้อมูลจำนวนมหาศาล ตัวอย่างความสำเร็จที่สำคัญในยุคนี้ก็เช่น:

  • ImageNet Challenge: การแข่งขันที่แสดงให้เห็นถึงความสามารถของการใช้การเรียนรู้เชิงลึกในการจำแนกรูปภาพได้แม่นยำกว่ามนุษย์
  • AlphaGo: โปรแกรม AI ที่พัฒนาโดย DeepMind (บริษัทในเครือ Google) สามารถเอาชนะแชมป์โลกในเกมโกะ (Go) ซึ่งเป็นเกมกระดานที่มีความซับซ้อนสูง
  • AI สร้างสรรค์ (Generative AI หรือ Gen AI): ตัวแบบ (model) AI ที่สามารถช่วยสร้างสรรค์สิ่งใหม่ๆ ตามที่ผู้ใช้ป้อนคำสั่งในรูปแบบภาษาที่คนเราใช้กันในชีวิตประจำวัน โดยสามารถสร้างสรรค์ได้ทั้งข้อความ รูปภาพ เสียง และแม้แต่วิดีโอ ซึ่งในปัจจุบันคงไม่มีใครไม่รู้จัก Gen AI กันนะครับ  ตัวอย่างที่เราได้รู้จักใช้งานกันอย่างกว้างขวางเป็นตัวแรกก็คือ ChatGPT จาก OpenAI (จริง ๆ มันมีตัวแบบอื่น ๆ มาก่อนหน้านี้นะครับ แต่ขอยังไม่พูดถึงในบทความนี้แล้วกัน) และตามมาด้วย Gemini (ชื่อที่เปิดตัวคือ Bard) ของ Google และในปัจจุบันก็มี Gen AI ที่ถูกพัฒนาขึ้นมาเต็มไปหมด โดยอาจจะเจาะจงความเก่งเฉพาะด้านขึ้นมาอย่างการสร้างภาพ สร้างวิดีโอ หรือช่วยทำการวิจัยเป็นต้น

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

🔮 อนาคตของ AI จะเป็นอย่างไร?

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

(ใครที่สนใจว่า AI แบ่งเป็นกี่ประเภท นอกจาก ASI แล้วมีอะไรอีก ผมจะเขียนถึงในบทความต่อๆ ไปแล้วกันนะครับ)

driverless-car
รถไร้คนขับ
https://commons.wikimedia.org/wiki/File:Waymo_Chrysler_Pacifica_in_Los_Altos,_2017.jpg

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

  • ปัญหาด้านจริยธรรม: เช่น การที่ให้ AI เขียนบทความวิชาการให้ทั้งบทความ เพื่อใช้ขอจบการศึกษา ขอตำแหน่งทางวิชาการ เหมาะสม และยอมรับได้หรือไม่ และการลอกเลียนแบบผลงานด้วย AI (AI plagiarism) ซึ่งเป็นประเด็นที่ถกเถียงกันในปัจจุบัน
  • ความปลอดภัย: เช่น การผู้ไม่ประสงค์ดีนำเทคโนโลยีอย่าง Deepfake เพื่อสร้างวิดีโอปลอมๆ ของคนคนหนึ่ง แล้วเอาวิดีโอนี้ไปหลอกลวงคนที่รู้จักคนนั้น
  • การละเมิดความเป็นส่วนตัว: เช่น เทคโนโลยีรู้จำใบหน้า ซึ่งถึงแม้จะเป็นประโยชน์ในหลายกรณี เช่นการตามจับคนร้าย แต่ก็ละเมิดความเป็นส่วนตัวของผู้ที่สัญจรอยู่ในบริเวณนั้นด้วย
  • ผลกระทบต่อตลาดแรงงาน: อันนี้ก็แน่นอนว่าจะมีตำแหน่งงานบางอย่างที่จะถูกแทนที่ด้วย AI ดังนั้นคนเราก็ต้องปรับตัว พัฒนาทักษะความสามารถไปยังตำแหน่งงานอื่นที่ AI แทนที่ไม่ได้ หรือต้องเรียนรู้ที่จะเป็นผู้ควบคุมการใช้งาน AI

📝 สรุป

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

แล้วพบกันใหม่ใน #พฤหัสจัดAI ครับ


วันพุธที่ 21 พฤษภาคม พ.ศ. 2568

วิธีที่เร็วที่สุดในการระบายสีกราฟ

graph-coloring
ภาพจาก Quanta Magazine โดย Steve Nadis

ทีมวิจัยนานาชาติจากสถาบันการศึกษาต่าง ๆ ได้พัฒนาอัลกอริทึมที่ปรับความเร็วในการระบายสีกราฟให้เหมาะสม โดยมีเป้าหมายเพื่อให้ได้เวลาที่น้อยที่สุดตามทฤษฎี 

นักวิจัยมุ่งเน้นไปที่การระบายสีหลายเส้นพร้อมกัน พวกเขาใช้เทคนิคการสุ่มเพื่อ "เตรียม (prime)" กราฟก่อน โดยระบายสีส่วนใหญ่ของกราฟก่อน แล้วจึงระบายสีเส้นที่เหลือที่ยังไม่ระบายสีในเวลาใกล้เคียงกัน

อ่านข่าวเต็มได้ที่: Quanta Magazine โดย Steve Nadis


เพิ่มเติมเสริมข่าว: การระบายสีกราฟ (Graph Coloring) ในทฤษฎีกราฟ คือ กระบวนการกำหนด "สี" (ซึ่งอาจเป็นตัวเลขหรือสัญลักษณ์อื่นใดก็ได้) ให้กับองค์ประกอบของกราฟ โดยทั่วไปมักจะหมายถึงการกำหนดสีให้กับจุดยอด (vertices) ของกราฟ โดยมีเงื่อนไขสำคัญคือ จุดยอดที่อยู่ติดกัน (adjacent vertices) จะต้องมีสีที่แตกต่างกัน จำนวนสีน้อยที่สุดที่สามารถนำมาใช้ในการระบายสีกราฟตามเงื่อนไขนี้ได้ เรียกว่า จำนวนสีของกราฟ (chromatic number)

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

อัลกอริทึมในข่าวนี้จะทำให้กระบวนการระบายสีกราฟทำได้เร็วขึ้น ทำให้การนำไปประยุกต์ในด้านต่าง ๆ ที่กล่าวมาแล้วทำได้มีประสิทธิภาพมากขึ้น

รู้จักกับ "แฮช" (Hash) หัวใจสำคัญของบล็อกเชน

blockchain

สวัสดีครับ กลับมาพบกันอีกครั้งกับ #พุธขุดบล็อกเชน หลังจากบทความแรกที่เราได้อธิบายไปแล้วว่าบล็อกเชนคืออะไร และได้กล่าวถึงว่า “แฮช” (hash) เป็นส่วนสำคัญที่ทำให้การแก้ไขข้อมูลในบล็อกเชนแทบเป็นไปไม่ได้ ในบทความที่สองนี้ เราจะมาทำความรู้จักแฮชกันให้ลึกซึ้งยิ่งขึ้นครับว่ามันคืออะไรกันแน่

แฮช (Hash) คืออะไร?

แฮช หรือถ้าจะเรียกเต็ม ๆ ก็คือ แฮชรหัสลับ (cryptographic hash) เป็นหนึ่งในหัวข้อสำคัญของ วิทยาการรหัสลับ (cryptography) แนวคิดของแฮชสามารถเปรียบเทียบได้กับแนวคิดของลายนิ้วมือครับ คงทราบกันแล้วนะครับว่าคนแต่ละคนจะมีลายนิ้วมือไม่ซ้ำกัน แนวคิดของแฮชก็คือการสร้าง "ลายนิ้วมือ" ให้กับข้อมูลดิจิทัล

นั่นคือการสร้างฟังก์ชันที่เรียกว่า ฟังก์ชันแฮชรหัสลับ (cryptographic hash function) ซึ่งจะทำหน้าที่แปลงข้อมูลที่มีขนาดใด ๆ ก็ตาม (เช่น ข้อความยาว 20,000 ตัวอักษร, 100 ตัวอักษร หรือแม้แต่ไฟล์รูปภาพ) ให้เป็นค่าที่มีความยาวคงที่อีกค่าหนึ่ง (เช่น มีความยาว 64 ตัวอักษร) ค่าที่ถูกแปลงมานี้ เราเรียกว่า ค่าแฮช (hash value) หรือเรียกสั้น ๆ ว่า แฮช

คุณสมบัติสำคัญคือ:

  • ข้อมูลที่เหมือนกัน เมื่อผ่านฟังก์ชันแฮชเดียวกัน จะได้ ค่าแฮชเหมือนกันเสมอ
  • ข้อมูลที่ต่างกัน มี โอกาสน้อยมาก ที่จะได้ค่าแฮชที่เหมือนกัน หรือที่เรียกว่า การชนกัน (collision) ของแฮช ซึ่งตรงนี้ก็คล้ายกับลายนิ้วมือของคนครับ คือยังมีความเป็นไปได้ที่คนสองคนจะมีลายนิ้วมือตรงกัน แต่โอกาสนั้นก็จะน้อยมาก ๆ

ตัวอย่างของฟังก์ชันแฮชรหัสลับ (ในบทความนี้จะขอเรียกสั้น ๆ ว่าฟังก์ชันแฮช) ที่ใช้กันแพร่หลายก็เช่น:

  • SHA-256 (Secure Hash Algorithm 256-bit): ใช้ในบิตคอยน์ (Bitcoin)
  • Keccak-256: ใช้ในอีเธอเรียม (Ethereum)

ตัวเลข "256" ในที่นี้คือจำนวนบิตของค่าแฮชที่ได้ครับ หมายความว่าไม่ว่าข้อมูลต้นฉบับจะมีขนาดเท่าใด ทั้งสองฟังก์ชันนี้จะสร้างค่าแฮชที่มีขนาด 256 บิตเสมอ หรือถ้าแปลงเป็นไบต์ก็คือ 32 ไบต์ (โดย 1 ไบต์ มี 8 บิต)

คุณสมบัติสำคัญของฟังก์ชันแฮช

ข้อกำหนดของฟังก์ชันแฮชที่ดี มีดังนี้ครับ:

  1. ทำงานในทิศทางเดียว (One-way function): สามารถแปลงข้อมูลต้นฉบับไปเป็นค่าแฮชได้ง่าย แต่ต้องไม่สามารถแปลงค่าแฮชกลับไปเป็นข้อมูลเดิมได้ (หรือทำได้ยากมากในทางปฏิบัติ)
  2. ทนทานต่อการชนกัน (Collision resistant): ทำให้มีความเป็นไปได้น้อยที่สุดที่ข้อมูลซึ่งแตกต่างกันจะให้ค่าแฮชเดียวกัน
  3. การเปลี่ยนแปลงเพียงเล็กน้อยส่งผลกระทบมาก (Avalanche effect): การเปลี่ยนแปลงข้อมูลต้นฉบับเพียงเล็กน้อย จะต้องได้ค่าแฮชที่แตกต่างกันอย่างสิ้นเชิง ทำให้ไม่สามารถคาดเดารูปแบบได้
  4. คำนวณได้เร็ว (Fast computation): การคำนวณค่าแฮชจากข้อมูลต้นฉบับจะต้องทำได้อย่างรวดเร็ว

ตัวอย่างการทำงานของแฮช และเลขฐานสิบหก

เพื่อให้เข้าใจมากขึ้น มาดูตัวอย่างกันครับ คำว่า "hello" เมื่อนำมาผ่านฟังก์ชัน SHA-256 จะได้ผลลัพธ์ในรูปเลขฐานสิบหกจำนวน 64 หลักดังนี้:

0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

เรานิยมแสดงค่าแฮชในรูปเลขฐานสิบหก (hexadecimal) เพราะมันสั้นกว่าการแสดงออกมาเป็นเลขฐานสอง (ที่เป็น 0 กับ 1 จำนวน 256 ตัว) ครับ โดย 0x ข้างหน้าเป็นเพียงสัญลักษณ์ที่บอกว่านี่คือเลขฐานสิบหก ไม่ได้นับรวมในค่าแฮช

สำหรับคนที่ไม่คุ้นกับเรื่องเลขฐาน สรุปง่าย ๆ แบบนี้ครับ:

  • เลขฐานสิบหกมีสัญลักษณ์ที่แตกต่างกัน 16 ตัว ได้แก่ 0-9 และ a-f
  • 0-9 ก็เหมือนเลขฐานสิบที่เราใช้กันอยู่
  • a แทน 10, b แทน 11, c แทน 12, d แทน 13, e แทน 14, และ f แทน 15
  • เลขฐานสิบหกหนึ่งหลักจะใช้เนื้อที่ในการเก็บข้อมูลสี่บิต
  • จากค่าแฮชข้างบน มีเลขฐานสิบหกทั้งหมด 64 หลัก นั่นคือ หรือ 32 ไบต์ อย่างที่กล่าวมาแล้วนั่นเองครับ

ถ้าใครไม่เข้าใจเรื่องบิตไบต์ ไม่เป็นไรครับ จะคิดง่าย ๆ ว่า ค่าแฮชที่ได้จาก SHA-256 หรือ Keccak-256 จะมีความยาว 64 "ตัวอักษร" ก็ได้ โดยตัวอักษรเหล่านั้นจะเป็นได้แค่ 0-9 และ a-f

คราวนี้ลองเปลี่ยนข้อมูลเพียงเล็กน้อย จากคำว่า "hello" เป็น "helo" (เอาตัว 'l' ออกไปหนึ่งตัว) ค่าแฮชที่ได้จาก SHA-256 จะเป็นดังนี้ครับ:

0xf4e454f802b88d2f64168ff1742e8cf413fd677d38b87cbefb45821f8981b912

จะเห็นได้ว่าค่าแฮชเปลี่ยนไปอย่างมาก และไม่มีรูปแบบที่คาดเดาได้ ทั้ง ๆ ที่ข้อมูลต้นฉบับเปลี่ยนไปเพียงนิดเดียว นี่คือคุณสมบัติ Avalanche Effect ที่กล่าวถึงข้างต้นครับ

อยากลองเล่นดูไหม? ถ้าใครอยากลองทดลองสร้างค่าแฮชด้วย SHA-256 สามารถเข้าไปที่เว็บไซต์ https://academo.org/demos/SHA-256-hash-generator/ สำหรับทดลองได้  ถ้าลองป้อนคำว่า "hello" หรือ "helo" เข้าไป จะได้ค่าแฮชเดียวกับตัวอย่างแน่นอน เพราะข้อมูลเหมือนกันย่อมได้แฮชเดียวกันเสมอ


sha-256-demo-with-hello
ตัวอย่างการทำงานของ SHA-256 Hash Generator 

แฮชในชีวิตประจำวัน: เรื่องของรหัสผ่าน

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

หลายคนอาจคิดว่าเซิร์ฟเวอร์ที่เราใช้งานนั้นเก็บรหัสผ่านของเราไว้ตรง ๆ แต่ในความเป็นจริง (สำหรับระบบที่ปลอดภัย) เขาเก็บค่าแฮชของรหัสผ่านของเราครับ เวลาเราป้อนรหัสผ่านเพื่อล็อกอิน ระบบจะ:

  1. นำรหัสผ่านที่เราป้อนไปผ่านฟังก์ชันแฮช
  2. นำค่าแฮชที่ได้ไปเปรียบเทียบกับค่าแฮชที่เก็บไว้ในฐานข้อมูลบนเซิร์ฟเวอร์
  3. ถ้าค่าแฮชตรงกัน แสดงว่าเราป้อนรหัสผ่านถูก (ข้อมูลเหมือนกันจะได้แฮชเหมือนกันเสมอ)
  4. ถ้าค่าแฮชไม่ตรงกัน แสดงว่ารหัสผ่านผิด (ข้อมูลต่างกันจะได้ค่าแฮชที่ต่างกัน)

การที่เซิร์ฟเวอร์ไม่เก็บรหัสผ่านของเราไว้ตรง ๆ ก็เพื่อเพิ่มความปลอดภัยครับ เพราะถ้าฐานข้อมูลที่เก็บรหัสผ่านเกิดถูกแฮก สิ่งที่ผู้ไม่หวังดีได้ไปก็คือค่าแฮช ซึ่งจะเพิ่มความยากในการแกะรหัสผ่าน เพราะอย่างที่กล่าวไป ฟังก์ชันแฮชทำงานทางเดียว ไม่สามารถย้อนกลับจากค่าแฮชไปเป็นข้อมูลต้นทางได้ แฮกเกอร์จะต้องใช้วิธีทดลองเดาสุ่ม (เช่น brute-force หรือ dictionary attack) แล้วดูว่าได้ค่าแฮชตรงกันหรือไม่

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

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

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

แฮช (Hash) กับการทำงานของบล็อกเชน

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

ถ้าใครอ่านบทความแรกแล้วคงพอจำกันได้นะครับว่า ภาพรวมแนวคิดของบล็อกเชนก็คือการเก็บข้อมูลใน บล็อก (block) และแต่ละบล็อกจะ เชื่อมโยงกัน (chain) ด้วยแฮช ขอเอารูปเก่ามาลงอีกทีนะครับ


ภาพรวมโครงสร้างบล็อกเชน


จากรูป จะเห็นว่าแต่ละบล็อกแบ่งออกเป็นสองส่วนหลัก:

  1. ส่วนหัวของบล็อก (Block Header): เก็บข้อมูลเกี่ยวกับบล็อกนั้น ๆ
  2. ส่วนข้อมูล (Block Data): เก็บรายการธุรกรรม (transactions)

ในส่วนหัวของบล็อก (ซึ่งจริง ๆ มีข้อมูลมากกว่านี้) ที่เราจะพิจารณาตอนนี้คือ:

  • หมายเลขบล็อก (Block #): ลำดับของบล็อกในเชน
  • ค่าแฮชของบล็อกก่อนหน้า (Previous Hash / Prev Hash): ค่าแฮชของบล็อกที่อยู่ติดกันก่อนหน้าในเชน
  • ค่าแฮชของบล็อกปัจจุบัน (Hash): ค่าแฮชของข้อมูลทั้งหมดในบล็อกนี้ (ทั้งส่วนหัวและส่วนข้อมูล)

โดยบล็อกแรกสุดในบล็อกเชน (หมายเลข 0) เราจะเรียกว่า บล็อกต้นกำเนิด (Genesis Block) ในกรณีของ Genesis Block ค่าในฟิลด์ "แฮชของบล็อกก่อนหน้า" จะเป็นค่าเฉพาะ เช่น ค่า 0 ทั้งหมด (ทุกบิตในฟิลด์นี้มีค่าเป็น 0) เพราะไม่มีบล็อกใดอยู่ก่อนหน้ามัน

การเชื่อมโยงบล็อกด้วยแฮช

ให้สังเกตว่า:

  • บล็อกที่ 1 จะมีค่าในฟิลด์ "แฮชของบล็อกก่อนหน้า" เป็นค่าแฮชของบล็อก 0
  • บล็อกที่ 2 จะมีค่าในฟิลด์ "แฮชของบล็อกก่อนหน้า" เป็นค่าแฮชของบล็อกที่ 1
  • ถ้ามีบล็อกที่ 3 ก็จะเก็บค่าแฮชของบล็อกที่ 2 ในฟิลด์นี้ และต่อเนื่องไปเรื่อย ๆ เมื่อมีบล็อกใหม่ถูกเพิ่มเข้ามาในเชน

การทำเช่นนี้ส่งผลสำคัญอย่างไร? มันทำให้การเปลี่ยนแปลงข้อมูลในบล็อกใด ๆ ก็ตาม มีผลกระทบกับบล็อกที่ตามมาทั้งหมดในเชนทันที! ตัวอย่างเช่น:

  1. ถ้ามีการพยายามแก้ไขข้อมูลในบล็อกที่ 1
  2. ค่าแฮชของบล็อกที่ 1 จะต้องถูกคำนวณใหม่ (เพราะข้อมูลเปลี่ยน ค่าแฮชก็เปลี่ยน)
  3. เพื่อให้บล็อกที่ 1 ยังคงเชื่อมต่อกับบล็อกที่ 2 อย่างถูกต้อง ค่าแฮชใหม่ของบล็อกที่ 1 นี้ จะต้องถูกนำไปเก็บในฟิลด์ "แฮชของบล็อกก่อนหน้า" ของบล็อกที่ 2
  4. แต่เมื่อข้อมูลในส่วนหัวของบล็อกที่ 2 (คือ Prev Hash) เปลี่ยนไป ก็ต้องคำนวณค่าแฮชของบล็อกที่ 2 ใหม่อีกครั้ง
  5. และก็ต้องนำค่าแฮชใหม่ของบล็อกที่ 2 นี้ ไปใส่ในฟิลด์ "แฮชของบล็อกก่อนหน้า" ของบล็อกที่ 3... ทำแบบนี้ต่อไปเรื่อย ๆ จนสุดปลายของเชน

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

โพรโทคอลฉันทามติ (Consensus Protocol) และความปลอดภัย

ยิ่งไปกว่านั้น โพรโทคอลฉันทามติ (Consensus Protocol) ซึ่งเป็นกลไกที่ใช้ในการทำให้ข้อมูลในบล็อกเชนตรงกันในทุกเครื่องคอมพิวเตอร์ที่อยู่ในเครือข่าย (เช่น Proof-of-Work ที่บิตคอยน์ใช้) ยังทำให้การหาค่าแฮชของบล็อกใหม่ (ที่มีคุณสมบัติตามที่โพรโทคอลกำหนด) ใช้เวลาและความพยายามในการคำนวณมากขึ้นไปอีก ผลก็คือ ในทางปฏิบัติแทบไม่มีความเป็นไปได้เลยที่จะมีการแก้ไขข้อมูลที่อยู่ในบล็อกเชนได้ และต่อให้มีใครสามารถแก้ข้อมูลในเชนของตัวเองได้สำเร็จ ก็แทบไม่มีประโยชน์ เพราะข้อมูลนั้นถูกเก็บไว้หลายชุดในเครือข่าย การตรวจสอบยืนยันก็จะทำได้อย่างรวดเร็ว เพียงแค่ดูจากค่าแฮชของบล็อกล่าสุดก็เห็นได้แล้วว่าเชนไหนที่มีข้อมูลไม่ตรงกับเครื่องส่วนใหญ่ในเครือข่าย

(รายละเอียดของ Proof-of-Work จะมีการพูดถึงในบทความต่อ ๆ ไปนะครับ ถ้าใครสนใจก็รออ่านได้ แต่ถ้าไม่สนใจก็ไม่จำเป็นต้องรู้รายละเอียด แค่เข้าใจว่าการเชื่อมโยงบล็อกด้วยแฮชนั้นทำไปเพื่ออะไรก็เพียงพอแล้ว)

Merkle Tree: เพิ่มความมั่นใจและความโปร่งใส

นอกจากนี้ ตามแนวคิดของบล็อกเชน ยังมีการนำแฮชมาใช้อย่างชาญฉลาดอีกขั้น คือการสร้างแฮชของรายการธุรกรรมทุกตัวที่ถูกส่งเข้ามา และยังเอาแฮชของรายการธุรกรรมที่ได้ มาสร้างเป็นโครงสร้างแบบต้นไม้แล้วแฮชต่อเนื่องกันขึ้นไปอีกชั้น ๆ วิธีนี้เรียกว่าการสร้าง Merkle Tree

โดยสุดท้ายแล้วที่ราก (root) ของต้นไม้ (tree) นี้ ที่เรียกว่า Merkle Root ก็จะคือ ค่าแฮชค่าเดียวที่เป็นตัวแทนรายการธุรกรรมทั้งหมดในบล็อกนั้น ค่า Merkle Root นี้จะถูกเก็บไว้ในส่วนหัวของบล็อก


Merkle-Tree-Example
ตัวอย่าง Merkle Tree

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

(รายละเอียดของ Merkle Tree ก็จะมีการพูดถึงในบทความต่อ ๆ ไปเช่นกันครับ และเช่นเดียวกัน ถ้าใครไม่สนใจรายละเอียดก็ไม่จำเป็นต้องรู้ แค่เข้าใจว่า Merkle Tree นี้สนับสนุนแนวคิดของบล็อกเชนที่ว่า "แก้ยาก แต่ตรวจสอบได้ง่าย" ก็พอแล้วครับ)

สรุป

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

หวังว่าจะได้ประโยชน์จากบทความนี้นะครับ แล้วพบกันใหม่บทความต่อไปของ #พุธขุดบล็อกเชน ครับ!