การแฮชทั้งหมดจะทำคือแนะนำการสุ่มเพิ่มเติม
ไม่ได้ คุณไม่สามารถแนะนำการสุ่มด้วยกระบวนการที่กำหนดขึ้นได้ คุณสามารถแนะนำการสุ่มด้วยแหล่งข้อมูลสุ่มจริงเท่านั้น
คุณสามารถใช้แฮชเป็น ส่วนประกอบ ของตัวสร้างสุ่มเทียม และตัวสร้างสุ่มเทียม (มีความปลอดภัยในการเข้ารหัส!) นั้นดีพอสำหรับการเข้ารหัสที่ต้องการการสุ่ม แต่องค์ประกอบที่สำคัญอีกอย่างของตัวสร้างสุ่มเทียมนั้นเป็นความลับ ความลับนั้นคือสถานะของตัวสร้างการสุ่ม ซึ่งได้มาจากเมล็ดสุ่ม: ตัวสร้างการสุ่มเทียมไม่ได้สร้างการสุ่ม มันแค่ “คูณ” ในแง่ที่ว่ามันสามารถเปลี่ยนข้อมูลสุ่มจำนวนเล็กน้อยให้กลายเป็นข้อมูลขนาดใหญ่ จำนวนข้อมูลสุ่ม
การแฮชสตริงแบบสุ่มจะลดความสุ่มเท่านั้น: ในทางทฤษฎีเป็นไปได้ว่าสตริงอินพุตสองสตริงมีแฮชเดียวกัน (คุณจะไม่พบสตริงดังกล่าวจริง ๆ และเราไม่แน่ใจว่ามีอยู่จริง แต่มีโอกาสเป็นเช่นนั้น) การสุ่มจะลดลงเพียงเล็กน้อยเท่านั้น ดังนั้นนี่จึงไม่ใช่ช่องโหว่ที่แท้จริงในโค้ดของคุณ แต่เป็นการแทรกซ้อนที่ไม่จำเป็นและเป็นการต่อต้าน
วิธีการเพิ่มการสุ่มให้ได้มากที่สุดคือการรับเอาต์พุตจากเครื่องกำเนิดการสุ่ม เรียก rng.GetBytes (รหัสลับ)
และหยุดอยู่แค่นั้น
การแปลงคีย์เป็น Base64 เพื่อการขนส่งและจากนั้นกลับเป็นไบนารีเพื่อใช้งานไม่มีผลกระทบต่อการเข้ารหัส มันเป็นเพียงการเข้ารหัส ถอดรหัส: การใช้ Base64 เป็นคีย์อาจลดความปลอดภัยเนื่องจากแต่ละไบต์มีค่าที่เป็นไปได้เพียง 1/4 เท่านั้น (วิธีที่ HMAC ใช้คีย์นั้น ไม่สำคัญว่าคุณจะใช้ ฐาน 64 (random_bytes (64))
หรือ Random_bytes (64)
เป็นกุญแจ แต่สิ่งนี้จะมีความสำคัญ ตัวอย่างเช่น สำหรับคีย์ AES ซึ่งมีความยาวที่ยอมรับไม่ได้ด้วยซ้ำ)