Điểm:2

Ví dụ, các bit đầu tiên của chuỗi bit được tạo bằng SHA-256 là gì?

lá cờ ve

Tôi có một chuỗi được tạo từ SHA-256

x = fea5f97f9ca1e1a0a2ae344f4e12a3ab0c4d9221e6bb5d70bc567e39f8fbc3d5

10 bit đầu tiên có giá trị là gì x?

lá cờ et
Đầu ra có vẻ là thập lục phân. Mỗi ký tự ở đây được lưu trữ trong 4 bit. Bạn cần 2 & 1/2 ký tự để nhận 10 bit
Điểm:2
lá cờ ng

Tiêu đề của câu hỏi (hiện tại) hỏi "Các bit đầu tiên của chuỗi bit là gì". Điều đó rõ ràng nếu các bit được trình bày riêng lẻ theo thứ tự thời gian hoặc bằng văn bản trong ngữ cảnh có thứ tự đọc thông thường, như từ trái sang phải.

Nhưng nội dung của câu hỏi là về "một chuỗi tạo từ sha256". Điều đó được đọc là SHA-256, được xác định bởi FIPS 180-4. Đó là một thuật toán xuất ra một "chuỗi bit" gồm $256$ bit và chúng không thể được nhận dạng ngay lập tức.

Thân câu hỏi có x = theo dõi bởi $64$ ký tự tất cả các chữ số hoặc chữ cái từ một đến f (trong trường hợp thống nhất, ở đây chữ thường), đó là $16=2^4$ nhân vật. Điều đó gợi ý kết quả của SHA-256 được mã hóa trong thập lục phân, với mỗi ký tự mã hóa 4 bit (chú ý $256=64\times4$). Đây là một trong một số biểu diễn phổ biến của chuỗi bit dưới dạng ký tự.

Có một số cách khác nhau và không tương thích để chuyển đổi hệ thập lục phân thành bit, nhưng may mắn thay, trong trường hợp SHA-256, một cách được chỉ định trong 3.1 tiểu đoạn 2 trên trang được đánh dấu 7 của FIPS 180-4 (phải đọc). Tóm lại, các bit quan trọng nhất là đầu tiên, có thể là ở mức nibble (4-bit), byte (8-bit) hoặc từ (32-bit trong trường hợp SHA-256).

Vì vậy, để tìm thấy đầu tiên $i$ bit cho hàm băm SHA-256 đã cho, chúng ta có thể

  • Kiểm tra xem $0\le i\le256$, nếu không, những gì được hỏi là không xác định.
  • Lấy cái đầu tiên $\lceil i/4\rceil$ ký tự (trong đó $\lceil r\rceil$ với $r\in\mathbb R$ là số nguyên nhỏ nhất ít nhất $r$); đây $i=10$, do đó $\lceil i/4\rceil=3$, do đó chúng tôi lấy kỳ tích
  • Viết mỗi ký tự này (theo thứ tự đọc) dưới dạng 4 chữ số nhị phân cho mỗi quy ước lớn-endian, mỗi
    0 -> 0000 4 -> 0100 8 -> 1000 c -> 1100
    1 -> 0001 5 -> 0101 9 -> 1001 d -> 1101
    2 -> 0010 6 -> 0110 a -> 1010 e -> 1110
    3 -> 0011 7 -> 0111 b -> 1011 f -> 1111
    
  • Điều đó dẫn đến một chuỗi $4\,\lceil i/4\rceil$ bit (ở đây là 12 bit 111111101010), trong đó chúng tôi giữ vị trí đầu tiên $i$ bit (ở đây 1111111010).

Điều này áp dụng cho tất cả các giá trị băm của họ SHA (thay thế $256$ với chiều rộng đầu ra của chúng). Không có thông số kỹ thuật khác, thật hợp lý khi áp dụng nó cho các hàm băm tiêu chuẩn khác có chiều rộng đầu ra là bội số của $32$ (hoặc thậm chí $8$ hoặc $4$) chút ít. Điều đó gây tranh cãi đối với MD5, vì nó sử dụng ít-cuối cùng quy ước theo thứ tự byte trong một $32$-bit từ.Và tôi sẽ không mù quáng mở rộng nó sang các đại lượng khác được sử dụng trong mật mã và cũng được biểu thị ở dạng thập lục phân, chẳng hạn như số nguyên như được sử dụng trong RSA.

Điểm:0
lá cờ in

Vì điều này sắp được lập trình và cần phải đóng hoặc di chuyển, nên ở đây trong Python với big-endian;

def LSBBits( hexData, lsbs):

    scale = 16 ## bằng hệ thập lục phân

    inBinary = bin(int(my_hexdata, scale))[2:]
    inBinary = inBinary.zfill(256)
    trả về inBinary[len(inBinary)-lsbs:]

def MSBBits( hexData, mbsb):

    scale = 16 ## bằng hệ thập lục phân

    inBinary = bin(int(my_hexdata, scale))[2:]
    inBinary = inBinary.zfill(256)
    trả về inBinary[:mbsb]

my_hexdata = "fea5f97f9ca1e1a0a2ae344f4e12a3ab0c4d9221e6bb5d70bc567e39f8fbc3d5"


in( LSBBits(my_hexdata, 10))
in( MSBBits(my_hexdata, 10))

Và kết quả đầu ra của chương trình.

1111010101
1111111010

Big-and little-endianness là một câu chuyện khác. NIST giả định big endianness.

fgrieu avatar
lá cờ ng
Tôi e rằng câu trả lời này là về phần lạc đề của câu hỏi.
kelalaka avatar
lá cờ in
@fgrieu Tôi đã mong đợi một cuộc di cư...Vâng, do một phần mềm, zfill đã gây ra nó, đã xóa, cảm ơ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.