รูปแบบของคุณใช้งานได้ แต่ไม่จำเป็นต้องมี $r_p$.
ถ้าคุณถอด $r_p$สิ่งสำคัญคือต้องตกลงล่วงหน้าว่าความยาวของบิตของปัจจัยที่ทำให้ไม่เห็นของคุณมีความยาวเท่าไร $r_s$ จะเป็นเพื่อให้ความมุ่งมั่นไม่อ่อนลงโดยการตัดสินใจลบหรือเพิ่มบิตที่จุดเริ่มต้นของ $T$ ในขณะที่เพิ่มหรือลบบิตให้กับสิ่งที่คุณอ้างในภายหลังว่าเป็นค่าของปัจจัยที่ทำให้ไม่เห็น $r_s$.
จากนั้นอลิซก็ส่ง $แฮช(r_s \mathbin\| T)$ (ที่ไหน $\mathbin\|$ หมายถึงการต่อข้อมูล) และเปิดเผยในภายหลัง $r_s$ และ $T$. เพียงใช้แฮชที่ปลอดภัยในการเข้ารหัสซึ่งมีระดับความปลอดภัยอย่างน้อย 128 บิต เช่น SHA256 ใช้อย่างน้อย 128 บิตสำหรับ $r_s$ และตรวจสอบให้แน่ใจว่าเป็นการสุ่มอย่างเท่าเทียมกัน เพื่อป้องกันไม่ให้ Bob บังคับค่าของ $r_s$ เพื่อค้นหาคำทำนายของคุณล่วงหน้า
คุณอาจกังวลเพิ่มเติมว่า Bob สามารถสร้างอนุพันธ์ของความมุ่งมั่นของ Alice ได้ ซึ่งเป็นไปได้หากแฮชมีความเสี่ยงต่อการโจมตีแบบขยายความยาว
สถานการณ์คือ: อลิซยอมรับคำทำนายและประกาศคำมั่นสัญญา จากนั้นบ็อบก็ประกาศคำมั่นสัญญาตามคำมั่นสัญญาที่อิงตามระยะการโจมตีโดยขยายระยะเวลาออกไปโดยทันที โดยมีบางสิ่งต่อท้ายคำทำนายของอลิซ บ็อบไม่สามารถเปิดเผยความมุ่งมั่นของเขาได้จนกว่าอลิซจะเปิดเผยเธอโดยเปิดเผยปัจจัยที่ทำให้ไม่เห็น การปรากฏตัวของปัจจัยที่ทำให้ไม่เห็นซ้ำกันจะน่าสงสัย แต่ถ้ามีคนให้ความสนใจ
คุณสามารถหลีกเลี่ยงทั้งภัยคุกคามนี้และหลีกเลี่ยงความจำเป็นในการยอมรับความยาวบิตของปัจจัยที่ทำให้ไม่เห็นได้ล่วงหน้าโดยใช้หนึ่งในวิธีต่อไปนี้:
คำนวณความมุ่งมั่นเป็น hash(hash(blinding factor) $\mathbin\|$ แฮช (การทำนาย))
ตามที่ @kelalaka ชี้ให้เห็น ให้ใช้ HMAC โดยมีปัจจัยที่ทำให้ไม่เห็นเป็นกุญแจสำคัญ ดังนั้น ความมุ่งมั่น = HMAC-SHA256(blinding factor, การคาดการณ์)