Authentication: รับรองว่าของจริง

by lew
5 January 2014 - 20:32

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

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

กระบวนการรับรองตัวตนโดยทั่วไป มักจำแนกการรับรองออกเป็นสามประเภท

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

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

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

ในกระบวนการที่ต้องการความน่าเชื่อถือสูงเช่นกระบวนการทางการเงินในสหรัฐฯ จึงมีคำแนะนำให้สถาบันทางการเงินรับรองตัวตนต้องใช้กระบวนการรับรองสองประเภทขึ้นไป เรียกกระบวนการนี้ว่า multi-factor authentication

ข้อความลับ จุดเริ่มต้นแห่งการรับรอง

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

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

ข้อความลับอาจจะใช้งานเป็นกลุ่มในกรณีเช่น ทหารในสมัยก่อนอาจจะมีการตกลงล่วงหน้าว่าหากเจอทหารไม่ทราบฝ่ายให้ตะโกนข้อความลับ หากได้คำตอบที่ถูกต้องแสดงว่าเป็นพวกเดียวกัน ในกรณีของสงครามโลกครั้งที่สอง มีการกำหนดให้ตะโกนว่า "flash" หากเจอทหารไม่ทราบฝ่ายและหากได้ยินต้องตะโกนกลับไปว่า " thunder"

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

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

CHAP ใช้รหัสแต่ไม่ส่งรหัส

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

ความกังวลถึงการดักฟังเป็นความกังวลแรกๆ ของการเชื่อมต่ออินเทอร์เน็ต แนวทางแก้ปัญหาที่ออกแบบมาและยังนิยมใช้งานสูงจนทุกวันนี้คือกระบวนการ CAHP (Challenge-Handshake Authentication Protocol) กำหนดมาตรฐานไว้ใน RFC1994 กระบวนการนี้เซิร์ฟเวอร์จะสุ่มเอาข้อความที่ไม่ซ้ำกันเลยในแต่ละครั้ง ส่งไปยังผู้ใช้ เมื่อผู้ใช้ใส่รหัสผ่านคอมพิวเตอร์จะไม่ส่งรหัสผ่านกลับไปเซิร์ฟเวอร์โดยตรง แต่นำรหัสผ่านนั้นไปต่อกับค่าที่เซิร์ฟเวอร์สุ่มมาให้ เรียกว่าค่า challenge แล้วแฮชด้วย MD5 จากนั้นจึงส่งค่ากลับเซิร์ฟเวอร์ กระบวนการนี้ทำให้ระหว่างการรับรองตัวตน ไม่ต้องมีการส่งข้อความลับไปตรงๆ เลย และหากเซิร์ฟเวอร์ทำงานได้ถูกต้อง ข้อความ challenge ก็ควรเปลี่ยนไปทุกครั้ง ทำให้ข้อความที่ใช้รับรองตัวตนเปลี่ยนไปทุกครั้งเช่นกัน

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

SIM รับรองด้วยความลับระหว่างกัน

ขณะที่ CHAP ใช้เพื่อรับรองผู้ใช้ด้วยรหัสผ่าน ระบบโทรศัพท์มือถือเองก็มีกระบวนการรับรองตัว "ซิมการ์ด" ที่คล้ายกัน โดยซิมการ์ดนั้นจะมีค่าความลับเป็นตัวเลขขนาด 128 บิตอยู่ภายในเรียกว่า Ki ตัวเลขนั้นไม่มีช่องทางอ่านออกมาได้ตามปกติ

กระบวนการรับรองซิมการ์ดจะรับรองกับเซิร์ฟเวอร์ที่เรียกว่า authentication center (AuC) ที่จะเก็บค่าหมายเลข IMSI ที่ใช้ระบุตัวตนของซิมการ์ดทุกใบในโลก พร้อมกับค่า Ki ด้วยเช่นกัน

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

