Passkey

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

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

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

ช่วงปี 2015 กูเกิลและ Yubico ร่วมกันพัฒนาโปรโตคอล U2F เพื่ออาศัยการยืนยันว่าผู้ใช้มีกุญแจ USB อยู่ในมือเป็นการล็อกอินขั้นที่สอง โดยจุดเด่นสำคัญคือเบราว์เซอร์จะส่งข้อมูล URL ของเว็บที่ล็อกอินไปยัง URL ด้วย ทำให้คนร้ายไม่สามารถใช้เว็บฟิชชิ่ง (phishing) เพื่อสร้างเว็บคล้ายกับเว็บจริงแล้วหลอกให้คนเหยื่อใส่รหัสผ่านหรือ OTP ได้อีกต่อไป เพราะกุญแจ U2F จะไม่ตอบหากพบว่ากุญแจไม่ตรงกับที่เคยล็อกอินไว้ก่อนหน้า โดยมาตรฐานนี้ดูแลโดยองค์กรกลางคือ FIDO Alliance

image.png

กุญแจ FIDO สามารถสร้างด้วยกุญแจ USB, หรือใช้ชิปเข้ารหัสในโทรศัพท์หรือพีซีก็ได้

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

Passkey เป็นการแก้ปัญหาความยุ่งยากลง เพราะแต่เดิมนั้นผู้ใช้มีความกังวลเรื่องกุญแจสูญหาย ไม่ได้พกกุญแจเมื่อต้องการใช้งาน หรือความน่ารำคาญสำคัญ คือกุญแจที่ต้องการใช้งานกลับไม่สามารถใช้งานกับเครื่องที่ต้องการล็อกอินได้ เพราะพอร์ตไม่ตรงกัน ตัวกุญแจอาจจะเป็น USB A ขณะที่เครื่องที่ต้องการล็อกอินกลับเป็นพอร์ต USB-C หรือ Lightning การใช้งานกุญแจ FIDO แบบ Bluetooth นั้นยุ่งยากและหลายครั้งอาจจะเชื่อมต่อลำบาก โดย Passkey เน้นการใช้โทรศัพท์ (หรืออาจจะเป็นแอปอื่น) เข้ามาทำหน้าที่แทนกุญแจ USB ใน FIDO/WebAuthn พร้อมกับปรับปรุง WebAuthn สองประการ

  1. เพิ่มการย้ายกุญแจข้ามอุปกรณ์ (key sync) จากเดิมที่กุญแจยืนยันตัวตนจะผูกกับชิปในอุปกรณ์สักชิ้น ไม่ว่าจะเป็นกุญแจ USB, โน้ตบุ๊ก, หรือโทรศัพท์มือถือ Passkey รองรับการซิงก์กุญแจข้ามอุปกรณ์ไปมา เช่น ผู้ใช้ iPhone สามารถล็อกอินผ่าน Passkey ด้วยโทรศัพท์เครื่องหนึ่ง และเมื่อซื้อ iPhone หรือ iPad มาใหม่ ก็ยังสามารถใช้ล็อกอินบัญชีเดิมได้ต่อไป เช่นเดียวกับผู้ใช้แอนดรอยด์ที่สามารถล็อกอินบัญชีเดิมได้ทุกครั้งที่เปิดใช้โทรศัพท์ด้วยบัญชีกูเกิลบัญชีเดิม
  2. เปิดทางให้ใช้โทรศัพท์ยืนยันตัวตนผู้ใช้บนพีซี เมื่อผู้ใช้ต้องการยืนยันตัวตนนอกแพลตฟอร์มที่ใช้เก็บกุญแจ Passkey โปรแกรมที่ต้องการการยืนยันตัวตนเช่นเบราว์เซอร์บนพีซี สามารถขอเชื่อมต่อกับอุปกรณ์ที่ใช้เก็บกุญแจ Passkey ได้

เมื่อเราใช้เบราเซอร์เข้าเว็บและล็อกอินบริการที่รองรับ WebAuthn เบราว์เซอร์ที่รองรับ Passkey จะให้เลือกว่าต้องการยืนยันตัวตนด้วยกุญแจ USB หรือใช้โทรศัพท์ หากเราเลือกใช้โทรศัพท์ เบราว์เซอร์จะแสดง QR ขึ้นมา และเมื่อใช้โทรศัพท์สแกน QR แล้ว โทรศัพท์และเบราว์เซอร์จะส่งข้อมูลผ่าน Bluetooth เพื่อยืนยันว่าอุปกรณ์ทั้งสองอยู่ใกล้ๆ กัน ไม่สามารถสแกน QR จากระยะไกลเพื่อล็อกอินได้ จากนั้นทั้งโทรศัพท์และเบราว์เซอร์จะเชื่อมต่อเข้าหา proxy ผ่านอินเทอร์เน็ตเปิด tunnel เชื่อมต่อถึงกันโดยตรง (ไม่สามารถส่งข้อมูลโดยตรงผ่าน Bluetooth ได้เพราะการเชื่อมต่อ Bluetooth นั้นซับซ้อนและหลายครั้งไม่เสถียร)

