Điểm:1

Mã này tính toán AES S-Box hoạt động như thế nào?

lá cờ us

Mã này tính toán AES S-Box hoạt động như thế nào? Tôi không hiểu quy trình tính toán tổng thể. Mã được đính kèm dưới đây:

chức năng tạo (irreducible_poly){
    cố gắng{
        p = parseInt(eval(irreducible_poly.replace(/x/g, '10')), 2);
    } bắt(err){
        console.log('Đa thức bất khả quy không hợp lệ');
        trở lại;
    }

    cho t = new Uint32Array(256);
    for (cho i = 0, x = 1; i < 256; i ++) {
        t[i] = x;
        x ^= (x << 1) ^ ((x >>> 7) * p);
    }

    để Sbox = new Uint32Array(256);
    Sbox[0] = 0x63;
    for (cho i = 0; i < 255; i ++) {
        đặt x = t[255 - i];
        x |= x << 8;
        x ^= (x >> 4) ^ (x >> 5) ^ (x >> 6) ^ (x >> 7);
        Sbox[t[i]] = (x ^ 0x63) & 0xFF;
    }

    trả lại Sbox;
}


// Nghịch đảo của Sbox
hàm nghịch đảo(sbox){
    hãy để InvSbox = new Uint32Array(256);
    for (hãy i = 0; i < 256; i++){
        InvSbox[i] = sbox.indexOf(i);
    }

    trả lại InvSbox;
}
kelalaka avatar
lá cờ in
Điều gì không rõ ràng? Bạn đã thử nó bằng tay? Nhìn vào các ví dụ trên trang web của chúng tôi? Bạn có thấy điều này không http://www.moserware.com/assets/stick-figure-guide-to-advanced/A%20Stick%20Figure%20Guide%20to%20the%20Advanced%20Encryption%20Standard%20%28AES%29. pdf
kelalaka avatar
lá cờ in
Điều này có trả lời câu hỏi của bạn không? [Cách thực hiện phép nhân thập lục phân trong GF(2^8)](https://crypto.stackexchange.com/questions/63139/how-to-do-hexadecimal-multiplication-in-gf28). Có thể câu hỏi này là một bản sao của câu hỏi đó hoặc [Các bảng nhân AES MixColumn này được tính như thế nào?](https://crypto.stackexchange.com/q/71204/18298). Bạn có thể chỉ ra rằng những điều đó đã giải quyết được sự nhầm lẫn của bạn không?
kelalaka avatar
lá cờ in
Bạn lấy mã này ở đâu? Chà, người ta có thể đã thấy mã này, tuy nhiên, bạn có thể [chỉnh sửa](https://crypto.stackexchange.com/posts/98396/edit) câu hỏi của mình để cho biết bạn lấy mã này ở đâu và thậm chí liên kết tới bài báo không? https://engineering.purdue.edu/kak/compsec/NewLectures/Lecture8.pdf
lá cờ us
https://merricx.github.io/aes-sbox/
lá cờ us
bạn nên kiểm tra các yếu tố để tìm mã
lá cờ ar
Hy vọng bạn không cung cấp đầu vào không đáng tin cậy cho chức năng `tạo` đó. ;) Tôi cho rằng nó không tệ đến thế miễn là mã chỉ chạy ở phía máy khách, vì tất cả những gì bạn có thể thỏa hiệp với nó là hộp cát JS của trình duyệt, mà người dùng trình duyệt có toàn quyền kiểm soát bằng các công cụ dành cho nhà phát triển. Tuy nhiên, nếu đó là tập lệnh phía máy chủ…¦
Điểm:2
lá cờ ng

Bức tranh toàn cảnh: đoạn mã này cần tính đa thức nhị phân nghịch đảo modulo bất khả quy $P$ của mọi đa thức nhị phân khác 0 $R$ mức độ thấp hơn so với $P$. Hướng tới điều này, nó đã chọn một đa thức sinh $G=1+x$và lập bảng $Q_i=G^i\bmod P$, đạt được tất cả mong muốn $R$. Nghịch đảo nhân của $R=Q_i$$Q_{255-i}$.


Mã này đánh giá AES S-box và nó nghịch đảo như sau:

  1. (khối mã bắt đầu từ cố gắng) Nó đánh giá p = 0x11b = 283 đại diện cho đa thức nhị phân $P=1+x+x^3+x^4+x^8$ dưới dạng số nguyên: giá trị thu được khi đánh giá đa thức này cho số nguyên $x=2$. Quy ước chung này được sử dụng trong AES để ánh xạ đa thức nhị phân thành số nguyên.

  2. (khối mã bắt đầu từ để t) Nó tính bảng t[tôi] đại diện cho đa thức nhị phân $Q_i=(1+x)^i\bmod P$ theo quy ước này. Điều đó $Q_i$ được tính cho mỗi lần lặp lại $Q_{i+1}=Q_i\,(1+x)\bmod P$ với $Q_0=1$, dịch¹ sang t[i+1] = t[i] ^ ((t[i] << 1) ^ ((t[i] >>> 7) * p)) với t[0] = 1 theo quy ước nói trên.

    Ví dụ: $Q_0$ là đa thức (nhị phân) $1$, đại diện bởi t[0] = 1. $Q_1=1+x$, đại diện bởi t[1] = 3. $Q_2=(1+x)^2=1+x^2$, đại diện bởi t[2] = 5. $Q_7=(1+x)^7=1+x+x^2+x^3+x^4+x^5+x^6+x^7$, đại diện bởi t[2] = 0xff = 255. $Q_8=(1+x)^8\bmod P=(1+x^8)\bmod P=x+x^3+x^4$, đại diện bởi t[8] = 0x1a = 26.

  3. (khối mã bắt đầu từ hãy để Sbox) Lập bảng $Q_i=(1+x)^i\bmod P$ hữu ích vì $(1+x)^{255}\bmod P=1$, vì thế $Q_{255-i}$ là nghịch đảo nhân của $Q_i$. Và $Q_i$ tiến tới tất cả các đa thức nhị phân khác 0 có bậc $<8$ (đó là $1+x$ là máy phát điện). Do đó số nguyên t[255 - tôi] đại diện cho nghịch đảo nhân của đa thức mà số nguyên t[tôi] đại diện. Và khi ở trong vòng lặp tôi đi từ 0 đến 254 tạo ra nghịch đảo nhân của mỗi trong số 255 đa thức khác không của bậc $<8$. Sau đó, vòng lặp chỉ áp dụng² phép biến đổi affine được chỉ định trong phần còn lại của định nghĩa của AES S-box. Đa thức bằng 0 là trường hợp đặc biệt.

    Ví dụ: khi ở trong vòng lặp tôi = 8, t[tôi]t[8] = 0x1a = 26 đại diện $Q_8=x+x^3+x^4$, và t[255-i] (sẽ x, không liên quan đến $x$) Là t[247] = 0xfd = 253 đại diện cho đa thức $Q_{247}=1+x^2+x^3+x^4+x^5+x^6+x^7$. Điều đó $Q_{247}$ là nghịch đảo nhân của $Q_8$. Theo định nghĩa của AES S-box, chỉ còn cách áp dụng phép biến đổi affine² cho x, sau đó đặt kết quả vào Sbox[t[i]] = Sbox[26].

  4. (hàm ngược) Bảng nghịch đảo được tính bằng cách tìm kiếm từng mục trong bảng. Điều đó hoạt động nhưng không hiệu quả. InvSbox[i] = sbox.indexOf(i); có thể được thay thế bằng cách đơn giản và hiệu quả hơn InvSbox[sbox[i]] = i;.


¹ Biện minh: trong t[i+1] = t[i] ^ ((t[i] << 1) ^ ((t[i] >>> 7) * p))

  • t[tôi] là một số nguyên trong $[0,2^8)$ và đại diện $Q_i$ bằng cấp $<8$
  • t[i] << 1 là số nguyên chẵn trong $[0,2^9)$ và đại diện $Q_i\,x$.
  • t[i] >>> 7 là một trong hai 0 hoặc 1. Đó là hệ số của thời hạn đặt hàng $x^7$ Trong $Q_i$.
  • (t[i] >>> 7) * p tương ứng là một trong hai 0 hoặc 0x11b = 283, đại diện $0$ hoặc $P$.
  • (t[i] << 1) ^ ((t[i] >>> 7) * p) đại diện tương ứng $(Q_i\,x)$ hoặc $(Q_i\,x)+P$, và (bằng cách kiểm tra hai trường hợp) là một số nguyên trong $[0,2^8)$, do đó đại diện cho một đa thức nhị phân bậc $<8$, do đó là $(Q_i\,x)\bmod P$.
  • t[i] ^ ((t[i] << 1) ^ ((t[i] >>> 7) * p)) do đó là một số nguyên trong $[0,2^8)$ và đại diện $Q_i+(Q_i\,x)\bmod P)=Q_i\,(1+x)\bmod P=Q_{i+1}$, bằng cấp $<8$.

