Tags:
Node Thumbnail

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

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

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

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

alt="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 นั้นซับซ้อนและหลายครั้งไม่เสถียร)

alt="Untitled-Diagram-1.png"

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

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

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

Get latest news from Blognone

Comments

By: paween_a
Android
on 20 February 2023 - 09:41 #1277851
paween_a's picture

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

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

By: whitebigbird
Contributor
on 20 February 2023 - 09:53 #1277854 Reply to:1277851
whitebigbird's picture

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

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

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

By: itpcc
ContributoriPhoneRed HatUbuntu
on 20 February 2023 - 10:10 #1277857 Reply to:1277851
itpcc's picture

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

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


บล็อกส่วนตัวที่อัพเดตตามอารมณ์และความขยัน :P

By: itpcc
ContributoriPhoneRed HatUbuntu
on 20 February 2023 - 10:13 #1277859
itpcc's picture

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

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


บล็อกส่วนตัวที่อัพเดตตามอารมณ์และความขยัน :P

By: Iamz
AndroidWindows
on 20 February 2023 - 10:41 #1277868 Reply to:1277859

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

By: rattananen
AndroidWindows
on 20 February 2023 - 11:00 #1277872 Reply to:1277859

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

By: lew
FounderJusci's WriterMEconomicsAndroid
on 20 February 2023 - 11:51 #1277886 Reply to:1277859
lew's picture

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

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


lewcpe.com, @wasonliw

By: tom789
Windows Phone
on 21 February 2023 - 12:18 #1278006

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

By: zerocool
ContributoriPhoneAndroid
on 21 February 2023 - 13:20 #1278022
zerocool's picture

แล้วถ้าโทรศัพท์หายทำอย่างไรครับ ? หรือว่าเราก็ backup passkey ไปกับ account ของโทรศัพท์อีกที เช่น iCloud, Google


That is the way things are.

By: Iamz
AndroidWindows
on 21 February 2023 - 13:24 #1278024 Reply to:1278022

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

By: pd2002 on 23 February 2023 - 13:09 #1278305 Reply to:1278024

1Password ใช้ได้แล้วครับ (ผมใช้กับ ebay อยู่)

By: lew
FounderJusci's WriterMEconomicsAndroid
on 21 February 2023 - 20:37 #1278088 Reply to:1278022
lew's picture

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

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


lewcpe.com, @wasonliw

By: zerocool
ContributoriPhoneAndroid
on 23 February 2023 - 16:25 #1278329 Reply to:1278022
zerocool's picture

ขอบคุณทุกท่านที่มาช่วยตอบครับ


That is the way things are.

By: hidap on 24 February 2023 - 21:14 #1278410

มันมีตั้งนานแล้วไม่ใช้หรอครับAppleก็ใช้มาตลอด

By: hisoft
ContributorWindows PhoneWindows
on 24 February 2023 - 23:59 #1278417 Reply to:1278410
hisoft's picture

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

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