ไทย

เครื่องมือข้อความและชีวิตประจำวัน · เครื่องมือสร้างรหัสผ่าน

crypto.getRandomValues กับ Math.random: ทำไมรหัสผ่านจึงมีความสำคัญ

· มันทำงานอย่างไร

รหัสผ่าน เว็บ-crypto ความบังเอิญ

เส้นทางสุ่มที่อ่อนแอสิ้นสุดลงในขณะที่เส้นทาง Web Crypto ยังคงเป็นสัญลักษณ์รหัสผ่าน
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

อธิบายความแตกต่างระหว่างตัวสร้างตัวเลขสุ่มสำหรับใช้งานทั่วไปของเบราว์เซอร์กับตัวเข้ารหัส เหตุใดความสามารถในการคาดเดาจึงส่งผลร้ายแรงสำหรับรหัสผ่าน และวิธีบอกว่าเครื่องมือใดใช้

สุ่มเพียงพอสำหรับเกมลูกเต๋า ไม่ใช่รหัสผ่าน — การสุ่มสองประเภทที่เบราว์เซอร์นำเสนอ

เบราว์เซอร์สามารถเสนอค่าที่ดูผิดปกติได้มากกว่าหนึ่งแหล่ง แต่ความผิดปกติของการมองเห็นไม่ใช่หลักฐานว่าลำดับนั้นเหมาะสำหรับข้อมูลรับรอง ToolAcre วาดขอบเขตของผลิตภัณฑ์อย่างหนัก: ทุกตัวเลือกคำ ตัวเลือกตัวคั่น ตัวเลือกอักขระ และการสลับสับเปลี่ยนผ่านฟังก์ชันจำนวนเต็มที่ปลอดภัยหนึ่งฟังก์ชันที่สนับสนุนโดย `crypto.getRandomValues` หาก API นั้นไม่สามารถใช้ได้ เพจจะปิดการสร้างแทนการสร้างสิ่งทดแทนที่ดูน่าเชื่อถือ

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

Math.random มีไว้เพื่ออะไร - การสุ่มหลอกที่รวดเร็วและมีการเพาะซึ่งสามารถสร้างเอาต์พุตใหม่ได้จากการสังเกตเล็กน้อย

เวิร์กบุคอธิบายว่า Math.random เป็นการสุ่มหลอกแบบ seeded ที่สามารถสร้างใหม่ได้จากการสังเกตบางประการ แต่สิ่งเหล่านั้นเป็นการใช้งานทั่วไปที่อ้างว่าที่เก็บนี้ไม่ได้สร้างไว้สำหรับเอ็นจิ้น JavaScript ทุกตัว ข้อเท็จจริงในท้องถิ่นนั้นง่ายกว่าและแข็งแกร่งกว่าสำหรับผลิตภัณฑ์นี้: ไฟล์ตัวสร้างที่ใช้งานจริงไม่ได้เรียก `Math.random` การทดสอบระดับแหล่งที่มาจะดึงความคิดเห็น สแกนโค้ดที่ปฏิบัติการได้ และล้มเหลวหากมีการเรียกดังกล่าวปรากฏขึ้นที่ใดก็ได้ในแอปกลไกหรือรหัสผ่าน

ความแตกต่างนี้ทำให้บทความไม่สามารถเปลี่ยนกฎการใช้งานเป็นการบรรยายประวัติเบราว์เซอร์สากล ToolAcre ไม่จำเป็นต้องระบุคุณลักษณะทุกขั้นตอนของอัลกอริทึม Math.random ที่เป็นไปได้เพื่อปฏิเสธ API สำหรับการสร้างรหัสผ่าน แพ็คเกจยอมรับ Web Crypto หรือแหล่งความปลอดภัยแบบฉีดที่ใช้โดยการทดสอบ และไม่เปิดเผยตัวเลือกการผลิตสำหรับเมล็ดพันธุ์ โหมดที่กำหนด หรือทางเลือกสำรองที่ไม่รัดกุม

สิ่งที่พื้นที่เก็บข้อมูลนี้พิสูจน์เกี่ยวกับ Math.random: ไม่มีอยู่ในรุ่นที่ใช้งานจริง

`createWebCryptoSource` ค้นหา `getRandomValues` ที่สามารถเรียกได้ จากนั้นล้อมเมธอดนั้นเป็นแหล่งสุ่มของแพ็คเกจ แอปพลิเคชันดำเนินการตรวจสอบเพิ่มเติมก่อนเปิดใช้งานการควบคุม โดยจะขอให้วัตถุ crypto ทั่วโลกกรอกอาร์เรย์ที่พิมพ์องค์ประกอบเดียวภายในบล็อกลอง ซึ่งตรวจจับสภาพแวดล้อมที่ถูกจำกัดในที่ซึ่งมีทรัพย์สินอยู่ แต่จะเกิดข้อผิดพลาดเมื่อใช้ แทนที่จะเชื่อถือการตรวจสอบคุณสมบัติแบบผิวเผิน

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

crypto.getRandomValues ทำอะไรที่นี่: เติมอาร์เรย์ที่พิมพ์ผ่านเบราว์เซอร์ API

ความสามารถในการคาดการณ์เป็นสิ่งที่อันตรายเนื่องจากตัวสร้างข้อมูลรับรองควรจะสร้างทางเลือกใหม่ที่ผู้สังเกตการณ์ไม่สามารถทำซ้ำจากเอาต์พุตก่อนหน้าได้ ToolAcre สนับสนุนเป้าหมายดังกล่าวโดยการปฏิเสธเส้นทางการผลิตที่กำหนดขึ้น โดยรวมศูนย์ทุกการจับรางวัล และการทดสอบที่ไม่มี API ที่อ่อนแออยู่ มันไม่ได้รับประกันว่าจะรอดพ้นจากการจับภาพหน้าจอ ส่วนขยาย มัลแวร์ ฟิชชิ่ง การใช้รหัสผ่านซ้ำ หรือบริการที่จัดการข้อมูลประจำตัวในทางที่ผิดหลังจากส่ง

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

