เครื่องกำเนิดเลขสุ่มเทียมที่มีความปลอดภัยทางด้านการเข้ารหัส
เครื่องกำเนิดเลขสุ่มเทียมที่ปลอดภัยทางด้านการเข้ารหัส ( CSPRNG ) หรือเครื่องกำเนิดเลขสุ่มเทียมทางด้านการเข้ารหัส ( CPRNG ) คือเครื่องกำเนิดเลขสุ่มเทียม (PRNG) ที่มีคุณสมบัติที่ทำให้เหมาะสำหรับการใช้งานในด้านการเข้ารหัสเรียกอีกอย่างว่าเครื่องกำเนิดเลขสุ่มทางด้านการเข้ารหัส ( CRNG )
พื้นหลัง
แอปพลิเคชัน ทางด้านการเข้ารหัส ส่วนใหญ่ต้องการ ตัวเลข สุ่มตัวอย่างเช่น:
- การสร้างกุญแจ
- เวกเตอร์เริ่มต้น
- นอนเซส
- เกลือในโครงการลงนามรับรองบางโครงการ รวมถึงECDSAและRSASSA-PSS
- การสร้างโทเค็น
"คุณภาพ" ของความสุ่มที่จำเป็นสำหรับแอปพลิเคชันเหล่านี้แตกต่างกันไป ตัวอย่างเช่น การสร้างค่าnonceในบางโปรโตคอลต้องการเพียงแค่ความไม่ซ้ำกัน ในทางกลับกัน การสร้างมาสเตอร์คีย์ต้องการคุณภาพที่สูงกว่า เช่นเอนโทรปี ที่สูงขึ้น และในกรณีของรหัสแบบใช้ครั้งเดียว (one-time pad ) การรับประกัน ทางทฤษฎีสารสนเทศเกี่ยวกับความลับที่สมบูรณ์แบบจะเกิดขึ้นได้ก็ต่อเมื่อวัสดุของคีย์มาจากแหล่งกำเนิดแบบสุ่มที่แท้จริงที่มีเอนโทรปีสูง ดังนั้นเครื่องกำเนิดตัวเลขสุ่มเทียมแบบใดก็ได้จึงไม่เพียงพอ
ตามหลักการแล้ว การสร้างตัวเลขสุ่มใน CSPRNG จะใช้เอนโทรปีที่ได้จากแหล่งคุณภาพสูง ซึ่งโดยทั่วไปคือAPI การสร้างตัวเลขสุ่มของระบบปฏิบัติการ อย่างไรก็ตาม พบความสัมพันธ์ที่ไม่คาดคิดในกระบวนการที่ดูเหมือนจะเป็นอิสระต่อกันหลายอย่าง จากมุมมองทางทฤษฎีสารสนเทศ ปริมาณความสุ่มหรือเอนโทรปีที่สามารถสร้างได้นั้นเท่ากับเอนโทรปีที่ระบบจัดหาให้ แต่บางครั้งในสถานการณ์จริง ตัวเลขที่ต้องการอาจมีความสุ่มมากกว่าที่เอนโทรปีที่มีอยู่สามารถให้ได้ นอกจากนี้ กระบวนการดึงความสุ่มจากระบบที่กำลังทำงานอยู่นั้นช้าในทางปฏิบัติ ในกรณีเช่นนี้ บางครั้งอาจใช้ CSPRNG ได้ CSPRNG สามารถ "ขยาย" เอนโทรปีที่มีอยู่ให้ครอบคลุมบิตได้มากขึ้น
ความต้องการ
ข้อกำหนดของ PRNG ทั่วไปนั้นก็เป็นไปตามข้อกำหนดของ PRNG ที่มีความปลอดภัยทางด้านการเข้ารหัสลับเช่นกัน แต่ในทางกลับกันนั้นไม่เป็นความจริง ข้อกำหนดของ CSPRNG แบ่งออกเป็นสองกลุ่ม:
- ผ่านการทดสอบความสุ่มทาง สถิติแล้ว :
- CSPRNG ทุกตัวควรผ่านการทดสอบบิตถัดไปนั่นคือ เมื่อกำหนด บิต k บิตแรก ของลำดับสุ่มแล้ว จะไม่มี อัลกอริทึม เวลาพหุนาม ใด ที่สามารถทำนายบิตที่ ( k + 1) ได้ด้วยความน่าจะเป็นของความสำเร็จที่ดีกว่า 50% อย่างมีนัยสำคัญ[ 1 ]
- แอนดรูว์ เหยาพิสูจน์ในปี 1982 ว่าเครื่องกำเนิดที่ผ่านการทดสอบบิตถัดไปจะผ่านการทดสอบทางสถิติแบบพหุนามเวลาอื่นๆ ทั้งหมดสำหรับความสุ่ม กล่าวอีกนัยหนึ่งคือ ไม่มีอัลกอริทึมแบบพหุนามเวลาใดที่จะสามารถแยกแยะผลลัพธ์ของ RNG ออกจากความสุ่มที่แท้จริงได้[ 2 ]
- แทนที่จะใช้ความซับซ้อนของเวลาพหุนาม ตัวชี้วัดอื่นที่นำมาพิจารณาในทางปฏิบัติคือจำนวนการดำเนินการทั้งหมดที่จำเป็นสำหรับตัวแยกแยะเพื่อแยกเอาต์พุตออกจากความสุ่มที่แท้จริง จากจำนวนการดำเนินการนี้ เรายังสามารถกำหนดระดับความปลอดภัย (บิตของความปลอดภัย) สำหรับ CSPRNG เฉพาะเพื่อป้องกันการโจมตีการแยกแยะได้อีกด้วย[ 3 ] [ 4 ]
- พวกมันสามารถทนต่อการโจมตีที่รุนแรงได้ดี แม้ว่าสถานะเริ่มต้นหรือสถานะการทำงานบางส่วนจะสามารถเข้าถึงได้โดยผู้โจมตีก็ตาม: [ 5 ]
- CSPRNG ทุกตัวควรทนต่อ "การโจมตีขยายการประนีประนอมสถานะ" [ 5 ] : 4 ในกรณีที่ส่วนใดส่วนหนึ่งหรือทั้งหมดของสถานะถูกเปิดเผย (หรือเดาได้อย่างถูกต้อง) จะต้องเป็นไปไม่ได้ที่จะสร้างกระแสตัวเลขสุ่มขึ้นใหม่ก่อนการเปิดเผย นอกจากนี้ หากมีการป้อนเอนโทรปีในขณะที่กำลังทำงานอยู่ จะต้องเป็นไปไม่ได้ที่จะใช้ความรู้เกี่ยวกับสถานะของอินพุตเพื่อทำนายเงื่อนไขในอนาคตของสถานะ CSPRNG
- ตัวอย่างเช่น หากตัวสร้างเลขสุ่มเทียม (PRNG) ที่กำลังพิจารณาอยู่นั้นสร้างผลลัพธ์โดยการคำนวณบิตของค่าพายตามลำดับ โดยเริ่มจากจุดที่ไม่ทราบแน่ชัดในการขยายเลขฐานสอง ผลลัพธ์นั้นอาจผ่านการทดสอบบิตถัดไปและถือว่าเป็นการสุ่มทางสถิติ เนื่องจากสันนิษฐานว่าค่าพายเป็นจำนวนปกติอย่างไรก็ตาม อัลกอริทึมนี้ไม่ปลอดภัยในเชิงการเข้ารหัสลับ ผู้โจมตีที่สามารถระบุได้ว่าบิตใดของค่าพายกำลังถูกใช้งานอยู่ (เช่น สถานะของอัลกอริทึม) จะสามารถคำนวณบิตก่อนหน้าทั้งหมดได้เช่นกัน
ตัวสร้างเลขสุ่มส่วนใหญ่ไม่เหมาะสำหรับใช้เป็น CSPRNG และจะล้มเหลวทั้งสองประการ:
- แม้ว่าผลลัพธ์ของ PRNG ส่วนใหญ่จะดูเหมือนสุ่มเมื่อทดสอบด้วยการทดสอบทางสถิติต่างๆ แต่ก็ไม่สามารถต้านทานการวิเคราะห์ย้อนกลับที่แน่ชัดได้ อาจมีการทดสอบทางสถิติเฉพาะที่ปรับแต่งมาเป็นพิเศษเพื่อทดสอบ PRNG ดังกล่าว ซึ่งแสดงให้เห็นว่าตัวเลขสุ่มนั้นไม่ได้เป็นสุ่มอย่างแท้จริง ในขณะเดียวกัน เนื่องจาก CSPRNG ถูกออกแบบมาให้ต้านทานการทดสอบทางสถิติทั้งหมด (และเชื่อว่ามีความปลอดภัยในด้านนี้จนกว่าจะมีการค้นพบการทดสอบดังกล่าว) CSPRNG จึงสามารถใช้แทนเครื่องกำเนิดตัวเลขสุ่มแท้จริงใดๆ ในแอปพลิเคชันที่ไม่เกี่ยวข้องกับการเข้ารหัสได้เช่นกัน
- สำหรับ PRNG ส่วนใหญ่ เมื่อสถานะของมันถูกเปิดเผย ตัวเลขสุ่มในอดีตทั้งหมดสามารถทำนายย้อนหลังได้ ทำให้ผู้โจมตีสามารถอ่านข้อความในอดีตทั้งหมด รวมถึงข้อความในอนาคตได้ด้วย CSPRNG ถูกออกแบบมาโดยเฉพาะเพื่อต้านทาน การวิเคราะห์ทางคริ ปโต ประเภทนี้
คำจำกัดความ
ในบริบทเชิงอะซิมโทติกตระกูลของฟังก์ชันที่คำนวณได้ในเวลาพหุนามเชิงกำหนดสำหรับพหุนามp บางตัว ถือ เป็นตัวสร้างเลขสุ่มเทียม (PRNG หรือ PRG ในบางเอกสารอ้างอิง) หากฟังก์ชันนั้นยืดความยาวของอินพุต ( สำหรับk ใดๆ ) และหากเอาต์พุตของฟังก์ชันนั้นไม่สามารถแยกแยะได้จากการสุ่มที่แท้จริง กล่าวคือ สำหรับอัลกอริธึมเวลาพหุนามเชิงความน่าจะเป็นA ใดๆ ซึ่งให้เอาต์พุตเป็น1หรือ0เป็นตัวแยกแยะ
สำหรับฟังก์ชันที่ไม่สำคัญ บาง ฟังก์ชัน[ 6 ] (สัญลักษณ์นี้หมายความว่าxถูกเลือกแบบสุ่มอย่างสม่ำเสมอจากเซตX )
มีลักษณะเฉพาะที่เทียบเท่ากัน: สำหรับตระกูลฟังก์ชันใดๆG จะเป็น PRNG ก็ต่อเมื่อบิตเอาต์พุตถัดไปของGไม่สามารถทำนายได้ด้วยอัลกอริทึมเวลาพหุนาม[ 7 ]
PRNG ที่ปลอดภัยแบบไปข้างหน้าที่มีความยาวบล็อกคือ PRNG โดยที่สตริงอินพุตที่มีความยาวkคือสถานะปัจจุบันในช่วงเวลาiและเอาต์พุต ( , ) ประกอบด้วยสถานะถัดไปและบล็อกเอาต์พุตแบบสุ่มเทียมของช่วงเวลาi ซึ่งทนต่อการขยายการประนีประนอมสถานะในความหมายต่อไปนี้ หาก เลือกสถานะเริ่มต้นแบบ สุ่มอย่างสม่ำเสมอจาก แล้วสำหรับi ใดๆ ลำดับจะต้องไม่สามารถแยกแยะได้ทางการคำนวณจากโดยที่ถูกเลือกแบบสุ่มอย่างสม่ำเสมอจาก[ 8 ]
สามารถสร้างPRNG ใดๆ ให้เป็น PRNG ที่ปลอดภัยแบบส่งต่อ (forward secure PRNG) ที่มีความยาวบล็อกได้ โดยการแบ่งเอาต์พุตออกเป็นสถานะถัดไปและเอาต์พุตจริง ทำได้โดยการตั้งค่าโดยที่และ; จากนั้นGจะเป็น PRNG ที่ปลอดภัยแบบส่งต่อ โดยมี เป็นสถานะถัดไป และเป็นบล็อกเอาต์พุตแบบสุ่มเทียมของช่วงเวลาปัจจุบัน
การสกัดเอนโทรปี
Santha และ Vazirani พิสูจน์แล้วว่าสตรีมบิตหลายสตรีมที่มีความสุ่มอ่อนๆ สามารถรวมกันเพื่อสร้างสตรีมบิตกึ่งสุ่มที่มีคุณภาพสูงขึ้นได้[ 9 ] ก่อนหน้านั้นJohn von Neumannได้เสนออัลกอริทึมง่ายๆที่สามารถขจัดอคติจำนวนมากในสตรีมบิตใดๆ ได้[ 10 ]
การออกแบบ
การออกแบบ CSPRNG แบ่งออกเป็นสองประเภท:
- การออกแบบที่อิงตามหลักการเข้ารหัสพื้นฐาน เช่นรหัสลับและแฮชเข้ารหัส
- การออกแบบโดยอิงจากปัญหาทางคณิตศาสตร์ที่คิดว่ายาก
การออกแบบโดยอิงจากหลักการเข้ารหัสลับขั้นพื้นฐาน
- สามารถแปลง การเข้ารหัสแบบบล็อกที่ปลอดภัยให้เป็น CSPRNG ได้โดยการเรียกใช้ในโหมดนับจำนวนโดยใช้โครงสร้างพิเศษที่NISTใน SP 800-90A เรียกว่าCTR_DBRGเป็นต้น โดยทั่วไป CTR_DBRG จะใช้มาตรฐานการเข้ารหัสขั้นสูง (AES)
- AES- CTR_DRBGมักใช้เป็นตัวสร้างเลขสุ่มในระบบที่ใช้การเข้ารหัส AES [ 11 ] [ 12 ]
- รูปแบบ NIST CTR_DRBG จะลบคีย์หลังจากที่ได้ค่าสุ่มที่ร้องขอแล้วโดยการทำงานรอบเพิ่มเติม ซึ่งเป็นการสิ้นเปลืองในแง่ของประสิทธิภาพ แต่ไม่ได้ทำให้เกิดปัญหาเกี่ยวกับความลับแบบส่งต่อในทันที อย่างไรก็ตาม เมื่อตระหนักถึงผลกระทบด้านประสิทธิภาพ NIST จึงแนะนำ "อินเทอร์เฟซ AES-CTR-DRBG แบบขยาย" สำหรับ การส่ง โครงการการเข้ารหัสหลังควอนตัม อินเทอร์เฟซนี้อนุญาตให้สร้างชุดค่าสุ่มได้หลายชุดโดยไม่ต้องลบข้อมูลระหว่างนั้น โดยจะลบข้อมูลก็ต่อเมื่อผู้ใช้ส่งสัญญาณอย่างชัดเจนว่าสิ้นสุดการร้องขอแล้วเท่านั้น ส่งผลให้คีย์อาจยังคงอยู่ในหน่วยความจำเป็นเวลานานหากใช้ "อินเทอร์เฟซแบบขยาย" ในทางที่ผิด RNG แบบ "ลบคีย์อย่างรวดเร็ว" รุ่นใหม่จะลบคีย์พร้อมกับค่าสุ่มทันทีที่ร้องขอค่าสุ่ม[ 13 ]
- สามารถแปลงการเข้ารหัสแบบสตรีมให้เป็น CSPRNG ได้ ตัวอย่างเช่น RC4, ISAACและChaCha20เป็นต้น ก็ได้ทำเช่นเดียวกัน
- แฮชที่มีความปลอดภัยทางด้านการเข้ารหัสลับอาจเป็นพื้นฐานของ CSPRNG ที่ดีได้เช่นกัน โดยใช้โครงสร้างที่ NIST เรียกว่าHash DRBGเป็นต้น
- สามารถใช้ HMAC primitive เป็นพื้นฐานของ CSPRNG ได้ เช่น เป็นส่วนหนึ่งของโครงสร้างที่ NIST เรียกว่าHMAC DRBG
การออกแบบเชิงทฤษฎีจำนวน
- อั ลกอริทึม Blum Blum Shubมีการพิสูจน์ความปลอดภัยโดยอาศัยความยากของปัญหาเศษเหลือกำลังสองเนื่องจากวิธีเดียวที่ทราบในการแก้ปัญหานี้คือการแยกตัวประกอบของตัวหารร่วมมาก จึงโดยทั่วไปถือว่าความยากของการแยกตัวประกอบจำนวนเต็มเป็นการพิสูจน์ความปลอดภัยแบบมีเงื่อนไขสำหรับอัลกอริทึม Blum Blum Shub อย่างไรก็ตาม อัลกอริทึมนี้ไม่มีประสิทธิภาพมากนักและจึงไม่สามารถนำไปใช้ได้จริงเว้นแต่ต้องการความปลอดภัยในระดับสูงมาก
- อัลกอริทึม Blum–Micaliมีการพิสูจน์ความปลอดภัยโดยอาศัยความยากของปัญหาลอการิทึมแบบไม่ต่อเนื่องแต่ก็ไม่มีประสิทธิภาพมากนักเช่นกัน
- Daniel Brown จากCerticomได้เขียนบทพิสูจน์ความปลอดภัยในปี 2006 สำหรับDual EC DRBGโดยอิงจากสมมติฐานความยากของDecisional Diffie–Hellman , ปัญหา x-logarithmและปัญหาจุดตัดทอน บทพิสูจน์ในปี 2006 ระบุอย่างชัดเจนว่าoutlen (จำนวนบิตที่ให้ต่อการวนซ้ำ) มีค่าต่ำกว่าในมาตรฐาน Dual_EC_DRBG และค่าPและQในมาตรฐาน Dual_EC_DRBG (ซึ่งถูกเปิดเผยในปี 2013 ว่าอาจมีช่องโหว่ที่ NSA แทรกไว้) ถูกแทนที่ด้วยค่าที่ไม่มีช่องโหว่
แผนปฏิบัติการ
แผนการสร้างตัวเลขสุ่มเทียมแบบ CSPRNG ที่ "ใช้งานได้จริง" ไม่เพียงแต่รวมถึงอัลกอริทึม CSPRNG เท่านั้น แต่ยังรวมถึงวิธีการเริ่มต้น (" seed ") โดยที่ seed นั้นยังคงเป็นความลับอยู่ มีการกำหนดแผนการดังกล่าวไว้หลายแบบ รวมถึง:
- การใช้งาน/dev/randomในระบบที่คล้าย Unix
- Yarrowเป็นโปรแกรมที่พยายามประเมินคุณภาพเชิงเอนโทรปีของข้อมูลป้อนเข้า และใช้ SHA-1 และ 3DES ภายใน Yarrow ถูกใช้ในmacOSและระบบปฏิบัติการอื่นๆ ของ Apple จนถึงประมาณเดือนธันวาคม 2019 หลังจากนั้นจึงเปลี่ยนไปใช้ Fortuna
- Fortunaซึ่งเป็นตัวเข้ารหัสลับรุ่นต่อจาก Yarrow ไม่ได้พยายามประเมินคุณภาพเชิงเอนโทรปีของข้อมูลนำเข้า แต่ใช้ SHA-256 และ "การเข้ารหัสแบบบล็อกที่ดีใดๆ ก็ได้" Fortuna ถูกใช้ใน FreeBSD และ Apple ก็เปลี่ยนมาใช้ Fortuna สำหรับระบบปฏิบัติการ Apple ส่วนใหญ่หรือทั้งหมดตั้งแต่ประมาณเดือนธันวาคม 2019
- CSPRNG ของเคอร์เนล Linux ซึ่งใช้ ChaCha20 ในการสร้างข้อมูล[ 14 ]และBLAKE2sในการรับเอนโทรปี[ 15 ]
- arc4randomเป็น CSPRNG ในระบบที่คล้าย Unix ซึ่งใช้ /dev/random เป็น ค่าเริ่มต้น เดิมทีนั้นใช้ RC4เป็นพื้นฐานแต่การใช้งานหลักทั้งหมดในปัจจุบันใช้ ChaCha20 [ 16 ] [ 17 ] [ 18 ]
- CryptGenRandomซึ่งเป็นส่วนหนึ่งของ CryptoAPIจาก Microsoftมีให้ใช้งานบน Windows โดย Windows เวอร์ชันต่างๆ จะใช้การใช้งานที่แตกต่างกัน
- มาตรฐานANSI X9.17 ( การจัดการคีย์สถาบันการเงิน (ขายส่ง) ) ซึ่งได้รับการยอมรับเป็น มาตรฐาน FIPSเช่นกัน โดยรับอินพุตเป็น ชุดคีย์ TDEA ( ตัวเลือกคีย์ 2 ) k และ (ค่าเริ่มต้นของ ) เมล็ดสุ่ม 64 บิตs [ 19 ]ทุกครั้งที่ต้องการหมายเลขสุ่ม จะดำเนินการตามขั้นตอนต่อไปนี้:
- รับข้อมูลวันที่และเวลาปัจจุบัน(D)ด้วยความละเอียดสูงสุดเท่าที่จะเป็นไปได้
- คำนวณค่าชั่วคราวt = TDEA ( D )
- คำนวณค่าสุ่มx = TDEA ( s ⊕ t )โดยที่ ⊕ หมายถึงการดำเนินการเอกซ์คลูซีฟออร์แบบบิต
- อัปเดต seed s = TDEA ( x ⊕ t ) .
เห็นได้ชัดว่าเทคนิคนี้สามารถนำไปใช้กับการเข้ารหัสแบบบล็อกใดๆ ก็ได้โดยได้มีการเสนอให้ใช้AES [ 20 ]หากคีย์kรั่วไหล สตรีม X9.17 ทั้งหมดก็สามารถคาดเดาได้ จุดอ่อนนี้ถูกอ้างถึงว่าเป็นเหตุผลในการสร้าง Yarrow [ 21 ]
แผนการทั้งหมดที่กล่าวมาข้างต้น ยกเว้น X9.17 ยังผสมผสานสถานะของ CSPRNG กับแหล่งเอนโทรปีเพิ่มเติมอีกด้วย ดังนั้นจึงไม่ใช่เครื่องกำเนิดเลขสุ่มเทียม "บริสุทธิ์" ในแง่ที่ว่าผลลัพธ์ไม่ได้ถูกกำหนดโดยสถานะเริ่มต้นอย่างสมบูรณ์ การเพิ่มเติมนี้มีจุดมุ่งหมายเพื่อป้องกันการโจมตีแม้ว่าสถานะเริ่มต้นจะถูกบุกรุกก็ตาม[ a ]
มาตรฐาน
มีการกำหนดมาตรฐาน CSPRNG หลายแบบ ตัวอย่างเช่น:
- FIPS 186-4 [ 23 ]
- NIST SP 800-90A
PRNG ตัวที่สามในมาตรฐานนี้CTR DRBGอิงตามการเข้ารหัสแบบบล็อกที่ทำงานในโหมดตัวนับ มีการออกแบบที่ไม่เป็นที่ถกเถียง แต่ได้รับการพิสูจน์แล้วว่าอ่อนแอกว่าในแง่ของการโจมตีแบบแยกแยะ เมื่อเทียบกับระดับความปลอดภัยของการเข้ารหัสแบบบล็อกพื้นฐาน เมื่อจำนวนบิตที่ส่งออกจาก PRNG นี้มากกว่าสองยกกำลังขนาดบล็อกของการเข้ารหัสแบบบล็อกพื้นฐานในหน่วยบิต[ 26 ]
เมื่อจำนวนบิตสูงสุดที่ส่งออกจาก PRNG นี้เท่ากับขนาดบล็อก 2 ผลลัพธ์ที่ได้จะให้ระดับความปลอดภัยที่คาดหวังทางคณิตศาสตร์ตามที่ขนาดคีย์ควรจะสร้าง แต่ผลลัพธ์ที่ได้นั้นไม่สามารถแยกแยะได้จากตัวสร้างเลขสุ่มที่แท้จริง[ 26 ]เมื่อจำนวนบิตสูงสุดที่ส่งออกจาก PRNG นี้น้อยกว่านั้น จะได้ระดับความปลอดภัยที่คาดหวัง และผลลัพธ์ที่ได้ดูเหมือนจะไม่สามารถแยกแยะได้จากตัวสร้างเลขสุ่มที่แท้จริง[ 26 ]
ในการแก้ไขครั้งต่อไป พบว่าระดับความปลอดภัย ที่อ้างไว้ สำหรับ CTR_DRBG นั้นขึ้นอยู่กับการจำกัดจำนวนคำขอสร้างทั้งหมดและจำนวนบิตที่ให้ต่อคำขอสร้างแต่ละครั้ง
PRNG ตัวที่สี่และตัวสุดท้ายในมาตรฐานนี้มีชื่อว่าDual EC DRBGมีการแสดงให้เห็นแล้วว่าไม่ปลอดภัยในการเข้ารหัส และเชื่อกันว่ามีช่องโหว่ NSA ที่สามารถขโมยข้อมูลได้[ 27 ]
- NIST SP 800-90A Rev.1
- ANSI X9.17-1985 ภาคผนวก C
- ANSI X9.31-1998 ภาคผนวก A.2.4
- ANSI X9.62-1998 ภาคผนวก A.4 ซึ่งถูกแทนที่ด้วย ANSI X9.62-2005 ภาคผนวก D (HMAC_DRBG)
NISTเป็นแหล่งอ้างอิงที่ดี [ 28 ]
นอกจากนี้ยังมีมาตรฐานสำหรับการทดสอบทางสถิติของการออกแบบ CSPRNG ใหม่ด้วย:
- ชุดทดสอบทางสถิติสำหรับตัวสร้างตัวเลขสุ่มและตัวเลขสุ่มเทียม NIST Special Publication 800-22 [ 29 ]
ช่องโหว่ด้านความปลอดภัย
ช่องโหว่การขโมยข้อมูลของ NSA ในตัวสร้างเลขสุ่ม Dual_EC_DRBG
The Guardianและ The New York Timesรายงานในปี 2013 ว่าสำนักงานความมั่นคงแห่งชาติ (NSA) ได้แทรกช่องโหว่เข้าไปในเครื่องกำเนิดตัวเลขสุ่มเทียม (PRNG) ของ NIST SP 800-90Aซึ่งทำให้ NSA สามารถถอดรหัสข้อมูลที่ถูกเข้ารหัสโดยใช้ Dual EC DRBG ได้อย่างง่ายดาย ทั้งสองรายงาน [ 30 ] [ 31 ]ว่า ตามที่ผู้เชี่ยวชาญด้านความปลอดภัยอิสระสงสัยมานานแล้ว [ 32 ] NSA ได้นำจุดอ่อนเข้าไปในมาตรฐาน CSPRNG 800-90 ซึ่งได้รับการยืนยันเป็นครั้งแรกโดยเอกสารลับสุดยอดฉบับหนึ่งที่รั่วไหลไปยัง The Guardianโดย Edward Snowden NSA ทำงานอย่างลับๆ เพื่อให้มาตรฐานความปลอดภัยฉบับร่างของ NIST เวอร์ชันของตนเองได้รับการอนุมัติให้ใช้ทั่วโลกในปี 2006 เอกสารที่รั่วไหลระบุว่า "ในที่สุด NSA ก็กลายเป็นบรรณาธิการแต่เพียงผู้เดียว" แม้จะทราบถึงศักยภาพของ ช่องโหว่ การขโมยข้อมูลและข้อบกพร่องสำคัญอื่นๆ ของ Dual_EC_DRBG แล้วก็ตาม บริษัทหลายแห่ง เช่น RSA Securityยังคงใช้ Dual_EC_DRBG ต่อไปจนกระทั่งได้รับการยืนยันว่ามีช่องโหว่ดังกล่าวในปี 2013 [ 33 ] RSA Security ได้รับเงิน 10 ล้านดอลลาร์สหรัฐจาก NSA เพื่อดำเนินการดังกล่าว [ 34 ]
การโจมตี DUHK
เมื่อวันที่ 23 ตุลาคม 2560 Shaanan Cohney , Matthew GreenและNadia Heningerนักเข้ารหัสลับจากมหาวิทยาลัยเพนซิลเวเนียและมหาวิทยาลัยจอห์นส์ฮอปกินส์ได้เปิดเผยรายละเอียดของการโจมตี DUHK (Don't Use Hard-coded Keys) บนWPA2ซึ่งผู้ผลิตฮาร์ดแวร์ใช้คีย์เมล็ดพันธุ์ที่กำหนดไว้ล่วงหน้าสำหรับอัลกอริทึม RNG ANSI X9.31 โดยระบุว่า "ผู้โจมตีสามารถใช้การโจมตีแบบ Brute-force กับข้อมูลที่เข้ารหัสเพื่อค้นหาพารามิเตอร์การเข้ารหัสที่เหลือและอนุมานคีย์การเข้ารหัสหลักที่ใช้ในการเข้ารหัสเซสชันเว็บหรือ การเชื่อมต่อ เครือข่ายส่วนตัวเสมือน (VPN)" [ 35 ] [ 36 ]
เครื่องเข้ารหัสสีม่วงของญี่ปุ่น
ในช่วงสงครามโลกครั้งที่สองญี่ปุ่นใช้เครื่องเข้ารหัสสำหรับการสื่อสารทางการทูต สหรัฐอเมริกาสามารถถอดรหัสและอ่านข้อความได้ ส่วนใหญ่เป็นเพราะ "ค่าคีย์" ที่ใช้ไม่ได้สุ่มอย่างเพียงพอ[ 37 ]
ลิงก์ภายนอก
- RFC 4086ข้อกำหนดเรื่องความสุ่มเพื่อความปลอดภัย
- "กลุ่มเอนโทรปี" ในภาษา Java สำหรับสร้างเลขสุ่มที่ไม่สามารถคาดเดาได้และมีความปลอดภัยทางด้านการเข้ารหัสลับเก็บถาวรเมื่อวันที่ 2 ธันวาคม 2008 ที่Wayback Machine
- คลาสมาตรฐานของ Java ที่ให้ตัวสร้างเลขสุ่มเทียม (PRNG) ที่มีความแข็งแกร่งทางด้านการเข้ารหัสลับ
- สร้างเลขสุ่มที่มีความปลอดภัยทางด้านการเข้ารหัสบน Windows โดยไม่ต้องใช้ CryptoAPI
- ความปลอดภัยที่คาดการณ์ไว้ของเครื่องกำเนิดตัวเลขสุ่มแบบวงรี ANSI-NISTโดย Daniel RL Brown, IACR ePrint 2006/117
- การวิเคราะห์ความปลอดภัยของเครื่องกำเนิดเลขสุ่มแบบวงรี NIST SP 800-90โดย Daniel RL Brown และ Kristian Gjosteen, IACR ePrint 2007/048 จะตีพิมพ์ใน CRYPTO 2007
- การวิเคราะห์รหัสลับของเครื่องกำเนิดเลขสุ่มเทียมแบบเส้นโค้งวงรีคู่ , Berry Schoenmakers และ Andrey Sidorenko, IACR ePrint 2006/190
- เครื่องกำเนิดเลขสุ่มเทียมที่มีประสิทธิภาพโดยอาศัยสมมติฐาน DDH , Reza Rezaeian Farashahi และ Berry Schoenmakers และ Andrey Sidorenko, IACR ePrint 2006/321
- การวิเคราะห์เครื่องกำเนิดเลขสุ่มของลินุกซ์โดย Zvi Gutterman, Benny Pinkas และ Tzachy Reinman
- ดาวน์โหลดเอกสารและซอฟต์แวร์ชุดทดสอบทางสถิติของ NIST