ในโลกความเป็นจริง COMP128 เวอร์ชั่นแรกกลับออกแบบมาอย่างหละหลวมและเป็นความลับไม่สามารถตรวจสอบจากภายนอกได้ แต่เมื่อโครงข่าย GSM ได้รับความนิยมสูงในเวลาไม่นาน นักวิจัยก็สามารถย้อนกลับฟังก์ชั่น COMP128 ได้สำเร็จ ส่งผลให้สามารถย้อนหาค่า Ki ได้ด้วย ภายหลังจึงต้องปรับปรุงเป็น COMP128v2 จึงแก้ปัญหาไปได้

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

กระบวนการในระบบ UMTS ที่ได้รับการพัฒนาจาก GSM จึงมีการปรับปรุงให้ตัวซิมการ์ดเองต้องรับรองตัวตนของเสาสัญญาณด้วยเช่นกัน โดยตัวเสาจะส่งค่า AUTN มาพร้อมกับตัวเลขสุ่ม ภายในซิมการ์ดจะสามารถคำนวณค่า AUTN ได้จากเลขสุ่มที่ให้มา หากคำนวณค่าได้ไม่ตรง ตัวซิมจะไม่ยอมปล่อยค่าแฮชออกมาและยกเลิกการเชื่อมต่อ

กระบวนการของ UMTS อาจจะเปรียบเทียบคล้ายกับกระบวนการของ MasterCard SecureCode ที่ทั้งสองฝั่งต้องรับรองตัวตนของกันและกัน ก่อนจะเริ่มดำเนินการใดๆ ต่อไป

โทเค็นรับรองได้เพราะมีสิ่งรับรอง

กระบวนการรับรองในกรณีที่เราไม่รู้จักกันมาก่อน ในชีวิตประจำวัน เรามักจะรับรองตัวตนกันด้วย "สิ่งรับรอง" หรือโทเค็น (token) โดยสิ่งรับรองเหล่านี้ต้องมีความสามารถที่จะรับรองได้ว่าผู้ที่ถือมันเป็นตัวตนที่อ้างมาจริง ในกรณีของไทยนั้นเราคงใช้บัตรประชาชนกันเป็นเรื่องปกติ

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

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

ในระบบเซิร์ฟเวอร์ในองค์กรขนาดใหญ่ หรือกระทั่งเกมออนไลน์หลายๆ เกม มักมี "พวงกุญแจ" ที่เก็บค่าความลับเอาไว้ภายในชิปที่ยากต่อการอ่านค่าออกมา เราเรียกพวงกุญแจเหล่านี้ว่าฮาร์ดโทเค็น (hard token) โดยภายในเป็นนาฬิกาที่คำนวณค่า ขณะที่กูเกิลเลือกใช้ซอฟต์แวร์ที่ชื่อว่า Google Authenticator แล้วรับค่าที่เป็นความลับผ่านการอ่าน QR-code เมื่อตอนลงทะเบียนครั้งแรกเอาไว้ ซอฟต์แวร์แบบนี้เรียกว่าซอฟต์โทเค็น (soft token) มันจะทำให้ โทรศัพท์มือถือ (หรืออุปกรณ์อื่นๆ) กลายเป็นเครื่องรับรองตัวตนของเรา เมื่อเราล็อกอิน แทนที่จะบริการจะถามเพียงรหัสผ่าน ก็จะถามค่าที่ได้รับจากโทเค็นเหล่านี้เพิ่มเติม หากเราใส่ค่าจากโทเค็นได้ถูกต้องก็แสดงว่าเรา "มี" เครื่องรับรองตัวตนนี้อยู่กับตัว

PKCS รับรองได้เพราะความลับอยู่กับเรา

กระบวนการรับรองตัวตนที่ได้รับความนิยมสูงในระดับองค์กรอีกอย่างหนึ่งคือการรับรองตัวตนผ่านโครงสร้างพื้นฐานกุญแจสาธารณะ (public-key infrastructure - PKI)

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

