Score:0

ข้อกำหนดสำหรับ SHA1PRNG อยู่ที่ไหน

ธง in

ฉันค้นหาอัลกอริทึมของ SHA1PRNG ซึ่งใช้งานใน SecureRandom Class ของ Java ไม่มีใครรู้ว่าอัลกอริทึมนี้ทำงานอย่างไร? ฉันไม่พบแหล่งที่มาที่อธิบายอัลกอริทึมโดยละเอียด

เป้าหมายของฉันคือใช้ใน JavaScript แต่ฉันไม่พบการใช้งานใด ๆ เลย ซึ่งฉันต้องทำด้วยตัวเอง (เพื่อการศึกษาเท่านั้นและไม่มีการใช้งานจริง) หากมีคนนำไปใช้แล้ว จะเป็นการดีหากนำไปใช้เป็นข้อมูลอ้างอิง

us flag
นี่เป็นคำถามที่เหมาะกับฟอรัม SO เริ่มต้นมากกว่า เมื่อพูดถึงเรื่องนี้ - ทำไมคุณถึงต้องการใช้อันนั้น คุณสามารถค้นหา [ซอร์สโค้ด](https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/provider/SecureRandom.java) แต่ผู้จำหน่าย JVM/JCE ต่างกัน อาจมีการใช้งานที่แตกต่างกัน JS มีไลบรารีไม่กี่ตัวที่ให้หมายเลขสุ่มที่ปลอดภัยโดยใช้ระบบพื้นฐาน
Cryptomathician avatar
in flag
@ gusto2 ขอขอบคุณที่ให้ซอร์สโค้ดนี้ ฉันกำลังทำงานในโครงการสำหรับมหาวิทยาลัย ซึ่งเซิร์ฟเวอร์ใช้คลาสนี้กับ SHA1PRNG พร้อมเมล็ดพันธุ์เฉพาะเพื่อสร้างคู่คีย์เฉพาะ (เส้นโค้ง ECC, secp256r1) ในการทำงานกับเซิร์ฟเวอร์นั้น ฉันจำเป็นต้องมีการใช้งานจาวาสคริปต์ที่สอดคล้องกัน
Cryptomathician avatar
in flag
@ gusto2 นอกจากนี้ สำหรับปัญหาของฉัน ฉันต้องการทราบว่า PRNG นี้ทำงานอย่างไร แต่ฉันไม่พบแหล่งข้อมูลที่ดีสำหรับอัลกอริทึมนี้
Cryptomathician avatar
in flag
@gusto2 คุณรู้หรือไม่ว่าฉันสามารถหาการใช้งาน JVM/JCE ของผู้จำหน่ายเฉพาะเหล่านี้ได้จากที่ใด ฉันกำลังทำงานในขณะนี้บน Linux และด้วย Oracle JDK 1.8.0 อัปเดต 241
st flag
ใน JavaScript คุณควรใช้ `Crypto.getRandomValues()` https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues] แทนที่จะพยายามม้วน CSRNG ของคุณเอง
Cryptomathician avatar
in flag
@rmalayter ใช้เพื่อการศึกษาเท่านั้น คุณจะเรียนรู้เกี่ยวกับสิ่งเหล่านี้ได้อย่างไรหากคุณไม่ได้รับอนุญาตให้ลองด้วยตัวเองในสภาพแวดล้อมของห้องปฏิบัติการ หากทุกคนไม่พิจารณาเรื่องนี้ ก็จะไม่มีใครเรียนรู้เกี่ยวกับเรื่องนี้ใช่ ไม่เคยสร้างระบบเข้ารหัสของคุณเอง แต่นักเข้ารหัสก็ต้องเริ่มต้นที่ไหนสักแห่งและเรียนรู้เกี่ยวกับสิ่งเหล่านั้น
st flag
@Cryptomatician ขอโทษด้วย คำถามของคุณไม่มีข้อบ่งชี้ใด ๆ "นี่คือเพื่อการเรียนรู้"มีความท้าทายมากมายในการเขียน CSRNG ในสภาพแวดล้อม JavaScript (เบราว์เซอร์) ขั้นแรกให้ได้รับเอนโทรปีแบบสุ่มอย่างปลอดภัยสำหรับการเพาะ จากนั้นจึงป้องกันไม่ให้สคริปต์ของบุคคลที่สามหรือผู้ใช้ปลายทาง "เห็น" เนื้อหาเมล็ดพันธุ์ของคุณหรือตัวเลขสุ่มจริงที่คุณสร้างขึ้น `Crypto.getRandomValues() ในตัวของเบราว์เซอร์ช่วยแก้ปัญหาเหล่านี้ได้โดยใช้ CSRNG ของระบบปฏิบัติการโดยตรงผ่าน syscall
Cryptomathician avatar
in flag
@rmalayter ขอบคุณสำหรับคำอธิบาย อาจเป็นคำถามทั่วไปมากขึ้น เป็นไปได้ไหมที่จะเขียน CSPRNG ใน JavaScript (เบราว์เซอร์) เพื่อให้สามารถเอาชนะความท้าทายที่คุณกล่าวถึงโดยไม่ต้องใช้ CSPRNG นอกเบราว์เซอร์
st flag
@Cryptomatician ขึ้นอยู่กับความต้องการด้านความปลอดภัยของแอพ หากคุณไม่สนใจว่าผู้ใช้ปลายทางจะเห็นสถานะหรือไม่สามารถยุ่งเกี่ยวกับเอาต์พุต ในทางทฤษฎีแล้ว คุณสามารถรวบรวมเอนโทรปีจากการเคลื่อนไหวของเมาส์และแป้นพิมพ์ของผู้ใช้ ให้ใช้ฟังก์ชันแฮชเข้ารหัสเพื่อแฮชข้อมูลเหล่านั้นลงในเมล็ด ทั้งหมดนี้สามารถทำได้ในเบราว์เซอร์ แต่ผู้ใช้ปลายทางสามารถดูหรือแก้ไขได้อย่างง่ายดายโดยการกด F12 และเปิดเครื่องมือสำหรับนักพัฒนา แม้ว่าคุณจะใช้ `window.crypto.getRandomValues` แทน ผู้ใช้สามารถเลือกที่จะไม่ใช้ค่าเหล่านั้นและแทนที่ค่าของตัวเองเมื่อทำการเรียก POST หรือ API
Score:2
ธง us

เป้าหมายของฉันคือใช้ใน JavaScript แต่ฉันไม่พบการใช้งานใด ๆ

คุณสามารถค้นหาซอร์สโค้ดได้ แต่ผู้ให้บริการ JVM/JCE ที่แตกต่างกันอาจมีการใช้งานที่แตกต่างกัน

ดู: https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/provider/SecureRandom.java

นอกจากนี้ สำหรับปัญหาของฉัน ฉันต้องการทราบว่า PRNG นี้ทำงานอย่างไร

บนออราเคิล เอกสาร ไซต์ SHA1PRNG อธิบายว่า:

ชื่อของอัลกอริทึมการสร้างตัวเลขสุ่มหลอก (PRNG) ที่จัดทำโดยผู้ให้บริการ SUN อัลกอริทึมนี้ใช้ SHA-1 เป็นรากฐานของ PRNG โดยจะคำนวณแฮช SHA-1 เหนือค่าเมล็ดสุ่มจริงที่เชื่อมกับตัวนับ 64 บิตซึ่งเพิ่มขึ้นทีละ 1 สำหรับการดำเนินการแต่ละครั้ง จากเอาต์พุต SHA-1 160 บิต จะใช้เพียง 64 บิตเท่านั้น

คุณทราบหรือไม่ว่าฉันจะค้นหาการใช้งาน JVM/JCE ของผู้ให้บริการเฉพาะเหล่านี้ได้จากที่ใด

ดูเหมือนว่า SHA1PRNG จะสืบทอดมาสำหรับ Java เวอร์ชันก่อนหน้า ดังนั้นควรเป็นเวอร์ชันที่เข้ากันได้มากที่สุดที่คุณจะได้รับ

โพสต์คำตอบ

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