อะไรทำให้ตัวสร้างรหัสผ่านนี้แตกต่าง?
นี่คือตัวสร้างรหัสผ่านแบบเน้นความเป็นส่วนตัวที่ทำงานในเบราว์เซอร์เท่านั้น ทุกไบต์สุ่มมาจากตัวสร้างเลขสุ่มเชิงเข้ารหัสลับของระบบปฏิบัติการผ่าน crypto.getRandomValues — ไม่เคยมาจาก Math.random หน้านี้ไม่ส่งคำขอเครือข่ายใด ๆ เพื่อสร้างรหัสผ่าน และค่าที่สร้างขึ้นไม่เคยออกจากแท็บของคุณ เปิดแผง Network ใน DevTools แล้วคลิกสร้าง: มันจะเงียบสนิท
ตัวสร้างรหัสผ่านนี้ทำงานอย่างไร?
เครื่องมือทำงานทั้งหมดใน JavaScript ภายในเบราว์เซอร์ของคุณ ไม่มีการเดินทางไปกลับเซิร์ฟเวอร์ ไม่มี analytics beacon ที่นำพารหัสผ่านไป และไม่มีคำขอฟอนต์ระยะไกลหลังจากที่หน้าโหลดเสร็จแล้ว
- ดึงค่าจาก CSPRNG ของระบบปฏิบัติการ ทุกจำนวนเต็มสุ่มดึงมาจาก
crypto.getRandomValues(new Uint32Array(n))— แหล่งสุ่มที่ปลอดภัยทางเข้ารหัสลับเดียวกับที่เบราว์เซอร์ใช้สำหรับวัสดุคีย์ TLS และcrypto.randomUUIDทั้งโปรเจกต์ตั้งใจไม่เรียกMath.randomเลย และมีการ grep ทั่วทั้งโปรเจกต์เพื่อบังคับใช้ - การประกอบ charset โหมดอักขระสุ่มจะนำคลาสอักขระที่เปิดอยู่ — ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก ตัวเลข สัญลักษณ์ — มาต่อกันเป็นตัวอักษรเดียว สวิตช์ 'ยกเว้นอักขระที่กำกวม' จะตัด glyph ที่หน้าตาคล้ายกัน (
0,O,o,1,l,I,|, backtick) ออก เพื่อให้รหัสผ่านไม่กำกวมเมื่ออ่านออกเสียงหรือลอกด้วยมือ - การสุ่มดัชนีแบบไม่มีอคติ การแมปจำนวนเต็มไม่มีเครื่องหมาย 32 บิตไปเป็นดัชนี charset โดยตรง (modulo) จะทำให้เกิดอคติเล็กน้อยเมื่อขนาด charset หาร 2^32 ไม่ลงตัว เครื่องมือใช้ rejection sampling: ตัวอย่างใด ๆ ที่ตกอยู่ในส่วนหางของ modulo จะถูกทิ้งและจับใหม่ ทำให้ทุกอักขระใน charset มีโอกาสเท่ากัน
- การสร้างจำนวนมาก สำหรับโหมดอักขระสุ่ม คุณสามารถขอ 1 ถึง 50 รหัสผ่านในคลิกเดียว ผลลัพธ์แต่ละรายการจะแสดงเป็นแถวพร้อมประมาณการเอนโทรปีของตัวเอง bucket ความแข็งแกร่ง และปุ่มคัดลอก ปุ่ม 'คัดลอกทั้งหมด' จะรวมแถวด้วยการขึ้นบรรทัดใหม่ เพื่อให้คุณวางลงในไฟล์ CSV หรือไฟล์นำเข้าของ vault ได้
- โหมดพาสเฟรส สลับสวิตช์โหมด แล้วหน้าจะดึง EFF Short Wordlist #1 (คำภาษาอังกฤษสาธารณสมบัติ 1296 คำ) แบบ lazy เมื่อใช้งานครั้งแรก พาสเฟรสห้าคำให้เอนโทรปีประมาณ 51.7 บิต — เพียงพอสำหรับบัญชีในชีวิตประจำวันและจดจำได้ง่ายกว่าซุปสุ่ม 9 อักขระมาก หลังจากการดึงข้อมูล same-origin ครั้งเดียวนั้น หน้าจะเงียบอีกครั้ง
ทำไมจึงใช้ตัวสร้างรหัสผ่านนี้?
- รหัสผ่านของคุณไม่เคยออกจากเบราว์เซอร์ ไม่มีปลายทางเซิร์ฟเวอร์ ไม่มีการเรียก analytics ที่นำพาค่า ไม่มีฟอนต์ระยะไกล ไม่มี telemetry เปิด DevTools สร้างรหัสผ่าน และดูแผง Network ที่ยังคงว่างเปล่า
- ความสุ่มที่ปลอดภัยทางเข้ารหัสลับโดยโครงสร้าง ทุกจำนวนเต็มมาจาก
crypto.getRandomValuesพร้อม rejection sampling เพื่อป้องกันอคติจาก modulo บั๊กที่พบบ่อยที่สุดในตัวสร้างรหัสผ่านบนเบราว์เซอร์ — การใช้Math.randomเป็นเอนโทรปี — เป็นไปไม่ได้ทางโครงสร้างในที่นี้ - สองโหมด เครื่องมือเดียว โหมดอักขระสุ่มสร้างสตริงเอนโทรปีสูงสำหรับ password manager โหมดพาสเฟรสสร้างสตริงสไตล์ xkcd ที่มนุษย์จำได้ (
correct-horse-battery-staple) สนับสนุนโดย EFF Short Wordlist #1 โมเดลความเป็นส่วนตัวเดียวกันทั้งสองโหมด - เอนโทรปีโปร่งใส แต่ละแถวที่สร้างขึ้นจะแสดงเอนโทรปีในหน่วยบิตและป้ายความแข็งแกร่งที่ชัดเจน เพื่อให้คุณเห็นได้ในพริบตาว่าสตริง 12 อักขระไม่มีสัญลักษณ์นั้นแข็งแกร่งเท่ากับพาสเฟรส 5 คำหรือไม่ ไม่มีคำโฆษณา มีเพียงตัวเลขเท่านั้น
การใช้งานทั่วไปของรหัสผ่านที่สร้างขึ้นมีอะไรบ้าง?
เมื่อใดก็ตามที่คุณต้องการความลับสุ่มชุดใหม่ นี่คือเครื่องมือที่ลดพื้นผิวความไว้วางใจให้น้อยที่สุด:
- การนำเข้า password manager สร้างรหัสผ่านที่แข็งแกร่ง 50 ชุดในชุดเดียว คลิกคัดลอกทั้งหมด วางลงในการนำเข้า CSV ของ vault ค่าต่าง ๆ ไม่เคยเดินทางไปกลับผ่านเซิร์ฟเวอร์ใด ๆ ดังนั้นจึงไม่มีช่องโหว่รั่วไหลระหว่างการสร้างและการจัดเก็บ
- พาสเฟรสหลัก สลับไปยังโหมดพาสเฟรส เลือก 6 หรือ 7 คำ พิมพ์ใหญ่แต่ละคำได้หากต้องการ และคุณจะได้สตริงเอนโทรปีสูงที่คุณจดจำได้จริงโดยไม่ต้องเขียนลงกระดาษ เอนโทรปีประมาณ 62 บิตจาก 6 คำ — สูงกว่าเกณฑ์การโจมตีแบบออฟไลน์มาก
- คีย์ API และโทเค็นในโปรเจกต์เสริม ต้องการความลับร่วมแบบครั้งเดียวสำหรับคีย์เซ็น webhook หรือรหัสผ่านฐานข้อมูลพัฒนาหรือไม่? สร้างสตริง 32 อักขระที่อุดมไปด้วยสัญลักษณ์ที่นี่ คัดลอกครั้งเดียว และที่เดียวที่ค่าเคยมีอยู่ระหว่างการส่งคือภายในแท็บเบราว์เซอร์ของคุณเอง
ตัวอย่างรหัสผ่านที่สร้างขึ้นมีลักษณะอย่างไร?
ตั้งความยาวเป็น 16 เปิดทั้งสี่คลาสอักขระไว้ทั้งหมด แล้วคลิกสร้าง charset มี 26 + 26 + 10 + 32 = 94 อักขระ ดังนั้นอักขระที่สร้างขึ้นแต่ละตัวจะมีเอนโทรปี log2(94) ≈ 6.55 บิต สิบหกอักขระจะอยู่ที่ประมาณ 104.9 บิต — สูงกว่าเกณฑ์ 'แข็งแกร่งมาก' ที่ 80 บิตมาก และเป็นไปไม่ได้ในทางปฏิบัติที่จะ brute-force ด้วยฮาร์ดแวร์ปัจจุบัน ตอนนี้ลองสลับไปยังโหมดพาสเฟรส เลือก 5 คำพร้อมตัวคั่นยัติภังค์ค่าเริ่มต้น: cocktail-sprig-aspect-magenta-tonic มีเอนโทรปี log2(1296) x 5 ≈ 51.7 บิต จดจำได้ พิมพ์ได้ และแข็งแกร่งกว่ารหัสผ่านที่มนุษย์เลือกโดยเฉลี่ย
สร้าง คัดลอก ทำงานต่อ หน้าเว็บไม่เคยเห็นเซิร์ฟเวอร์ รหัสผ่านไม่เคยออกจากแท็บของคุณ และเอนโทรปีคำนวณจากหลักการพื้นฐาน นั่นคือคำสัญญาทั้งหมด