การถือกุญแจลับและใบรับรองนั้นใบรับรองต้องถูกเซ็นลายเซ็นดิจิตอล (ซึ่งก็คือการเข้ารหัสค่าแฮชของไฟล์ด้วยกุญแจลับ) ด้วยหน่วยงานรับรอง (certification authority - CA) ที่เชื่อถือได้ สำหรับองค์กรทั่วไป ทางหน่วยงานอาจจะสร้าง CA ของตัวเองขึ้นมาใช้งาน หรืออาจจะใช้หน่วยงานภายนอกก็ได้ หากสร้าง CA ขึ้นมาใช้งานเอง ทางหน่วยงานก็มีหน้าที่ต้องกระจายใบรับรองของ CA ให้กับเครื่องคอมพิวเตอร์ทุกเครื่อง โดยต้องระวังว่าใบรับรองนี้จะไม่ถูกปลอมแปลงในระหว่างทาง

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

เซิร์ฟเวอร์รู้ว่าผู้ใช้เป็นตัวจริงเพราะผู้ใช้ "มี" กุญแจลับของใบรับรองที่ได้รับการรับรองโดยหน่วยงานออกใบรับรอง

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

API ของการเรียกใช้สมาร์ตการ์ดเพื่อการรับรองตัวตนนี้มีมาตรฐานเรียกว่า PKCS#11 ปัจจุบันมีฮาร์ดแวร์หลากหลายรูปแบบ บางครั้งเป็นสมาร์ตการ์ดแบบเดียวกับบัตรประชาชนที่เราเห็นกัน แต่บางครั้งก็เป็น USB รูปร่างคล้ายแฟลชไดร์ฟสามารถเสียบเครื่องที่ไม่มีเครื่องอ่านสมาร์ตการ์ดได้ทันที

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

บัตรเครดิต เริ่มต้นความปลอดภัยด้วยการ "มอง"

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

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

กระบวนการรับรองว่ามีการใช้บัตรจริงเพื่อสั่งจ่ายเงินมีเพิ่มเติมมาเรื่อยๆ เช่น การเพิ่มหมายเลข CVV (card verification number) ในสมัยหนึ่งมีการเพิ่มเลขนี้ไว้ในแถบแม่เหล็ก ทำให้อ่านจากภายนอกไม่เห็น (ในสมัยนั้นเครื่องอ่านบัตรยังมีราคาแพงและหาไม่ได้ทั่วไป) โดยตัวเลขต้องได้จากการรูดแถบแม่เหล็กเท่านั้น (บางรายเรียกว่า CVV1) แต่ก็ไม่ประสบความสำเร็จนักเพราะเครื่องอ่านบัตรสามารถทำได้จากอุปกรณ์ที่หาได้ทั่วไปหากผู้ต้องการอ่านบัตรมีความรู้พอ ตัวเลขอีกชุดหนึ่งคือ CVV หลังบัตรที่มีตัวเลขสามหลักเพิ่มเติมเพื่อรับรองว่ามีบัตรจริงด้วยการดูหมายเลขบัตรด้านหลัง แม้จะดูไม่มีประโยชน์นักเพราะผู้ปลอมบัตรต้องการเพียงแค่เห็นบัตรสักครั้งก็สามารถปลอมแปลงได้แล้ว แต่ CVV หลังบัตรออกแบบเพื่อการใช้งานผ่านอินเทอร์เน็ตเป็นหลัก โดยมาตรฐานการจัดเก็บข้อมูลระบุไม่ให้เว็บไซต์ของผู้ค้าเก็บหมายเลข CVV นี้เอาไว้ในฐานข้อมูล ดังนั้นแม้ข้อมูลหมายเลขบัตรจะหลุดไป แฮกเกอร์ก็ไม่สามารถใช้งานหมายเลขบัตรเครดิตได้ ปัญหาคือในการใช้งานจริง ธนาคารผู้ออกบัตรหลายรายไม่ใช้หมายเลข CVV นี้ และผู้ค้าหลายรายก็ไม่ใช้งานหมายเลข CVV ด้วยเช่นกัน

