Điểm:1

Thông số offset trong BLAKE2b

lá cờ in

Trong khóa học về mật mã của tôi, chúng tôi bắt đầu xem xét các hàm băm.Khi làm bài tập về nhà, chúng tôi phải chọn một hàm băm hiện đại và mô tả nó trong lớp. Tôi đã chọn BLAKE2b, tôi có thể hiểu rõ khi được giải thích bằng lời, nhưng việc triển khai chính thức đặt ra câu hỏi.

khoảng trống tĩnh G(int roundNum, int i, int a, int b, int c, int d)
    {
        int p = (roundNum << 4) + 2 * i;
        int p0 = ReplaceConstants[p];
        int p1 = ReplaceConstants[p + 1];

        chuỗi s = @"// G(r, i, a, b, c, d)
            a = a + b + m[" + p0 + @"];
            d^= a;
            d = " + RotateRight("d", 32) + @";
            c = c + d;
            b^= c;
            b = " + RotateRight("b", 24) + @";
            a = a + b + m[" + p1 + @"];
            d^= a;
            d = " + RotateRight("d", 16) + @";
            c = c + d;
            b^= c;
            b = " + RotateRight("b", 63) + @;";
        s = s.Replace("a", "v" + a);
        s = s.Replace("b", "v" + b);
        s = s.Replace("c", "v" + c);
        s = s.Replace("d", "v" + d);
        s = s.Replace("r", roundNum.ToString());
        s = s.Replace("i", i.ToString());
        s = s.Replace("\t", "");
        Console.WriteLine(s);
        Console.WriteLine();
    }

Chức năng lõi đơn G, cô ấy gọi RotateRight bốn lần như dự định.

chuỗi tĩnh RotateRight(tên chuỗi, int offset)
    {
        return "((" + name + " >>" + offset + ")|(" + name + " << (64-" + offset + ")))";
    }

Tôi không hiểu tại sao Rotate lấy các thông số offset là 32, 24, 16, 63 khi cần 16, 12, 8, 7, như hình bên dưới: blake2b, minh họa thuật toán Ngoài ra, về kế hoạch này, những gì làm $Сsigma_r(2i+1)$$Msigma_r(2i)$ bần tiện?

nguồn của tôi:

Hình minh họa từ Wikipedia

Triển khai C# chính thức

soul king avatar
lá cờ in
đã thêm tài nguyên vào bài đăng
fgrieu avatar
lá cờ ng
@Morrolan: Tôi nhận ra [cái này](https://github.com/BLAKE2/BLAKE2/blob/master/csharp/Blake2Sharp/Blake2BCore-Simple.cs#L26-L42) là C# tiêu chuẩn. Nhưng tôi không biết phần `string s = @"` trong mã của câu hỏi. Dù sao thì điều đó cũng lạc đề.
Morrolan avatar
lá cờ ng
@fgrieu À, tôi đã bỏ qua điều đó. `@` chỉ đơn thuần là đường cú pháp để làm cho nó xử lý nguyên văn nội dung của chuỗi - nghĩa là không có ý nghĩa đặc biệt thường được gán cho các ký tự như `\`. Nhìn vào sửa đổi chuỗi bên dưới, điều đó có khả năng được sử dụng để tạo triển khai không được kiểm soát trong repo. (Lạc đề, tôi thừa nhận. Điều tốt là không có mod xung quanh)
Điểm:2
lá cờ ng

$G$ chức năng

Đồ họa mà bạn tham khảo dường như mô tả $G$ chức năng của BLAKE - và không phải của BLAKE2b. Lưu ý không chỉ các phép quay khác nhau mà còn cả việc thêm các hằng số $C_{\sigma_r(2i+1)}$ không còn có trong BLAKE2 nữa. Cả hai đều phù hợp với định nghĩa của $G$ chức năng của BLAKE, theo tài liệu chính thức.

Đối với BLAKE2: Hãy cẩn thận vì có hai phiên bản BLAKE2. BLAKE2s dành cho nền tảng có phần cứng 8-32 bit, BLAKE2b dành cho nền tảng có phần cứng 64 bit.

BLAKE2s sử dụng các phép quay lần lượt là 16, 12, 8 và 7 bit - nhưng không có phép cộng liên tục - vì vậy sẽ trông rất giống (nhưng không bằng!) với đồ họa của bạn.

Mặt khác, BLAKE2b sử dụng các phép quay tương ứng là 32, 24, 16 và 63 bit, đây là những gì mã nguồn được tham chiếu thực hiện.

Để biết chi tiết về BLAKE2, hãy xem phần 2.4 của tài liệu chính thức tài liệu BLAKE2 (dường như tập trung vào các thay đổi từ BLAKE sang BLAKE2) hoặc RFC trong đó cung cấp một mô tả đầy đủ.

Trong kho lưu trữ mà bạn liên kết đến, họ chỉ cung cấp triển khai tham chiếu C# của BLAKE2b. Tuy nhiên, bạn có thể thấy các triển khai khác nhau bằng cách so sánh các triển khai tham chiếu C của BLACK2bBLAKE2s:

BLAKE2s' $G()$ chức năng

#define G(r,i,a,b,c,d) \
  làm {                                      \
    a = a + b + m[blake2s_sigma[r][2*i+0]]; \
    d = rotr32(d^a, 16); \
    c = c + d; \
    b = rotr32(b^c, 12); \
    a = a + b + m[blake2s_sigma[r][2*i+1]]; \
    d = rotr32(d^a, 8); \
    c = c + d; \
    b = rotr32(b^c, 7); \
  } trong khi (0)

BLAKE2b's $G()$ chức năng:

#define G(r,i,a,b,c,d) \
  làm {                                      \
    a = a + b + m[blake2b_sigma[r][2*i+0]]; \
    d = rotr64(d^a, 32); \
    c = c + d; \
    b = rotr64(b^c, 24); \
    a = a + b + m[blake2b_sigma[r][2*i+1]]; \
    d = rotr64(d^a, 16); \
    c = c + d; \
    b = rotr64(b^c, 63); \
  } trong khi (0)

hoán vị

Các $\sigma$ bạn hỏi về một họ hoán vị, xem ví dụ: phần 2.7 của BLAKE2 RFC.

soul king avatar
lá cờ in
cám ơn bạn nhiều, giờ mình đã hiểu Hãy suy nghĩ, tôi sẽ có câu hỏi mới, tôi sẽ hỏi chúng dưới bình luận của bạn!

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.