Score:1

พารามิเตอร์ชดเชยใน BLAKE2b

ธง in

ในหลักสูตรของฉันเกี่ยวกับการเข้ารหัส เราเริ่มมองหาฟังก์ชันแฮชในการทำการบ้าน เราต้องเลือกฟังก์ชันแฮชสมัยใหม่และอธิบายในชั้นเรียน ฉันเลือก BLAKE2b ซึ่งฉันเข้าใจได้ดีเมื่ออธิบายเป็นคำพูด แต่การนำไปใช้อย่างเป็นทางการทำให้เกิดคำถาม

โมฆะคงที่ G (int roundNum, int i, int a, int b, int c, int d)
    {
        int p = (roundNum << 4) + 2 * i;
        int p0 = เปลี่ยนค่าคงที่ [p];
        int p1 = เปลี่ยนค่าคงที่ [p + 1];

        สตริง s = @"// G(r, i, a, b, c, d)
            a = a + b + m[" + p0 + @"];
            ง ^= ก;
            d = " + RotateRight("d", 32) + @";
            ค = ค + ง;
            ข ^= ค;
            b = " + RotateRight("b", 24) + @";
            a = a + b + m[" + p1 + @"];
            ง ^= ก;
            d = " + RotateRight("d", 16) + @";
            ค = ค + ง;
            ข ^= ค;
            b = " + RotateRight("b", 63) + @";";
        s = s.Replace("ก", "v" + ก);
        s = s.Replace("b", "v" + b);
        s = s.Replace("ค", "v" + ค);
        s = s.Replace("d", "v" + d);
        s = s.Replace("r", roundNum.ToString());
        s = s.Replace("ผม", i.ToString());
        s = s.Replace("\t", "");
        Console.WriteLine(s);
        Console.WriteLine();
    }

ฟังก์ชันแกนเดียว G เธอเรียกใช้ RotateRight สี่ครั้งตามที่ตั้งใจไว้

สตริงคงที่ RotateRight (ชื่อสตริง int offset)
    {
        กลับ "((" + ชื่อ + " >>" + ออฟเซ็ต + ")|(" + ชื่อ + " << (64-" + ออฟเซ็ต + ")))";
    }

ฉันไม่เข้าใจว่าทำไม Rotate จึงชดเชยพารามิเตอร์ 32, 24, 16, 63 เมื่อจำเป็นต้องใช้ 16, 12, 8, 7 ดังที่แสดงด้านล่าง: blake2b ภาพประกอบของอัลกอริทึม นอกจากนี้เกี่ยวกับโครงการนี้จะทำอย่างไร $Сsigma_r(2i+1)$ และ $Msigma_r(2i)$ หมายถึง?

แหล่งที่มาของฉัน:

ภาพประกอบจากวิกิพีเดีย

การใช้งาน C# อย่างเป็นทางการ