ปัญหาการฉ้อโกงบัตรเครดิตสร้างปัญหาเรื่อยมา แต่ทุกวันนี้บัตรส่วนมากเป็นบัตรแบบมีชิปภายใน บัตรมีชิปที่ธนาคารออกให้เหล่านี้มักเป็นไปตามมาตรฐาน EMV (ตามชื่อบริษัท Europay, MasterCard, และ Visa ที่ร่วมสร้างมาตรฐาน) กระบวนเข้ารหัสทำให้ EMV ได้เปรียบกระบวนการรับรองบัตรแบบเดิมๆ มาก (อ่านเพิ่มเติม)

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

กระบวนการเพิ่มเติมของมาตรฐาน EMV มีสามขั้นตอนหลัก

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

กระบวนการ EMV มีกระบวนการที่ซับซ้อนและตัวเลือกให้ใช้งานต่างกันไปตามแต่ธนาคารในแต่ละประเทศอีกมาก ในบทความนี้จะพูดคร่าวๆ เพียงเท่านี้

Software Authentication รับรองว่ารันของจริง

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

ลินุกซ์: เชื่อใจที่มา

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

เมื่อเราติดตั้งลินุกซ์ จะมีกุญแจสาธารณะของผู้ผลิตอยู่ในเครื่องอยู่แล้ว โดยวางไว้ที่ /etc/apt/trusted.gpg เมื่อเราต้องการติดตั้งซอฟต์แวร์ เราไม่ต้องดาวน์โหลดจากเซิร์ฟเวอร์ของทาง Debian โดยตรงแต่สามารถดาวน์โหลดจากแหล่งอื่นที่เราสะดวกได้เสมอ รวมถึงการติดตั้งจากแผ่นซีดี ในแหล่งดาวน์โหลดจะต้องมีไฟล์ค่าแฮชไฟล์ที่เก็บค่าแฮชของไฟล์ติดตั้งและลายเซ็นดิจิตอลวางไว้คู่กับตัวไฟล์ติดตั้งเสมอ ตัวอย่างเช่น ใน Debian 5.0 ที่ mirror1.ku.ac.th จะมีไฟล์ Release.gpg เซ็นกำกับรายชื่อไฟล์ของแต่ละสถาปัตยกรรมเอาไว้ เมื่อเราต้องการดาวน์โหลดไฟล์จากสถาปัตยกรรม i386 ระบบปฏิบัติการจะดาวน์โหลดไฟล์ Contents-i386.gz ซึ่งจะมีค่าแฮชของไฟล์ Packages.gz อีกครั้ง โดยในไฟล์นี้จะมีค่าแฮชของไฟล์ติดตั้งทุกไฟล์เอาไว้ในตัว การเก็บค่าแฮชเป็นลูกโซ่เช่นนี้ทำให้ไฟล์รับรองเพียงไฟล์เดียวสามารถรับรองไฟล์ติดตั้งทุกไฟล์ของระบบได้

วินโดวส์: รับรองชื่อผู้ผลิต

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

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

หลังจากนั้นเมื่อติดตั้งซอฟต์แวร์ ตัวติดตั้งของไมโครซอฟท์จะแสดงชื่อผู้ผลิตขึ้นมาให้ผู้ใช้รับรู้ว่ากำลังติดตั้งจากผู้ผลิตรายใด โดยยกเว้นในบางกรณีของผู้ผลิตที่ได้รับรองจากหน่วยงานรับรองของไมโครซอฟท์เอง (Windows signing authority) หรือผู้ผลิตที่อยู่ในรายชื่อที่ได้รับความเชื่อถือ (trusted publisher) ก็จะติดตั้งได้เลย

นอกจากนี้ยังมีผู้ผลิตที่อยู่ในรายชื่อ "ไม่น่าเชื่อถือ" ที่วินโดวส์จะไม่ยอมติดตั้งเลยโดยไม่ถามผู้ใช้แต่จะล็อกความพยายามติดตั้งจากผู้ผลิตเหล่านี้เอาไว้ในระบบแทน

Android: ขอให้เหมือนเดิม

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

