การเปิดใช้การตรวจสอบสิทธิ์แบบเข้มงวดด้วย WebAuthn

ปัญหา

ฟิชชิงเป็นปัญหาด้านความปลอดภัยอันดับต้นๆ ในเว็บ โดย 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 และช่วยให้ผู้ใช้ทำสิ่งต่อไปนี้ได้

  1. สร้างและลงทะเบียนข้อมูลเข้าสู่ระบบคีย์สาธารณะสำหรับเว็บไซต์
  2. ตรวจสอบสิทธิ์ของเว็บไซต์โดยการพิสูจน์ความเป็นเจ้าของเว็บไซต์ที่เกี่ยวข้อง

Authenticator เป็นอุปกรณ์ที่สามารถสร้างคู่คีย์ส่วนตัว/คีย์สาธารณะและรวบรวม ความยินยอม สามารถได้รับความยินยอมให้ลงนามด้วยการแตะเพียงครั้งเดียว สำเร็จแล้ว อ่านลายนิ้วมือหรือวิธีอื่นก็ได้ตราบใดที่เป็นไปตาม FIDO2 (เรามีโปรแกรมการรับรองสำหรับ Authenticator โดย FIDO Alliance) Authenticator สามารถผสานรวมไว้ใน แพลตฟอร์ม (เช่น เครื่องสแกนลายนิ้วมือบนสมาร์ทโฟน) หรือเชื่อมต่อผ่าน USB, บลูทูธพลังงานต่ำ (BLE) หรือ Near Field Communication (NFC)

วิธีการทำงาน

การสร้างคู่คีย์และการลงทะเบียนผู้ใช้

เมื่อผู้ใช้ต้องการลงทะเบียนข้อมูลเข้าสู่ระบบเว็บไซต์ (ซึ่งอ้างอิงถึงโดย WebAuthn เป็น "ผู้ที่พึ่งพาอาศัย"):

  1. ฝ่ายที่พึ่งพาอาศัยสร้างความท้าทาย
  2. ฝ่ายที่เกี่ยวข้องขอให้เบราว์เซอร์ผ่าน API เครื่องมือจัดการข้อมูลเข้าสู่ระบบเพื่อ สร้างข้อมูลเข้าสู่ระบบใหม่สำหรับผู้ที่เกี่ยวข้อง โดยระบุอุปกรณ์ เช่น อุปกรณ์มีการตรวจสอบสิทธิ์ผู้ใช้ของตนเองหรือไม่ (ด้วยข้อมูลไบโอเมตริก ฯลฯ)
  3. หลังจาก Authenticator ได้รับความยินยอมจากผู้ใช้ Authenticator จะสร้าง คู่คีย์และแสดงผลคีย์สาธารณะและเอกสารรับรองที่ลงนามซึ่งไม่บังคับไปยัง เว็บไซต์ของคุณ
  4. และเว็บแอปส่งต่อคีย์สาธารณะไปยังเซิร์ฟเวอร์
  5. เซิร์ฟเวอร์จะจัดเก็บคีย์สาธารณะที่คู่กับข้อมูลประจำตัวของผู้ใช้เพื่อจดจำ ข้อมูลเข้าสู่ระบบสำหรับการตรวจสอบสิทธิ์ในอนาคต
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} ]
}});

การตรวจสอบสิทธิ์ผู้ใช้

เมื่อเว็บไซต์ต้องการหลักฐานว่าได้โต้ตอบกับเว็บไซต์ ผู้ใช้:

  1. ผู้ที่พึ่งพาอาศัยสร้างความท้าทายและจัดเตรียมรายการให้เบราว์เซอร์ ของข้อมูลเข้าสู่ระบบที่ลงทะเบียนกับผู้ใช้ และยังช่วยระบุได้ว่า ค้นหาการรับรอง เช่น Authenticator ในตัวหรือ เชื่อมต่อภายนอกผ่าน USB, BLE และอื่นๆ
  2. เบราว์เซอร์จะขอให้ Authenticator ลงชื่อในคำถาม
  3. ถ้า Authenticator มีข้อมูลเข้าสู่ระบบอย่างใดอย่างหนึ่งอยู่ Authenticator แสดงการยืนยันที่ลงนามแล้วไปยังเว็บแอปหลังจากได้รับความยินยอมจากผู้ใช้
  4. เว็บแอปส่งต่อการยืนยันที่ลงชื่อไปยังเซิร์ฟเวอร์สำหรับฝ่ายที่เกี่ยวข้อง เพื่อยืนยัน
  5. เมื่อเซิร์ฟเวอร์ยืนยันเรียบร้อยแล้ว ระบบจะพิจารณาขั้นตอนการตรวจสอบสิทธิ์ สำเร็จ
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

แหล่งข้อมูล

เรากำลังจัดทำเอกสารที่มีรายละเอียดเพิ่มเติม

เซสชัน "มีอะไรใหม่เกี่ยวกับการลงชื่อสมัครใช้และลงชื่อเข้าใช้บนเว็บ" ในงาน Google I/O 2018 เกี่ยวกับ WebAuthn