Trong C, thành ngữ thời gian không đổi có khả năng tiêu chuẩn cho biểu thức này sẽ là (về cơ bản với & - được sử dụng thay cho phép nhân):
t[i+1] = t[i] ^ ((t[i] << 1) ^ (p & -(t[i] >> 7))).
Lưu ý: một số trình biên dịch C quá nhiệt tình sẽ sủa sai -, khiến họ im lặng.


² Tuyên bố x |= x << 8;nhân đôi các bit trong biến x (đại diện cho nghịch đảo mô-đun của $Q_i$) sao cho các lần dịch phải tiếp theo trở nên tương đương với phép quay khi nói đến 8 bit bậc thấp. tuyên bố x ^= (x >> 4) ^ (x >> 5) ^ (x >> 6) ^ (x >> 7); thực hiện các ma trận tuần hoàn phép nhân. sau đó ^ 0x63 (đại diện cho đa thức $1+x+x^5+x^6$) là phép cộng không đổi, và & 0xFF giữ 8 bit bậc thấp (về mức độ $<8$), hoàn tác trùng lặp.

poncho avatar
lá cờ my
$1+x$ được sử dụng cụ thể vì $(1+x)^i \bmod P$ đạt đến tất cả các giá trị (khác 0) cho $i$ trong khoảng từ 0 đến 254; thuật ngữ kỹ thuật mà chúng tôi sử dụng cho trường hợp này là $1+x$ là "trình tạo" của trường này (trong khi thuật ngữ đơn giản hơn $x$ thì không)
lá cờ us
vì vậy bạn có thể vui lòng giải thích nó theo cách riêng của bạn?? tôi cần thuật toán này cho công việc luận án của tôi. Trên thực tế, tôi hiểu phần nào để tính toán, nhưng sẽ tốt hơn cho tôi nếu bạn giải thích nó bằng một ví dụ thay vì phương trình. Cũng thế; Sbox[t[i]] = (x ^ 0x63) & 0xFF; tại sao FF được sử dụng ở đây bạn có thể vui lòng giải thích ???
fgrieu avatar
lá cờ ng
@Aktar1990: Tôi đã thêm các ví dụ số, cũng như lưu ý 2 giải thích phép biến đổi affine, bao gồm `(x ^ 0x63) & 0xFF`.Đối với `Sbox[t[i]]`, nó được giải thích trong "3.".
lá cờ us
@fgrieu Bạn có bất kỳ mã hóa hoàn chỉnh nào cho AES S-Box này với lời giải thích rõ hơn không. Tôi chỉ muốn viết mã từ bạn, khi tôi chạy nó, tôi nhận được kết quả đầu ra??bạn có không??bạn có biết độ phức tạp về thời gian và không gian của AES S-Box không??
fgrieu avatar
lá cờ ng
@Aktar1990: bạn đã chọn mã này và đó là ngôn ngữ. Tôi không có lời giải thích nào tốt hơn về nó, hoặc mã có độ phức tạp về thời gian và không gian thấp tương tự: `generate` khá gần với mức tối ưu trong ngôn ngữ hiện tại. Mã hiệu quả sử dụng các kỹ thuật viết mã và toán học đa thức cần một chút thời gian và công sức để nắm bắt. Nhưng vì bạn đang làm luận án liên quan, bạn nên có khả năng đó.
lá cờ us
@fgrieu Bây giờ tôi đã hiểu quy trình, cảm ơn rất nhiều.

Đă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.