Untitled-Diagram-1.png

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

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

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

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

แนวการเขียนของคุณ lew เหมือนหนังสือบทความไอทีเมื่อ 20 ปีก่อน ซึ่งเกือบ ๆ จะเป็นหนังสือ text อยู่แล้ว

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

ตั้งแต่เขียนบล็อกมาสองปี mk มันเพิ่งเห็น lew ใช้ภาษาไทยดีขึ้นเมื่อวันเสาร์ที่ 17/12/2005 ที่ผ่านมา

เอามาจากอันนี้(ย่อหน้าที่ 2 จากท้ายของหัวข้อเกร็ดเล็กเกร็ดน้อย)

ส่วนตัวผมคิดว่าหลังๆ คุณ lew เขียนดีมากๆ แต่อ่านในฐานะ experienced software developer นะ (เหมิือนตบหัวแล้วลูบหลัง)

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

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

แอบเหนื่อยเหมือนกันนะเนี่ยถ้าจะทำจริงๆ ยิ่งต้องมาทำ proxy ให้ tunnel ตัว challenge ด้วยเนี่ย (ไม่รู้จะมี lib/tools ให้ใช้แบบตอนเรา endorse JWT รึเปล่านะ คิดว่าเดี๋ยวคงมี)

ยังไม่นับที่ตัว PC จะต้องรองรับ Bluetooth อีก (ผมไม่แน่ใจว่า desktop มีเป็นการทั่วไปแล้วหรือยังนะ ไม่ได้ใช้เครื่องใหม่ๆ มานานแล้วด้วย) แต่ก็เห็นด้วยว่าในท้ายที่สุดมันก็คงต้องมาทางนี้แหละ

เท่าที่ลองอ่านวิธีการ implement จาก https://passkeys.dev/ เหมือนว่าเราจะไม่ต้องทำ proxy เองนะครับ แค่เรียก navigator.credentials.get ใน browser แล้วรอมัน resolve อย่างเดียวก็จะได้ response ที่เอาไปเช็คกับ server ของเราได้เลยโดยไม่ต้องสนใจว่าจะมาจาก key บนเครื่องนั้นหรือมาจากเครื่องอื่นผ่าน proxy มา

มีอยู่แล้วครับ openssl หรือ libsodium
ปกติผมเห็นก็ใช้กันอยู่เท่านี้เสียส่วนใหญ่ (library อื่นก็ wrap 2 อันนี้อีกที)

คนทำ proxy เป็นผู้ผลิตเบราว์เซอร์ครับ ตัวโทรศัพท์เราเชื่อมต่อกับเบราว์เซอร์อยู่แล้ว

คนทำเว็บไม่ต้องสนใจว่าเป็นกุญแจต่อกับเครื่องโดยตรง หรือต่อผ่านอินเทอร์เน็ตซับซ้อนแค่ไหน

ก็ดีนะ สะดวกดี ไม่ต้องจำรหัสผ่านให้ยุ่งยาก บ้างครั้งตั้งยาวมาก ลืมไปก็มี

มีทั้งแบบที่ sync ได้กับ iCloud, Google, 1Password (ในอนาคต) แล้วก็มีแบบที่ผูกกับ hardware เอาออกมาไม่ได้หายแล้วหายเลยเช่น YubiKey ครับ Website สามารถเลือกได้ว่าจะบังคับให้ใช้แบบที่ผูกกับ hardware มั้ยหรือแบบ sync ได้ก็พอ

โดยทั่วไปแล้วเว็บรองรับกุญแจแทบไม่จำกัดครับ อย่าง Google Account นี่จะปิด SMS ได้ต้องใส่กุญแจอย่างน้อยสองอัน

แต่ใช่ครับ Passkey วิ่งไปกับ iCloud/Google Account ได้ ล็อกอินโทรศัพท์ใหม่ก็ได้ Passkey มาเลย

คำว่านานนี่แต่ละคนก็ไม่เท่ากันเท่าไหร่นะครับ 😅

ยังไม่ถึงปีนี่บางคนก็ว่านานแล้วเพราะก็ใช้จนชินแล้ว บางคนก็ เอ้า ก็เพิ่งมานี่นา