วันนี้เราอยู่บน Product Hunt! แสดงความคิดเห็น
Authenticator 1.16.0 มาแล้ว ดูสิ่งที่เปลี่ยนแปลง
ภาพรวมเชิงเทคนิคสำหรับผู้ตรวจสอบความปลอดภัย ทุกอย่างในหน้านี้ตรวจสอบย้อนกลับไปที่ซอร์สโค้ดได้ รวมถึงส่วนที่ไม่เข้าข้างเราเอง ซึ่งเราเลือกจะเขียนไว้แทนที่จะตัดทิ้ง
ส่วนขยายนี้เป็นส่วนขยาย Chrome แบบ Manifest V3 ที่สร้างรหัส TOTP ในเครื่องด้วย OTPAuth การสร้างรหัส การจัดเก็บบัญชี และการเข้ารหัสบัญชีไม่ต้องพึ่งแบ็กเอนด์ใด ๆ และไม่มีบัญชีผู้ใช้ เรามีเซิร์ฟเวอร์เพียงตัวเดียวคือ api.authenticator.sh สำหรับแพ็กเกจฟรีและ Pro (อธิบายไว้ด้านล่าง) และเซิร์ฟเวอร์นี้ไม่เคยได้รับกุญแจลับ ชื่อบัญชี ชื่อบริการ หรือรหัสใด ๆ
เซิร์ฟเวอร์นั้นไม่มีวัสดุกุญแจของบัญชีใครเลย ไม่มีการฝากกุญแจ และไม่มีเส้นทางกู้คืนที่เราควบคุม หากผู้ใช้ลืมรหัสผ่านและทำรหัสกู้คืนหาย เราก็ช่วยอะไรไม่ได้ ซึ่งเป็นไปตามที่ออกแบบไว้
การป้องกันด้วยรหัสผ่านเป็นตัวเลือกเสริมและปิดไว้ตั้งแต่ต้น เมื่อเปิดใช้งาน:
ข้อมูลไม่เคยถูกเข้ารหัสด้วยกุญแจที่ได้จากรหัสผ่านโดยตรง ระเบียนต่าง ๆ ถูกเข้ารหัสด้วยกุญแจหลักแบบสุ่ม ส่วนผลลัพธ์จาก PBKDF2 ทำหน้าที่ห่อหุ้มกุญแจหลักนั้นเท่านั้น ผลที่ตามมามีสองข้อ และสำคัญทั้งคู่:
เมื่อเปิดการป้องกันด้วยรหัสผ่าน ระเบียนบัญชีทั้งหมดจะถูกเข้ารหัส ยกเว้นตัวระบุและลายนิ้วมือข้อมูล รวมถึงชื่อบริการด้วย โปรไฟล์ที่ถูกขโมยไปจึงไม่เปิดเผยว่าผู้ใช้มีบัญชีอยู่กับบริการใดบ้าง เมื่อเปิดใช้งาน ส่วนขยายจะเข้ารหัสระเบียน ตรวจสอบด้วยการถอดรหัสแล้วเทียบกัน จากนั้นจึงลบสำเนาที่เป็นข้อความธรรมดาทั้งหมด ทั้งที่เก็บในเครื่องของเบราว์เซอร์ ข้อมูลซิงค์ และสแนปช็อตสำรองแบบหมุนเวียนทั้งเจ็ดชุด
ขอพูดตรง ๆ เพราะมีผลต่อการประเมินของคุณ:
สรุปสั้น ๆ คือ สิ่งนี้ปกป้องข้อมูลในขณะจัดเก็บ แต่ไม่อาจปกป้องอุปกรณ์ที่ตกอยู่ในการควบคุมของผู้โจมตีอยู่แล้วขณะใช้งาน และก็ไม่มีทางทำได้
ไฟล์ manifest ประกาศสิทธิ์ห้ารายการ และไม่มีสิทธิ์เข้าถึงโฮสต์ใดเลย:
ไม่มี ไม่มี content script ใด ๆ ไม่มีสิทธิ์ tabs cookies หรือ webRequest และไม่มี web-accessible resources ไม่มีอะไรของเราอยู่ในหน้าเว็บจนกว่าคุณจะขอรหัสที่นั่น สิ่งที่ทำงานตอนนั้นถูกแทรกเข้าไปเพื่อแท็บนั้นและการเรียกครั้งนั้นเท่านั้น ภายใต้สิทธิ์ที่คลิกของคุณเองมอบให้ และไม่ทิ้งอะไรไว้เลย
การสแกนคิวอาร์โค้ดด้วยกล้องทำงานบนหน้าของส่วนขยายที่เปิดในแท็บ ไม่ใช่ในหน้าต่างป็อปอัป เพราะป็อปอัปจะถูกทำลายทันทีที่เสียโฟกัส ซึ่งกล่องขอสิทธิ์ทำแบบนั้นพอดี เรื่องนี้ไม่ต้องใช้สิทธิ์ใดใน manifest โดยใช้กล่องขอสิทธิ์กล้องมาตรฐานของเบราว์เซอร์ ให้สิทธิ์ตาม origin ของส่วนขยายและเพิกถอนได้ในการตั้งค่าเว็บไซต์ และจะไม่ถูกร้องขอจนกว่าผู้ใช้จะเปิดตัวสแกนเอง วิดีโอถูกถอดรหัสในเครื่องและไม่เคยถูกส่งออกหรือบันทึกไว้
ตั้งแต่เวอร์ชัน 1.14.0 ส่วนขยายจะติดต่อ api.authenticator.sh วันละครั้ง — ตอนเบราว์เซอร์เริ่มทำงาน หรือหลังจากป็อปอัปแสดงผลเสร็จแล้ว และไม่เคยเป็นขั้นตอนที่ต้องผ่านก่อนรหัสจะแสดง คำขอประกอบด้วยชุดฟิลด์ที่กำหนดไว้ตายตัว สร้างขึ้นในฟังก์ชันเดียวใน src/billing/sync.ts และมีการทดสอบคอยยึดไว้ให้ตรงกับรายการนั้น:
สิ่งที่ไม่เคยถูกส่ง: กุญแจลับ ชื่อบัญชี ชื่อบริการ รหัส หรือเว็บไซต์ที่ใช้รหัสเหล่านั้น เซิร์ฟเวอร์อ่านประเทศจากคำขอที่ขอบเครือข่าย (edge) และไม่เก็บที่อยู่ IP หน้าถอนการติดตั้งได้รับ ID การติดตั้งเดียวกันนี้ผ่าน ?i= หน้านี้แจ้งเซิร์ฟเวอร์ว่าการติดตั้งนั้นถูกถอนออกแล้ว และเชื่อมโยงคำตอบแบบสำรวจซึ่งจะตอบหรือไม่ก็ได้เข้ากับการติดตั้งนั้น
สิ่งที่เก็บไว้ใน chrome.storage.local เพื่อการนี้ ได้แก่ ID การติดตั้ง นโยบายและใบอนุญาตที่ลงลายเซ็นชุดล่าสุด คีย์ใบอนุญาตที่การติดตั้งนี้มีอยู่ (ที่พิมพ์ใส่เอง หรือได้รับหลังซื้อจากการติดตั้งนี้) จำนวนครั้งที่เปิดในแต่ละวันจนกว่าเซิร์ฟเวอร์จะได้รับ และเหตุการณ์ที่รอส่ง — ไม่มีข้อมูลบัญชี ขณะที่เปิดการซิงค์ สถานะว่าการติดตั้งมีมาก่อนระบบเรียกเก็บเงินหรือไม่ และคีย์ใบอนุญาตนั้น จะถูกเก็บใน Chrome Sync ด้วย เพื่อให้โปรไฟล์ Chrome อื่น ๆ ของผู้ใช้ได้รับไปและเปิด Pro ได้เอง การปิดการซิงค์จะลบทั้งสองอย่างออกจาก Chrome Sync และเมื่อเปิดอีกครั้งก็จะใส่กลับเข้าไป
สิ่งที่ส่งกลับมา และส่วนขยายจัดการกับสิ่งนั้นอย่างไร:
ขีดจำกัดนี้ไม่ใช่ DRM: โค้ดเป็นโอเพนซอร์ส และ fork ใดก็เอาขีดจำกัดออกได้ สิ่งที่ต้องเป็นไปไม่ได้เด็ดขาดคือการที่ใครคนหนึ่งได้มาหรือใช้ใบอนุญาตของคนอื่น หรือทำให้การติดตั้งของคนอื่นถูกจำกัด — นั่นคือช่องโหว่ และอยู่ในขอบเขตของนโยบายความปลอดภัยของเรา
คำขอที่ส่วนขยายส่งเองโดยลำพังมีสองอย่าง คือการตรวจนาฬิกา และการติดต่อเซิร์ฟเวอร์รายวันของระบบชำระเงิน ส่วนที่เหลือด้านล่างเกิดขึ้นเพราะผู้ใช้กดเองทั้งสิ้น Manifest V3 ห้ามโค้ดจากระยะไกล และไม่มีรายการใดที่นี่พาบัญชี กุญแจลับ หรือรหัสที่สร้างขึ้นออกไปด้วย รายการทั้งหมดมีดังนี้:
| โฮสต์ | เมื่อใด | มีข้อมูลผู้ใช้ไปด้วยหรือไม่ |
|---|---|---|
| time.akamai.com timeapi.io cloudflare.com | ตรวจความคลาดเคลื่อนของนาฬิกา มีแคช และหากติดต่อแหล่งใดไม่ได้เลย การตั้งค่าจะแจ้งไว้ นาฬิกาที่เพี้ยนทำให้ TOTP ใช้ไม่ได้ | ไม่มี |
| authenticator.sh | หน้าต้อนรับตอนติดตั้ง หน้าให้ความเห็นตอนถอนการติดตั้ง (โดยมี ID การติดตั้งอยู่ในที่อยู่ของหน้า) และหน้าช่วยเหลือกับหน้าสนับสนุนเมื่อเปิดจากหน้าต่างส่วนขยาย | ID การติดตั้ง เฉพาะในหน้าถอนการติดตั้งเท่านั้น นอกนั้นไม่มี (มีเพียงบันทึกเว็บเซิร์ฟเวอร์ตามปกติ) |
| api.authenticator.sh | ติดต่อเซิร์ฟเวอร์ของระบบชำระเงินวันละครั้ง และเรียกใช้บริการชำระเงิน ใบอนุญาต และพอร์ทัล เมื่อผู้ใช้ซื้อ Pro ใส่คีย์ กู้คืนการซื้อ หรือจัดการการสมัครสมาชิก | ฟิลด์ที่ระบุไว้ข้างต้น — ไม่มีข้อมูลบัญชีเลย คีย์ใบอนุญาตหรือที่อยู่อีเมลจะส่งไปก็ต่อเมื่อผู้ใช้พิมพ์ใส่เองเท่านั้น |
| checkout.stripe.com billing.stripe.com | Stripe Checkout และพอร์ทัลลูกค้า เปิดในแท็บเมื่อผู้ใช้ซื้อ Pro หรือจัดการการสมัครสมาชิก | สิ่งที่ผู้ซื้อกรอกที่นั่น ภายใต้เงื่อนไขของ Stripe และ Link เอง |
| chromewebstore.google.com | หน้าร้านค้า เปิดในแท็บใหม่เมื่อกดเท่านั้น จากคำชวนให้คะแนนจะไปที่ช่องรีวิว | ไม่มี (Google เห็นเป็นการเข้าชมหน้าร้านค้าเหมือนครั้งอื่น ๆ) |
ไม่มีฟอนต์ สคริปต์ สไตล์ หรือรูปภาพใดถูกโหลดจากโฮสต์ภายนอก ทุกอย่างที่ใช้แสดงผลอินเทอร์เฟซมาพร้อมในแพ็กเกจแล้ว
คุณไม่จำเป็นต้องเชื่อสิ่งที่กล่าวมาข้างต้นเลยสักข้อ ส่วนขยายนี้เป็นโอเพนซอร์ส และทุกรุ่นสร้างซ้ำได้:
.crx ที่เผยแพร่จาก Chrome Web Store แล้วแตกไฟล์npm ci && npm run build บน Node 20 LTSdist/ ที่ได้กับแพ็กเกจที่แตกไฟล์ไว้ทุกรุ่นที่ปล่อยบน GitHub จะมาพร้อมค่า SHA-256 ของทุกไฟล์ใน dist/ ที่บิลด์ได้ ในชื่อ SHA256SUMS-v<version>.txt และอยู่ในรูปแบบ sha256sum ขั้นตอนที่ 4 จึงเหลือเพียงการรัน sha256sum -c ครั้งเดียว ความแตกต่างควรจำกัดอยู่ที่ลำดับไฟล์ภายในไฟล์บีบอัด และช่องว่างในผลลัพธ์ที่ถูกย่อขนาดระหว่าง Node คนละรุ่นย่อย
แพ็กเกจที่ต้องใช้ตอนรันมีน้อยโดยตั้งใจ ได้แก่ OTPAuth, React, jsQR, Zustand, Framer Motion และ Lucide ทั้งหมดถูกตรึงเวอร์ชันด้วย lockfile ที่คอมมิตไว้ในรีโป และเรามี SBOM รูปแบบ CycloneDX ให้เมื่อร้องขอ
ดูซอร์สโค้ดเราเป็นผู้พัฒนารายเล็กและเป็นอิสระ หากข้อใดข้อหนึ่งต่อไปนี้เป็นข้อกำหนดที่ยืดหยุ่นไม่ได้ในกระบวนการของคุณ รู้ตอนนี้ย่อมดีกว่ารู้ตอนที่ประเมินไปแล้วสามสัปดาห์:
สิ่งที่เรามีให้แทนคือความโปร่งใสของซอร์สโค้ดทั้งหมด บิลด์ที่ตรวจสอบได้ สิทธิ์ที่ขอน้อยที่สุด และเซิร์ฟเวอร์ที่ไม่เคยได้รับกุญแจลับ ชื่อบัญชี หรือรหัสของคุณตั้งแต่แรก
รายงานช่องโหว่และคำถามด้านความปลอดภัย: security@authenticator.sh นโยบายการเปิดเผย ขอบเขต เวลาตอบกลับ และเงื่อนไข safe harbour อยู่ในหน้านโยบายความปลอดภัย ส่วนข้อมูลใดถูกเก็บและข้อมูลใดออกจากเครื่องนั้นระบุไว้ในนโยบายความเป็นส่วนตัว
เรายินดีตอบแบบสอบถามประเมินผู้ให้บริการเป็นลายลักษณ์อักษร หรือพาทีมความปลอดภัยไล่อ่านโค้ดไปด้วยกัน
เรื่องอื่นที่ไม่ใช่ความปลอดภัย เช่น การติดตั้ง การกู้คืนบัญชี หรือคำถามเรื่องการเรียกเก็บเงินจากการนำไปใช้ในองค์กร ดูได้ที่หน้าสนับสนุน และกรุณาอย่าส่งรายงานช่องโหว่ไปที่นั่น เพราะกล่องข้อความนั้นไม่ได้ถูกจัดการแบบเป็นความลับ