การรับรองตัวตนผู้ผลิตซอฟต์แวร์ของแอนดรอยด์จึงต้องการเพียงใบรับรองที่รับรองตัวเอง (self-signing certificate) เมื่อติดตั้งซอฟต์แวร์ลงในเครื่องครั้งแรก แอนดรอยด์จะจำใบรับรองไว้ และการอัพเดตทุกครั้งจะต้องใช้ใบรับรองเดิม ไม่เช่นนั้นจะติดตั้งไม่ได้ ด้วยแนวทางเช่นนี้ใบรับรองจะต้องมีอายุอย่างน้อย 25 ปี เพื่อให้แน่ใจว่าใบรับรองจะไม่หมดอายุเสียก่อนที่แอพพลิเคชั่นจะเลิกใช้งานไป

นอกจากใบรับรองผู้ผลิตทั่วไปแล้ว แอนดรอยด์ยังใช้ใบรับรองพิเศษชุดหนึ่งที่วางไว้ในช่วงการคอมไพล์เพื่อใช้เป็นใบรับรองระบบ (system certificate) หากมีแอพพลิเคชั่นใดเซ็นด้วยใบรับรองเหล่านี้จะสามารถขอสิทธิพิเศษเพิ่มเติม เช่น การรีบูตเครื่อง, การติดตั้งและถอดแอพพลิเคชั่นโดยไม่ต้องแจ้งผู้ใช้ ฯลฯ

ChromeOS: รับรองทุกครั้งที่บูต

นอกจากกระบวนการรับรอง "แอพพลิเคชั่น" ที่เราพบทั่วไปแล้ว คอมพิวเตอร์สมัยใหม่แทบทั้งหมดจะมีกระบวนการรับรองซอฟต์แวร์แทบทุกขั้นตอน โดยผู้ผลิตฮาร์ดแวร์จะมีเฟิร์มแวร์ที่ฝังอยู่ในส่วนที่ดัดแปลงแก้ไขได้ยาก เช่น ฝังอยู่ในซีพียู จากนั้นเฟิร์มแวร์นี้รันโปรแกรมเพื่อรับรองเฟิร์มแวร์ภายนอกที่สามารถอัพเดตแก้ไขได้ สุดท้ายเฟิร์มแวร์จึงไปรับรองระบบปฎิบัติการในดิสก์อีกครั้ง

คอมพิวเตอร์ยุคใหม่ในกลุ่มนี้ เช่น แอนดรอยด์เองก็มี bootloader ที่สามารถรับรองรอมที่จะมาติดตั้งได้ (ทำให้นักพัฒนาต้องการเครื่องแบบ unlocked bootloader) เครื่องเกมคอนโซลยุคใหม่ทั้งหมด ในสมัยเครื่อง Xbox รุ่นแรกนั้นเฟิร์มแวร์เริ่มต้นถูกฝังไว้ในชิป north bridge ที่เชื่อมต่อกับซีพียูด้วยบัส 700MHz โดยทางไมโครซอฟท์เชื่อว่าคนทั่วไปจะไม่สามารถดักฟังบัสความเร็วสูงเช่นนั้นได้ แต่นักวิจัยจากมหาวิทยาลัยก็สามารถดักฟังได้สำเร็จ และรอมเริ่มต้นการบูตก็หลุดออกมานำไปสู่การแฮก Xbox ในที่สุด (ดูเพิ่มเติมเรื่องระบบยืนยันเฟิร์มแวร์ของ Xbox ใน GoogleTechTalk)

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

เมื่อเฟิร์มแวร์รับรองสำเร็จจะเริ่มรัน เฟิร์มแวร์แบบอ่าน/เขียน เองจะมีกุญแจสาธารณะอื่นๆ (เช่น ของกูเกิล) เพื่อใช้รับรองเคอร์เนลในดิสก์ เมื่อรับรองสำเร็จแล้วก็จะถือว่าการบูตปลอดภัยดี

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

ส่งท้าย

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

บทความนี้ไม่พูดถึงอีกสองส่วนได้แก่ การรับรองเว็บ ที่พูดถึงไปแล้วในบท Asymmetric และ Biometric ที่พูดถึงในบท Identification

Blognone Jobs Premium