การอ่านโค้ด — วิธีตรวจสอบว่า API หน้าใดใช้ และเหตุใดหน้าที่เปิดและตรวจสอบได้จึงเชื่อถือได้ง่ายกว่า

การอ่านโค้ดเริ่มต้นที่ `packages/password-generator/src/index.js` ซึ่งสัญญาระบุว่าทุกการตัดสินใจแบบสุ่มจะไปถึง `secureRandomInt` ไฟล์การใช้งานจะแสดง `getRandomValues` การสุ่มตัวอย่างการปฏิเสธ และข้อผิดพลาดที่ชัดเจน สุดท้ายนี้ `no-math-random.test.js` และชุดความปลอดภัยของรหัสผ่านที่กว้างขึ้นทำให้การรับประกันเชิงลบสามารถดำเนินการได้ แทนที่จะปล่อยให้ "เราไม่เคยใช้ Math.random" เป็นความคิดเห็นที่ยังไม่ทดลอง

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

ตัวอย่างการทำงาน — รูทีนการเลือกคำเดียวกันที่เขียนทั้งสองวิธี และสิ่งที่ผู้โจมตีสามารถทำได้กับแต่ละวิธี

พิจารณาคำขอจำนวนเต็มต่ำกว่า 100 `secureRandomInt` ต้องการหนึ่งไบต์ ซึ่งช่วงมีค่า 256 ยอมรับเฉพาะคำนำหน้าที่ใหญ่ที่สุดที่หารด้วย 100 ซึ่งลงท้ายก่อน 200 และปฏิเสธส่วนท้ายที่เหลือ ฟีดการทดสอบตามที่กำหนดจะป้อนไบต์ 200 ตามด้วยไบต์ 7 การใช้งานละทิ้ง 200 และส่งคืน 7; ทางลัดแบบโมดูโลโดยตรงจะคืนค่าศูนย์จากไบต์ที่ถูกปฏิเสธ

ฟังก์ชันจำนวนเต็มที่ปลอดภัยแบบเดียวกันจะเลือกดัชนีสำหรับคำและอักขระ ดังนั้นตัวอย่างนี้จึงไม่ใช่ของเล่นที่แยกจากรุ่น จำนวนไบต์ที่แน่นอนในการผลิตไม่ใช่ตัวอย่างที่ทำซ้ำได้ และไม่ควรเผยแพร่เป็นข้อมูลรับรอง สิ่งประดิษฐ์ที่มีประโยชน์คือการพิสูจน์การควบคุมการไหล: Web Crypto เติมบัฟเฟอร์ ส่วนหางที่ไม่สม่ำเสมอจะถูกปฏิเสธ และมีเพียงค่าที่ยอมรับเท่านั้นที่จะกลายเป็นตัวเลือกที่มีขอบเขต

ตัวอย่างการทำงาน: ติดตามการวาดขอบเขตหนึ่งครั้งผ่านเส้นทาง SecureRandomInt ที่จัดส่ง

พื้นที่เก็บข้อมูลนี้ไม่ได้ใช้หรือเปรียบเทียบตัวสร้างฝั่งเซิร์ฟเวอร์ ตัวสร้างตัวเลขสุ่มของฮาร์ดแวร์ หรือเครื่องมือบรรทัดคำสั่งของระบบปฏิบัติการ นอกจากนี้ยังไม่สามารถตรวจสอบภายในของการใช้งาน crypto ของเบราว์เซอร์จาก JavaScript ได้ หัวข้อเหล่านั้นจำเป็นต้องมีแหล่งข้อมูล โมเดลภัยคุกคาม และการตรวจสอบการปฏิบัติงานของตนเอง แทนที่จะวางการเปรียบเทียบลงบนเส้นทางโค้ด ToolAcre

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

ข้อสำคัญ — เครื่องมือสร้างรหัสผ่านใช้ตัวสร้างตัวเลขสุ่มเข้ารหัสของเบราว์เซอร์ และคุณสามารถตรวจสอบได้จากหน้าเพจเอง

ตัวเลือกที่ตรวจสอบได้ของ ToolAcre คือการเข้ารหัสลับหรือไม่มีอะไรเลย หน้านี้เรียกเบราว์เซอร์ API ระหว่างการตรวจจับการสนับสนุน ปิดใช้งานการควบคุมเมื่อล้มเหลว และปล่อยให้กลไกส่ง `InsecureRandomError` หากการสร้างถึงสภาวะที่ขาดหายไปแบบเดียวกัน ไม่มีทางเลือก Math.random ซ่อนอยู่หลังสาขาใดสาขาหนึ่ง

ใช้รูปแบบนั้นเมื่อตรวจสอบตัวสร้าง: ระบุแหล่งที่มา ติดตามทุกขอบเขต ตรวจสอบการลดลงและการสับเปลี่ยน และบังคับใช้เส้นทางของแหล่งที่มาที่ไม่พร้อมใช้งาน จากนั้นประเมินเครื่องและปลายทางแยกกัน แหล่งที่มาสุ่มเสียงเป็นสิ่งจำเป็นสำหรับงานของตัวสร้างนี้ แต่ไม่ใช่ใบรับรองสากลสำหรับอายุการใช้งานทั้งหมดของข้อมูลประจำตัว