วันพฤหัสบดีที่ 8 ตุลาคม พ.ศ. 2558

Authentication vs Authorization ต่างกันยังไง

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

Authentication

Authentication คือการยืนยันตัวตน ก็คือการบอกว่าคนที่กำลังจะเข้ามาในระบบนั้นคือใคร และเป็นคนๆ นั้นจริงหรือเปล่า
หลาย ๆ คนคงคิดว่า แค่มี ID (Identification - วัตถุที่ระบุตัว เช่นบัตรประจำตัว) ก็น่าจะเรียกว่าเป็นตัวจริงได้แล้ว แต่บางครั้งคนที่มี ID ก็ไม่ใช่ตัวจริงเสมอไป เช่นผมอาจจะเอาบัตรประชาชนของพี่ชาย (ที่หน้าตาเหมือนกันยังกับแกะ) ไปใช้ทำอะไรอะไรในชื่อของพี่ชายก็ได้ตราบใดที่เขาไม่ทำ Authentication กับผม เพราะผมคงไม่รู้ว่าจะเอาอะไรไปยืนยันตัวว่าเป็นตัวจริง
การทำ Authentication นั้นส่วนใหญ่จะต้องใช้รหัสที่เป็นที่รู้กันแค่ระหว่างผู้ให้บริการกับผู้ใช้บริการ หรือที่เรียกกันว่ารหัสผ่าน (password) สำหรับระบบที่ต้องการความปลอดภัยสูงกว่านั้นจะมีการใช้สิ่งที่เรียกว่า 2-factor authentication หรือการยืนยันตัวโดยใช้วัตถุสองชนิด ที่เราพบกันบ่อย ๆ ก็คือ OTP (One Time Password) ที่ส่งมาทาง SMS หรือ E-Mail ส่วนระบบที่ต้องการความปลอดภัยมากกว่า OTP จะใช้ Authentication Token ซึ่งเป็นอุปกรณ์ขนาดเล็กที่ทำหน้าสร้างรหัสผ่านชุดที่สองและจะเปลี่ยนไปเรื่อย ๆ ตามเวลาที่กำหนด (ตัวที่ผมใช้อยู่จะเปลี่ยนรหัสไปทุก ๆ 1 นาทีครับ)
หลาย ๆ คนคงคิดว่า การใช้ลายนิ้วมือ หรือการแสกนลายม่านตานั้นเป็นการทำ Authentication ในความเป็นจริงทั้งสองอย่างนั้นเป็นแค่ ID ซึ่งใช้ระบุตัวตนเท่านั้น แต่ไม่สามารถยืนยันได้ สาเหตุเพราะว่าเราสามารถที่จะคัดลอกลายนิ้วมือได้ หรือแม้กระทั่งขโมยลูกตาได้ (โหดไหม :)) ดังนั้นมันจึงไม่ได้ปลอดภัยเท่าไหร่
สิ่งที่สำคัญสำหรับ Authentication คือการใช้วัตถุมากกว่า 1 ชิ้นในการระบุตัวครับ ซึ่งเราต้องมีทั้ง ID และวัตถุอื่น ๆ อย่างเช่นรหัสผ่าน เพราะแค่ ID นั้นไม่สามารถยืนยันได้ว่าเขาคนนั้นเป็นตัวจริงหรือเปล่า

Authorization

Authorization เป็นการมอบสิทธิให้กับผู้ใช้ คือก่อนที่ผู้ใช้สักคนจะทำอะไรได้จะต้องได้รับสิทธิในการกระทำนั้น ๆ ก่อนน่ะครับ ดังที่เราน่าจะเคยเห็นประตูที่เขียนว่า Authorized Person only หรือเฉพาะผู้ที่ได้รับอนุญาตเท่านั้น
โดยทั่วไปก่อนจะมอบสิทธิให้ใครได้เราต้องรู้ก่อนว่าคนคนนั้นคือใคร (ผ่านการทำ Authentication) แต่จริง ๆ ก่อนที่จะทำ Authentication เราสามารถมอบสิทธิบางอย่างให้ผู้ใช้ไปเลยก็ได้ ก็คือการมองว่าคนที่ยังไม่ได้ Authenticate นั้นเป็นคนที่มีสิทธิในการกระทำอะไรบางอย่างที่จำกัดมาก ๆ หรืออาจจะมองว่าเป็น Guest ก็ได้ แล้วหลังจากนั้นเมื่อผู้ใช้ยืนยันตัวเองแล้วค่อยมอบสิทธิระดับสูงกว่าให้กับคนคนนั้นต่อไป
ปล. สองคำนี้สามารถย่อสั้น ๆ เป็นการทำ Auth ได้ทั้งคู่ แปลกไหมครับ ? โดยทั่วไป Auth มักจะหมายถึง Authentication ครับ