Score:0

รหัส Python สำหรับ 'Verfiable Canonical Generation of the Generator g', FIPS 186-4, คืนค่า False

ธง in

แก้ไข: ถ้าใครที่ไม่มีประสบการณ์เช่นฉันมาถึงคำถามนี้มีคำตอบที่ สแต็คโอเวอร์โฟลว์.

ทำไมรหัส Python ดูด้านล่าง ส่งกลับเท็จ?

บริบทเพิ่มเติม: ฉันกำลังจะผ่าน ม.ป.ป.186-4 และในหน้า 43 มีอัลกอริทึม ก.2.3 การสร้างเครื่องกำเนิดไฟฟ้าแบบบัญญัติที่ตรวจสอบได้ gเพื่อสร้างเครื่องกำเนิดไฟฟ้า ฉันเขียนโค้ด Python ดูด้านล่าง ซึ่งเข้ารหัสอัลกอริทึมนี้ อย่างไรก็ตาม มันจะคืนค่าเท็จเสมอเมื่อเทียบกับข้อมูลการทดสอบที่ฉันนำมา เวกเตอร์ทดสอบ NIST (Test Vectors, FIPS-186-4, DSA ฉันได้โพสต์ไฟล์ทั้งหมดไว้ที่ [gist][3)

ป้อนคำอธิบายรูปภาพที่นี่

จาก Crypto.Hash นำเข้า SHA256


P = 0xfbdf34147bf5d8a45671c906923c1dbe86e9123fae5750d6c1986e00a9946f7f833372a436f98f75dc798bb454825eb625d49011d1e4401baacb653bb9dac6cc8ac91e61ba4310458ff6d6ddabcba29db025eedba6e2f837344dee4814e2a7e2e92ceb1e6e665ee08ce187ffd420fee7a99e046a4af719fa8c689630e88f8729
Q = 0x93db61194cb0b9236eea63617d149cd6dd8e2bf1
domain_parameter_seed = 0x75709e9ca555a80cb7ab154e9d29d2775fe215d8
ดัชนี = 0xae
G = 0x7db10e27fffe43fc9582367a449f7be217130cdf89a5eff65fbebefc9478ba39ad03d1b0d0254c0f1b8246d914c0d1df25f55a5dabbb51caa1942403fdc22c832e4d7048ce0ad64cb76252fdcfaecd78722c2e10417495ee9d4e0d8376f891a3042b103de915355c0e60e168cf48c0fa232a13bf9b58a0f9b3ad7db7ad39c536



def แฮช (หมายเลข):
    สตริง = number.to_bytes((number.bit_length()+7)//8, 'ใหญ่')
    ส่งคืน int(SHA256.new(string).hexdigest(), 16)


def compute_gen():
    k = (P - 1) // Q
    สำหรับการนับในช่วง (1, 0xffff):
  
        U = จำนวน + 2^16 * (ดัชนี + 2^16 * (0x6767656e + 2^32 * domain_parameter_seed))
        W = แฮช(U)
        g = ธาร(W, k, P)
        พิมพ์ (ฐานสิบหก (g))
        ถ้า g != 1:
            หยุดพัก
 
    กลับ ก


พิมพ์ (compute_gen() == G)
Score:2
ธง ng

เหตุผลการเข้ารหัสที่ใกล้เคียงที่สุดที่รหัสใช้งานไม่ได้คือไม่ได้ใช้ใบสั่งยา

ดัชนี เป็นบิตสตริงที่มีความยาว 8

เมื่อมันไม่

U = จำนวน + 2^16 * (ดัชนี + 2^16 * (0x6767656e + 2^32 * domain_parameter_seed))

ที่สอง 2^16 มีวัตถุประสงค์เพื่อเป็น $2^8$.

ข้อผิดพลาดในการเขียนโปรแกรมในบรรทัดเดียวกันนั้นคือ ^ หมายถึง XOR ไม่ใช่พลังงาน และมีลำดับความสำคัญต่ำกว่าการบวกและการคูณที่เหนือกว่านั้น

โดยทั่วไปแล้ว รหัสจะใช้จำนวนเต็มโดยที่ควรมี bytetrings Bytetring ช่วยให้การต่อข้อมูลง่ายขึ้น และป้องกันข้อผิดพลาด เช่น ข้อผิดพลาดที่เกิดขึ้นเมื่อไบต์แรกของ โดเมน_พารามิเตอร์_seed เปลี่ยนจาก 0x75 ถึง 0x00ซึ่งถูกต้องตามกฎหมายอย่างสมบูรณ์

โดยใช้ เลขฐานสิบหก และการแปลงกลับเป็นจำนวนเต็มทำงานในบริบท แต่เป็นการฝึกฝนการเขียนโปรแกรมที่แย่มาก ใช้ ย่อยอาหาร.

in flag
ขอบคุณสำหรับคำตอบ. ขออภัยฉันไม่ค่อยคุ้นเคยกับมารยาทที่นี่

โพสต์คำตอบ

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