soul king avatar
in flag
เพิ่มทรัพยากรในการโพสต์
fgrieu avatar
ng flag
@Morrolan: ฉันรู้จัก [สิ่งนี้](https://github.com/BLAKE2/BLAKE2/blob/master/csharp/Blake2Sharp/Blake2BCore-Simple.cs#L26-L42) เป็น C# มาตรฐาน แต่ฉันรู้สึกสูญเสียกับ `string s = @"` ส่วนหนึ่งของรหัสคำถาม นั่นก็นอกประเด็นอยู่ดี
Morrolan avatar
ng flag
@fgrieu อ่าฉันข้ามไปแล้ว `@` เป็นเพียงน้ำตาลวากยสัมพันธ์เพื่อให้สอดคล้องกับเนื้อหาของสตริงคำต่อคำ - ซึ่งไม่มีความหมายพิเศษซึ่งมักจะกำหนดให้กับอักขระเช่น `\` ดูที่การแก้ไขสตริงด้านล่าง ซึ่งมีแนวโน้มว่าจะใช้เพื่อสร้างการใช้งานที่ไม่ได้ควบคุมใน repo (นอกหัวข้อฉันยอมรับสิ่งที่ดีที่ไม่มี mod รอบ ๆ )
Score:2
ธง ng

$G$ การทำงาน

กราฟิกที่คุณอ้างอิงดูเหมือนจะอธิบายถึง $G$ ฟังก์ชั่นของ BLAKE - และ ไม่ ของ BLAKE2b. สังเกตไม่เพียงแค่การหมุนที่แตกต่างกันเท่านั้น แต่ยังรวมถึงการเพิ่มค่าคงที่ด้วย $C_{\sigma_r(2i+1)}$ ซึ่งไม่มีอยู่ใน BLAKE2 อีกต่อไป ทั้งสองสิ่งนี้ตรงกับคำจำกัดความของ $G$ ฟังก์ชั่นของ BLAKE ตาม เอกสารอย่างเป็นทางการ.

สำหรับ BLAKE2: โปรดระวังว่า BLAKE2 มีสองเวอร์ชัน BLAKE2s สำหรับแพลตฟอร์มที่มีฮาร์ดแวร์ 8-32 บิต BLAKE2b สำหรับแพลตฟอร์มที่มีฮาร์ดแวร์ 64 บิต

BLAKE2s ใช้การหมุน 16, 12, 8 และ 7 บิตตามลำดับ - แต่ไม่มีการเพิ่มค่าคงที่ ดังนั้นกราฟิกของคุณจะดูคล้ายกันมาก (แต่ไม่เท่ากัน!)

ในทางกลับกัน BLAKE2b ใช้การหมุน 32, 24, 16 และ 63 บิตตามลำดับ ซึ่งเป็นสิ่งที่ซอร์สโค้ดอ้างอิงนำไปใช้

สำหรับรายละเอียดเกี่ยวกับ BLAKE2 ตรวจสอบหัวข้อ 2.4 ของทางการ เอกสาร BLAKE2 (ซึ่งดูเหมือนว่าจะเน้นไปที่การเปลี่ยนแปลงจาก BLAKE เป็น BLAKE2) หรือของมัน อาร์เอฟซี ซึ่งมีรายละเอียดครบถ้วน

ในที่เก็บข้อมูลที่คุณลิงก์ไป พวกเขาให้เฉพาะการใช้งานอ้างอิง C# ของ BLAKE2b อย่างไรก็ตาม คุณสามารถดูการใช้งานที่แตกต่างกันโดยการเปรียบเทียบการใช้งานอ้างอิง C ของ BLAKE2b และ BLAKE2s:

BLAKE2' $จี()$ การทำงาน

#กำหนด G(r,i,a,b,c,d) \
  ทำ {                                      \
    a = a + b + m[blake2s_sigma[r][2*i+0]]; \
    d = rotr32(d ^ ก, 16); \
    ค = ค + ง; \
    ข = rotr32(ข ^ ค, 12); \
    a = a + b + m[blake2s_sigma[r][2*i+1]]; \
    d = rotr32(d ^ ก, 8); \
    ค = ค + ง; \
    ข = rotr32(ข ^ ค, 7); \
  } ในขณะที่ (0)

ของ BLAKE2b $จี()$ การทำงาน:

#กำหนด G(r,i,a,b,c,d) \
  ทำ {                                      \
    a = a + b + m[blake2b_sigma[r][2*i+0]]; \
    d = rotr64(d ^ ก, 32); \
    ค = ค + ง; \
    ข = rotr64(ข ^ ค, 24); \
    a = a + b + m[blake2b_sigma[r][2*i+1]]; \
    d = rotr64(d ^ ก, 16); \
    ค = ค + ง; \
    ข = rotr64(ข ^ ค, 63); \
  } ในขณะที่ (0)

การเรียงสับเปลี่ยน

เดอะ $\sigma$ คุณถามเกี่ยวกับเป็นตระกูลของการเรียงสับเปลี่ยน ดูเช่น ส่วนที่ 2.7 ของ BLAKE2 RFC

soul king avatar
in flag
ขอบคุณมาก ตอนนี้ฉันเข้าใจแล้ว คิดว่าฉันจะมีคำถามใหม่ ฉันจะถามพวกเขาใต้ความคิดเห็นของคุณ!

โพสต์คำตอบ

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