Score:2

บิตแรกของบิตสตริงคืออะไร เช่น สร้างขึ้นโดยใช้ SHA-256

ธง ve

ฉันมีสตริงที่สร้างจาก SHA-256

x = fea5f97f9ca1e1a0a2ae344f4e12a3ab0c4d9221e6bb5d70bc567e39f8fbc3d5

10 บิตแรกมีค่าเท่าใด x?

et flag
ผลลัพธ์ดูเหมือนจะเป็นเลขฐานสิบหก อักขระแต่ละตัวที่นี่ถูกเก็บไว้ใน 4 บิต คุณต้องมี 2 & 1/2 ตัวอักษรเพื่อรับ 10 บิต
Score:2
ธง ng

ชื่อของคำถาม (ตอนนี้) ถามว่า "บิตแรกของบิตสตริงคืออะไร" นั่นจะไม่คลุมเครือหากบิตถูกนำเสนอทีละรายการตามลำดับเวลา หรือเป็นลายลักษณ์อักษรในบริบทที่มีลำดับการอ่านแบบเดิม เช่น ซ้ายไปขวา

แต่เนื้อหาของคำถามเกี่ยวกับ "สตริงที่สร้างจาก sha256" ที่จะอ่านเป็น SHA-256 กำหนดโดย ม.ป.ป.180-4. เป็นอัลกอริทึมที่ส่งออก "สตริงบิต" ของ $256$ บิตและไม่สามารถระบุได้ทันที

เนื้อความของคำถามมี x = ติดตามโดย $64$ อักขระทั้งหมดทั้งตัวเลขหรือตัวอักษรจาก ถึง (ในเครื่องแบบตัวพิมพ์เล็กที่นี่) ซึ่งก็คือ $16=2^4$ ตัวละคร นั่นบ่งบอกว่าผลลัพธ์ของ SHA-256 ถูกเข้ารหัส เลขฐานสิบหกโดยอักขระแต่ละตัวเข้ารหัส 4 บิต (สังเกต $256=64\times4$). นี่เป็นหนึ่งในหลาย ๆ การแสดงบิตสตริงเป็นอักขระทั่วไป

มีหลายวิธีที่แตกต่างกันและเข้ากันไม่ได้ในการแปลงเลขฐานสิบหกเป็นบิต แต่โชคดีที่ในกรณีของ SHA-256 วิธีหนึ่งระบุไว้ใน 3.1 ย่อหน้าย่อย 2 บน หน้าที่ทำเครื่องหมาย 7 ของ FIPS 180-4 (ต้องอ่าน). โดยสรุป บิตที่สำคัญที่สุดจะอยู่อันดับแรก ไม่ว่าจะเป็นระดับ nibble (4 บิต) ไบต์ (8 บิต) หรือเวิร์ด (32 บิตในกรณีของ SHA-256)

จึงไปหาก่อน $i$ บิตสำหรับแฮช SHA-256 ที่เราทำได้

  • ตรวจสอบว่า $0\le ฉัน\le256$มิฉะนั้น สิ่งที่ถามจะไม่ถูกกำหนด
  • ใช้เวลาแรก $\lceil i/4\rceil$ ตัวอักษร (ที่ $\lceil r\rceil$ กับ $r\in\mathbb R$ เป็นจำนวนเต็มที่น้อยที่สุด $r$); ที่นี่ $i=10$, ดังนั้น $\lceil i/4\rceil=3$ดังนั้นเราจึงใช้เวลา เฟอา
  • เขียนอักขระเหล่านี้แต่ละตัว (ตามลำดับการอ่าน) เป็นเลขฐานสอง 4 หลักตามแบบแผน big-endian ต่อ
    0 -> 0000 4 -> 0100 8 -> 1,000 ค -> 1100
    1 -> 0001 5 -> 0101 9 -> 1001 ง -> 1101
    2 -> 0010 6 -> 0110 -> 1010 จ -> 1110
    3 -> 0011 7 -> 0111 ข -> 1011 ฉ -> 1111
    
  • ซึ่งส่งผลให้สตริงของ $4\,\lceil i/4\rceil$ บิต (ในที่นี้คือ 12 บิต 111111101010) ซึ่งเราเก็บไว้เป็นอันดับแรก $i$ บิต (ที่นี่ 1111111010).

สิ่งนี้ใช้กับแฮชทั้งหมดของตระกูล SHA (การแทนที่ $256$ ด้วยความกว้างเอาต์พุต) หากไม่มีข้อกำหนดอื่น ๆ ก็สมเหตุสมผลที่จะนำไปใช้กับแฮชมาตรฐานอื่น ๆ ซึ่งความกว้างของเอาต์พุตเป็นทวีคูณ $32$ (หรือแม้กระทั่ง $8$ หรือ $4$) บิต นั่นเป็นที่ถกเถียงกันสำหรับ MD5 เนื่องจากใช้เพียงเล็กน้อยเอนเดียน การประชุมในลำดับไบต์ภายใน $32$บิตคำและฉันจะไม่สุ่มสี่สุ่มห้าขยายไปยังปริมาณอื่น ๆ ที่ใช้ในการเข้ารหัสและยังแสดงเป็นเลขฐานสิบหกเช่นจำนวนเต็มที่ใช้ใน RSA

Score:0
ธง in

เนื่องจากสิ่งนี้เกี่ยวกับการเขียนโปรแกรมและจำเป็นต้องปิดหรือโอนย้าย ที่นี่ใน Python กับ big-endian;

def LSBBits( hexData, lsbs):

    สเกล = 16 ## เท่ากับเลขฐานสิบหก

    inBinary = bin(int(my_hexdata, สเกล))[2:]
    inBinary = inBinary.zfill(256)
    กลับ inBinary[len(inBinary)-lsbs:]

def MSBBits ( hexData, mbsb):

    สเกล = 16 ## เท่ากับเลขฐานสิบหก

    inBinary = bin(int(my_hexdata, สเกล))[2:]
    inBinary = inBinary.zfill(256)
    ส่งคืนในไบนารี [:mbsb]

my_hexdata = "fea5f97f9ca1e1a0a2ae344f4e12a3ab0c4d9221e6bb5d70bc567e39f8fbc3d5"


พิมพ์ ( LSBBits (my_hexdata, 10))
พิมพ์ ( MSBBits (my_hexdata, 10))

และเอาต์พุตของโปรแกรม

1111010101
1111111010

ความใหญ่และความน้อย เป็นอีกเรื่องหนึ่ง NIST ถือว่าความยิ่งใหญ่.

fgrieu avatar
ng flag
ฉันเกรงว่าคำตอบนี้เกี่ยวกับส่วนที่อยู่นอกหัวข้อของคำถาม
kelalaka avatar
in flag
@fgrieu ฉันคาดว่าจะมีการโยกย้าย ...ใช่ เนื่องจากสิ่งประดิษฐ์ zfill เป็นต้นเหตุ ลบออก ขอบคุณ

โพสต์คำตอบ

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