ปัญหา
ฟิชชิงเป็นปัญหาด้านความปลอดภัยอันดับต้นๆ ในเว็บ โดย 81% ของบัญชีที่เกี่ยวข้องกับการแฮ็ก การละเมิดในปีที่ผ่านมาใช้ประโยชน์จากรหัสผ่านที่ไม่รัดกุมหรือถูกขโมย ทั้งอุตสาหกรรม การตอบสนองต่อปัญหานี้คือการตรวจสอบสิทธิ์แบบหลายปัจจัย การใช้งานต่างๆ จะแยกกระจัดกระจายและส่วนใหญ่ยังไม่สามารถจัดการกับฟิชชิงได้ เราทำงานร่วมกับ FIDO Alliance มาตั้งแต่ 2013 และหลังจากนั้นไม่นาน W3C ได้นำมาตรฐาน โปรโตคอลป้องกันการฟิชชิงที่เว็บแอปพลิเคชันใดๆ สามารถใช้ได้
WebAuthn คืออะไร
Web Authentication API มอบบริการ การเข้าถึง Authenticator ที่ใช้สื่อกลางผ่าน User Agent ซึ่งมัก โทเค็นฮาร์ดแวร์ที่เข้าถึงผ่าน USB/BLE/NFC หรือโมดูลที่สร้างขึ้นใน แพลตฟอร์ม – เพื่อจุดประสงค์ในการสร้างและท้าทายระดับแอปพลิเคชัน ข้อมูลเข้าสู่ระบบคีย์สาธารณะ (eTLD+k) ซึ่งช่วยให้ใช้งานได้หลายกรณี เช่น
- 2FA ที่มีอุปสรรคและการป้องกันฟิชชิงในระดับต่ำ (สำหรับใช้ร่วมกับ รหัสผ่าน)
- การให้สิทธิ์ซ้ำที่อิงตามข้อมูลไบโอเมตริกโดยไม่ต้องใช้รหัสผ่าน
- 2FA ที่ใช้ง่ายและป้องกันฟิชชิงในระดับต่ำไม่มีรหัสผ่าน (ที่จะใช้ สำหรับบัญชีที่ไม่มีรหัสผ่าน)
API กำลังอยู่ในระหว่างการดำเนินการในเบราว์เซอร์หลักๆ และมีจุดประสงค์เพื่อ ทั้งการปรับ UI ที่พบให้ง่ายขึ้นเมื่อต้องยืนยันตัวตนของคุณทางออนไลน์ ช่วยลดฟิชชิงได้อย่างมาก
WebAuthn ได้ขยาย API การจัดการข้อมูลเข้าสู่ระบบและเพิ่ม
ประเภทข้อมูลเข้าสู่ระบบที่ชื่อว่า PublicKeyCredential
WebAuthn แอ็บสแตรกต์
การสื่อสารระหว่างเบราว์เซอร์และ Authenticator และช่วยให้ผู้ใช้ทำสิ่งต่อไปนี้ได้
- สร้างและลงทะเบียนข้อมูลเข้าสู่ระบบคีย์สาธารณะสำหรับเว็บไซต์
- ตรวจสอบสิทธิ์ของเว็บไซต์โดยการพิสูจน์ความเป็นเจ้าของเว็บไซต์ที่เกี่ยวข้อง
Authenticator เป็นอุปกรณ์ที่สามารถสร้างคู่คีย์ส่วนตัว/คีย์สาธารณะและรวบรวม ความยินยอม สามารถได้รับความยินยอมให้ลงนามด้วยการแตะเพียงครั้งเดียว สำเร็จแล้ว อ่านลายนิ้วมือหรือวิธีอื่นก็ได้ตราบใดที่เป็นไปตาม FIDO2 (เรามีโปรแกรมการรับรองสำหรับ Authenticator โดย FIDO Alliance) Authenticator สามารถผสานรวมไว้ใน แพลตฟอร์ม (เช่น เครื่องสแกนลายนิ้วมือบนสมาร์ทโฟน) หรือเชื่อมต่อผ่าน USB, บลูทูธพลังงานต่ำ (BLE) หรือ Near Field Communication (NFC)
วิธีการทำงาน
การสร้างคู่คีย์และการลงทะเบียนผู้ใช้
เมื่อผู้ใช้ต้องการลงทะเบียนข้อมูลเข้าสู่ระบบเว็บไซต์ (ซึ่งอ้างอิงถึงโดย WebAuthn เป็น "ผู้ที่พึ่งพาอาศัย"):
- ฝ่ายที่พึ่งพาอาศัยสร้างความท้าทาย
- ฝ่ายที่เกี่ยวข้องขอให้เบราว์เซอร์ผ่าน API เครื่องมือจัดการข้อมูลเข้าสู่ระบบเพื่อ สร้างข้อมูลเข้าสู่ระบบใหม่สำหรับผู้ที่เกี่ยวข้อง โดยระบุอุปกรณ์ เช่น อุปกรณ์มีการตรวจสอบสิทธิ์ผู้ใช้ของตนเองหรือไม่ (ด้วยข้อมูลไบโอเมตริก ฯลฯ)
- หลังจาก Authenticator ได้รับความยินยอมจากผู้ใช้ Authenticator จะสร้าง คู่คีย์และแสดงผลคีย์สาธารณะและเอกสารรับรองที่ลงนามซึ่งไม่บังคับไปยัง เว็บไซต์ของคุณ
- และเว็บแอปส่งต่อคีย์สาธารณะไปยังเซิร์ฟเวอร์
- เซิร์ฟเวอร์จะจัดเก็บคีย์สาธารณะที่คู่กับข้อมูลประจำตัวของผู้ใช้เพื่อจดจำ ข้อมูลเข้าสู่ระบบสำหรับการตรวจสอบสิทธิ์ในอนาคต
let credential = await navigator.credentials.create({ publicKey: {
challenge: new Uint8Array([117, 61, 252, 231, 191, 241, ...]),
rp: { id: "acme.com", name: "ACME Corporation" },
user: {
id: new Uint8Array([79, 252, 83, 72, 214, 7, 89, 26]),
name: "jamiedoe",
displayName: "Jamie Doe"
},
pubKeyCredParams: [ {type: "public-key", alg: -7} ]
}});
การตรวจสอบสิทธิ์ผู้ใช้
เมื่อเว็บไซต์ต้องการหลักฐานว่าได้โต้ตอบกับเว็บไซต์ ผู้ใช้:
- ผู้ที่พึ่งพาอาศัยสร้างความท้าทายและจัดเตรียมรายการให้เบราว์เซอร์ ของข้อมูลเข้าสู่ระบบที่ลงทะเบียนกับผู้ใช้ และยังช่วยระบุได้ว่า ค้นหาการรับรอง เช่น Authenticator ในตัวหรือ เชื่อมต่อภายนอกผ่าน USB, BLE และอื่นๆ
- เบราว์เซอร์จะขอให้ Authenticator ลงชื่อในคำถาม
- ถ้า Authenticator มีข้อมูลเข้าสู่ระบบอย่างใดอย่างหนึ่งอยู่ Authenticator แสดงการยืนยันที่ลงนามแล้วไปยังเว็บแอปหลังจากได้รับความยินยอมจากผู้ใช้
- เว็บแอปส่งต่อการยืนยันที่ลงชื่อไปยังเซิร์ฟเวอร์สำหรับฝ่ายที่เกี่ยวข้อง เพื่อยืนยัน
- เมื่อเซิร์ฟเวอร์ยืนยันเรียบร้อยแล้ว ระบบจะพิจารณาขั้นตอนการตรวจสอบสิทธิ์ สำเร็จ
let credential = await navigator.credentials.get({ publicKey: {
challenge: new Uint8Array([139, 66, 181, 87, 7, 203, ...]),
rpId: "acme.com",
allowCredentials: [{
type: "public-key",
id: new Uint8Array([64, 66, 25, 78, 168, 226, 174, ...])
}],
userVerification: "required",
}});
ลองใช้ WebAuthn ด้วยตนเองที่ https://webauthndemo.appspot.com/.
สิ่งที่จะเกิดขึ้น
Chrome 67 เบต้าจะมาพร้อมกับการสนับสนุนสำหรับ navigator.credentials.get({publicKey: ...})
และ navigator.credentials.create({publicKey:... })
และเปิดใช้งาน
U2F/CTAP 1 Authenticator ผ่านการส่งผ่าน USB บนเดสก์ท็อป
รุ่นที่กำลังจะเปิดตัวจะเพิ่มการรองรับการรับส่งข้อมูลมากขึ้น เช่น BLE, NFC และ โปรโตคอลสาย CTAP 2 รุ่นใหม่ นอกจากนี้ เรายังกำลังสร้างขั้นตอนขั้นสูงขึ้นด้วย เปิดใช้โดย CTAP 2 และ WebAuthn เช่น โปรแกรมตรวจสอบสิทธิ์ที่ป้องกันด้วย PIN บัญชีบางส่วน (แทนการพิมพ์ชื่อผู้ใช้หรือรหัสผ่าน) และ การลงทะเบียนลายนิ้วมือ
โปรดทราบว่า Microsoft Edge ยังรองรับ API นี้ และ Firefox ก็รองรับ WebAuthn ด้วย Firefox 60
แหล่งข้อมูล
เรากำลังจัดทำเอกสารที่มีรายละเอียดเพิ่มเติม
- WebAuthnDemo ที่ใช้ตัวอย่าง 2 ฝ่าย การใช้งาน
- การวิเคราะห์ WebAuthn บทความโดย Adam Langley
เซสชัน "มีอะไรใหม่เกี่ยวกับการลงชื่อสมัครใช้และลงชื่อเข้าใช้บนเว็บ" ในงาน Google I/O 2018 เกี่ยวกับ WebAuthn