เครื่องมือข้อความและชีวิตประจำวัน · เครื่องมือสร้างรหัสผ่าน
PRNG กับ CSPRNG: ตัวเลขสุ่มของเบราว์เซอร์ของคุณมาจากไหน
· พื้นหลัง
รหัสผ่าน เว็บ-crypto csprng
อธิบายความแตกต่างระหว่างเครื่องกำเนิดไฟฟ้าแบบสุ่มหลอกและที่ปลอดภัยด้วยการเข้ารหัส วิธีที่ระบบปฏิบัติการรวบรวมเอนโทรปีจากเหตุการณ์ฮาร์ดแวร์ และวิธีที่การสุ่มนั้นเข้าถึงหน้าเว็บผ่าน Web Crypto API
คอมพิวเตอร์เป็นสิ่งที่กำหนดได้ แล้วความสุ่มมาจากไหน? — ปริศนาพื้นฐานเบื้องหลังเครื่องกำเนิดไฟฟ้าทุกเครื่อง
JavaScript ทำงานใน ToolAcre เริ่มต้นที่ขอบเขต API มันสามารถร้องขอไบต์จาก `crypto.getRandomValues` สังเกตว่าการเรียกนั้นสำเร็จหรือไม่และใช้อาร์เรย์ที่ส่งคืน ไม่สามารถตรวจสอบเหตุการณ์ทางกายภาพ พูลเคอร์เนล หรือส่วนประกอบฮาร์ดแวร์ทั้งหมดที่แพลตฟอร์มใดอาจใช้อยู่ข้างใต้ได้ เรื่องราวต้นกำเนิดของสมุดงานเกี่ยวกับการสุ่มจึงมีมากกว่าหลักฐานในท้องถิ่น
คำอธิบายที่ตรงไปตรงมาทางเทคนิคเริ่มต้นเมื่อการสังเกตเริ่มต้นขึ้น แอปจะตรวจสอบ Web Crypto เอ็นจิ้นจะล้อมรอบ และการเลือกทั้งหมดจะใช้แหล่งที่มานั้น ภายในเฉพาะแพลตฟอร์มจำเป็นต้องมีเอกสารประกอบและการตรวจสอบแพลตฟอร์ม ไม่ใช่คำสั่งทั่วไปที่อนุมานจากชื่อวิธีการของเบราว์เซอร์
พื้นที่เก็บข้อมูลเริ่มต้นที่เบราว์เซอร์ API; มันไม่ได้ตรวจสอบแหล่งที่มาของเอนโทรปีทางกายภาพ
ตัวสร้างแบบสุ่มหลอกมักจะอธิบายโดยเมล็ดและสถานะที่สามารถทำซ้ำได้ แต่ที่เก็บนี้ไม่จำเป็นต้องใช้เอ็นจิ้น JavaScript เพื่อแชร์การออกแบบ Math.random หนึ่งรายการ ToolAcre หลีกเลี่ยงความคลุมเครือโดยการห้าม API โดยสิ้นเชิงในการผลิตข้อมูลรับรอง การสแกนแหล่งที่มาบังคับใช้การรับประกันเชิงลบนั้น
การทดสอบยังคงต้องการไบต์ที่กำหนด ดังนั้นจึงฉีดอ็อบเจ็กต์ที่เปิดเผย `getRandomValues` ผ่านพารามิเตอร์ภายใน ของปลอมเหล่านั้นอยู่ในการสนับสนุนการทดสอบ และจะไม่ถูกส่งออกเป็นโหมดการผลิตแบบตั้งเมล็ด ความสามารถในการทดสอบไม่ได้สร้างตัวเลือกผู้ใช้ที่ซ่อนอยู่สำหรับรหัสผ่านที่ทำซ้ำได้
Math.random ถูกห้ามที่นี่ โดยไม่อ้างสิทธิ์การออกแบบสากล PRNG หนึ่งรายการ
ผลิตภัณฑ์ใช้ "การเข้ารหัส" ในลักษณะที่กำหนดขอบเขต: อินเทอร์เฟซเบราว์เซอร์ที่จำเป็นคือ Web Crypto และการสร้างล้มเหลวในการปิดเมื่อไม่มีหรือใช้งานไม่ได้ แอปจะเรียกใช้เมธอดนี้ในระหว่างการตรวจจับ แทนที่จะตรวจสอบเฉพาะประเภทเท่านั้น โดยตรวจจับสภาพแวดล้อมที่จำกัดซึ่งมีการเรียกใช้
สัญญาดังกล่าวไม่ได้สัญญาว่าจะต่อต้านทุกสถานะสมมุติหรือรับรองการใช้งานเบราว์เซอร์ มันพิสูจน์ว่า API เพจใดร้องขอ และไม่มีการเชื่อมโยงทางเลือกที่อ่อนแอกว่าเข้าด้วยกัน ความสมบูรณ์ของอุปกรณ์ยังคงอยู่นอกเครื่องกำเนิด
คุณสมบัติการเข้ารหัสลับที่ได้รับการตรวจสอบแล้วคือแหล่งที่มาของ Web Crypto และเส้นทางการปฏิเสธที่จำเป็น
กิจกรรมเกี่ยวกับเวลา, คำแนะนำสำหรับโปรเซสเซอร์เฉพาะ, กำหนดการใหม่และกลุ่มเอนโทรปีของระบบปฏิบัติการ ล้วนอยู่ภายใต้พื้นผิวของเว็บ API ไม่มีการยืนยันที่นี่เนื่องจากแหล่งแพ็กเกจไม่สามารถตรวจสอบได้ บทความเฉพาะแพลตฟอร์มในอนาคตจะต้องมีเอกสารประกอบหลักสำหรับแต่ละสภาพแวดล้อมที่อธิบายไว้
การละเลยทำให้ข้อเรียกร้องในปัจจุบันเข้มแข็งขึ้นมากกว่าทำให้ข้อเรียกร้องในปัจจุบันอ่อนแอลง ToolAcre สามารถพูดได้อย่างชัดเจนถึงสิ่งที่ขอให้เบราว์เซอร์ทำ และวิธีปฏิบัติต่อไบต์ ไม่จำเป็นต้องแสร้งทำเป็นว่า JavaScript สามารถตรวจสอบห่วงโซ่เอนโทรปีทั้งหมดเพื่อพิสูจน์การปฏิเสธ Math.random
รายละเอียดเหตุการณ์ฮาร์ดแวร์และกลุ่มระบบปฏิบัติการเป็นการอ้างสิทธิ์การใช้งานที่แหล่งที่มานี้ไม่ได้พิสูจน์
`getRandomValues` เติมขนาด `Uint8Array` จากขอบเขตพิเศษที่ร้องขอ `secureRandomInt` รวบรวมไบต์เหล่านั้นเป็นตัวเลขปลายใหญ่ที่ไม่ได้ลงนาม คำนวณหน้าต่างการยอมรับที่หารได้มากที่สุด และละทิ้งค่าในส่วนที่เหลือ ค่าที่ยอมรับได้จะลดลงเป็นดัชนี
คำ ตัวคั่น อักขระ และการสับเปลี่ยนล้วนใช้เส้นทางนี้ซ้ำ จุดควบคุมจุดเดียวทำให้สามารถตรวจสอบห่วงโซ่เบราว์เซอร์ต่อตัวเลือกได้ และรับประกันว่าการแก้ไขการลดขอบเขตจะส่งผลต่อโหมดทุกรุ่น แทนที่จะเป็นผู้โทรที่ถูกลืมเพียงคนเดียว
จาก getRandomValues ไปจนถึง SecureRandomInt: เส้นทางเบราว์เซอร์ไปยังดัชนีที่มองเห็นได้
สำหรับพูลคำ 7,776 ฟังก์ชันจะเลือกไบต์เพียงพอที่จะแสดงถึงดัชนีที่ถูกต้องทั้งหมด โดยจะสร้างจำนวนเต็ม ปฏิเสธค่าใดๆ ที่หรือสูงกว่าขีดจำกัดที่คำนวณได้ และส่งกลับส่วนที่เหลือหลังจากการยอมรับเท่านั้น `secureRandomChoice` ใช้ผลลัพธ์นั้นเพื่ออ่านหนึ่งคำจากอาร์เรย์ที่มีสิทธิ์
ดัชนีการผลิตเฉพาะเป็นแบบส่วนตัวและไม่ควรทำซ้ำในเอกสารประกอบ การทดสอบเชิงกำหนดจะป้อนส่วนท้ายที่รู้จักและไบต์ในช่วงเพื่อพิสูจน์โฟลว์การควบคุม วิธีนี้จะติดตามการเลือกหนึ่งรายการโดยไม่ต้องเปลี่ยนวลีที่สร้างขึ้นให้เป็นตัวอย่างสาธารณะ
ตัวอย่างการทำงาน: ติดตามไบต์ผ่านการสุ่มตัวอย่างการปฏิเสธไปยังดัชนีรายการเดียว
การออกแบบตัวสร้างตัวเลขสุ่มของฮาร์ดแวร์และการพิสูจน์การเข้ารหัสอย่างเป็นทางการไม่ครอบคลุมอยู่ในแพ็คเกจ ไม่ใช่ทั้งรันไทม์ของเซิร์ฟเวอร์หรือแอปพลิเคชันเนทิฟ การใช้งานเป็นตัวสร้างเบราว์เซอร์ และไม่ควรคัดลอกการรับประกันไปยังระบบที่ไม่เกี่ยวข้อง
นอกจากนี้ยังไม่ได้กล่าวถึงการจัดเก็บหรือการใช้งานในภายหลัง ค่าที่เลือกผ่าน Web Crypto ยังคงสามารถถูกเปิดเผยได้โดยการใช้ซ้ำ ฟิชชิ่ง ประวัติคลิปบอร์ด หรือมัลแวร์ ตัวเลือก CSPRNG แก้ปัญหาที่แหล่งที่มา ไม่ใช่ทุกปัญหาในการจัดการข้อมูลรับรอง
ประเด็นสำคัญ — ตัวสร้างรหัสผ่านจะถามตัวสร้างการเข้ารหัสของเบราว์เซอร์ซึ่งเป็นแหล่งข้อมูลที่เหมาะสมสำหรับความลับ
สายโซ่ที่ดำเนินการได้นั้นสั้น: ทดสอบว่า Web Crypto ใช้งานได้ ปฏิเสธการสร้างเมื่อไม่ได้สร้าง เติมไบต์ ปฏิเสธหางที่ไม่สม่ำเสมอ และแมปค่าที่ยอมรับกับดัชนี ToolAcre ทำให้แต่ละขั้นตอนมองเห็นได้และทดสอบขอบเขตที่ยากลำบาก
ตรวจสอบห่วงโซ่นั้นแทนที่จะอาศัยป้ายกำกับ "สุ่ม" ที่คลุมเครือ จากนั้นตรวจสอบจุดสิ้นสุดและปลายทางแยกกัน การเข้ารหัสลับของเบราว์เซอร์ API เป็นแหล่งที่ถูกต้องสำหรับผลิตภัณฑ์นี้ แต่พื้นที่เก็บข้อมูลไม่ได้อ้างว่ารับรองสิ่งที่อยู่ด้านล่างหรือทุกสิ่งที่ตามมา