Tags:
Node Thumbnail

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

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

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

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

alt=

กุญแจ 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=

เมื่อเชื่อมต่อได้แล้ว เบราว์เซอร์จะทำงานเหมือนมีกุญแจ 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
Contributor iPhone Red Hat Ubuntu
on 20 February 2023 - 10:10 #1277857 Reply to:1277851
itpcc's picture

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

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


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

By: itpcc
Contributor iPhone Red Hat Ubuntu
on 20 February 2023 - 10:13 #1277859
itpcc's picture

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

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


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

By: Iamz
Android Windows
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
Android Windows
on 20 February 2023 - 11:00 #1277872 Reply to:1277859

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

By: lew
Founder Jusci's WriterMEconomics Android
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
Contributor iPhone Android
on 21 February 2023 - 13:20 #1278022
zerocool's picture

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


That is the way things are.

By: Iamz
Android Windows
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
Founder Jusci's WriterMEconomics Android
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
Contributor iPhone Android
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
Contributor Windows Phone Windows
on 24 February 2023 - 23:59 #1278417 Reply to:1278410
hisoft's picture

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

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