Điểm:0

Tổng quát hóa các dịch chuyển vòng tròn của hộp s AES trong GF lớn hơn

lá cờ tf
Tom

Theo wikipedia:

https://en.wikipedia.org/wiki/Rijndael_S-box

AES đang làm điều thú vị (trong đó $<<<$ là dịch chuyển tròn):

$s = b \oplus (b \lll 1) \oplus (b \lll 2) \oplus (b \lll 3) \oplus (b \lll 4)$

và cái này bằng ($\times$ là phép nhân trong $GF(2^8)$):

$s = b \times 31 \mod 257$

Điều này cung cấp một chút pha trộn tuyệt vời cho mắt của tôi. Giả sử tôi có 128 bit $x$$y$ và tôi muốn tính toán một cái gì đó tương tự:

$x = y \oplus (y \lll 1) \oplus (y \lll 2) \oplus (y \lll 3) \oplus ... \oplus (y \lll 64)$

Tôi có thể làm điều đó nhanh hơn bằng phép nhân trong $GF(2^{128}) \mod 2^{128}+1$? Tôi không biết lý thuyết đằng sau điều này, vì vậy tôi có hai loại hệ số nhân cho việc này:

$2^{125}-1$

$2^{65}-1$

Tôi nghĩ cái thứ hai này có thể hoạt động theo cách tương tự trong $GF(2^{128})$, đây là quy tắc.Vì vậy, có một số tương tự mà tôi có thể sử dụng? Con số đó là gì?

CHỈNH SỬA: Có vẻ như có sự nhầm lẫn trong bài viết và sự thay đổi vòng tròn có thể theo hướng khác:

$s = b \oplus (b \ggg 1) \oplus (b \ggg 2) \oplus (b \ggg 3) \oplus (b \ggg 4)$

Dù sao, chúng ta có thể khái quát nó? Trong tài liệu này không có gì về sự bình đẳng đối với phép nhân GF của bước đó:

https://csrc.nist.gov/csrc/media/publications/fips/197/final/documents/fips-197.pdf

Điểm:3
lá cờ sa

Được rồi, vấn đề dịch chuyển trái và phải liên quan đến việc liệu biến có được biểu thị theo quy ước "big-endian" hoặc "little-endian" hay không, tức là nếu Bit ít quan trọng nhất ở bên trái hoặc bên phải.

các hoạt động:

$$s = b \oplus (b \lll 1) \oplus (b \lll 2) \oplus (b \lll 3) \oplus (b \lll 4)$$

tương đương với phép nhân (trong đó sự thay đổi là $\lần x$ phía dưới)

$$ s(x)=b(x)(1+x+x^2+x^3+x^4)=b(x)\frac{x^5-1}{x-1} $$ nhưng vì dịch trái cũng tăng gấp đôi, hãy để $x=2,$ để có được $s(x)=(2^5-1)b(x).$ Trong mọi trường hợp, sự thay đổi theo chu kỳ tương đương với việc vận hành $\pmod x^n-1$ ở đâu $n$ là độ dài từ tính bằng bit.

Thao tác thứ hai của bạn thực sự tương đương với phép nhân với $2^{65}-1.$

Vì bạn có vẻ đủ khả năng về mặt toán học, nên tôi đề nghị:

Đọc toàn bộ tài liệu "Đề xuất AES" của Daemen và Rijmen để làm quen với các loại hoạt động và biểu diễn này. Ngoài ra còn có cuốn sách Thiết kế của Rijndael của cùng các tác giả. Bạn đang tìm hiểu về tác động qua lại giữa các trường Galois của đặc trưng 2, $GF(2^n)$ và vành số nguyên $\mathbb{Z}_{2^n-1}$ mà cũng có thể được "phân hủy" thành $\mathbb{Z}_{2^{n/2}-1} \times \mathbb{Z}_{2^{n/2}+1},$ khi nào $n$ là số chẵn.Một nơi khác để xem là tài liệu liên quan đến thiết kế SAFER-64 của Jim Massey. Tổng quát hơn, Biến đổi lý thuyết số (NTT) tổng quát hóa Biến đổi Fourier nhanh.

Nếu bạn có các phân tách đệ quy thuộc loại tôi đã đề cập ở trên, thì bạn có các triển khai nhanh. Phép biến đổi đơn giản nhất như vậy là ma trận Sylvester Hadamard được sử dụng trong các phép biến đổi Fast Walsh-Hadamard trong đó $n$ Sản phẩm Kronecker của cùng một ma trận $H_2$ Được sử dụng: $$ H_n =H_2 \otimes H_2 \otimes \cdots \otimes H_2 $$ với $$ H_2=\left[\begin{array}{cc} +1 & +1 \ +1 & -1 \end{array} \right]. $$ Vì đây là các Biến đổi Fourier cho không gian vectơ nhị phân $GF(2)^n=\{0,1\}^n$ tương đương các hàng của ma trận Hadamard ở trên là các ký tự nhóm của nhóm cộng của $(\mathbb{GF(2)^n},\oplus)$ Tất cả đều có lý.

Dù sao, đọc vui vẻ.

Tom avatar
lá cờ tf
Tom
Tôi có câu hỏi thứ hai về số 99. Tôi nghi ngờ đây là về một số loại cân bằng vấn đề bit quan trọng nhất (nếu tôi đúng, đây thậm chí có thể là một vấn đề), luôn luôn bằng 1 trong mọi số. Nhưng tôi không thể tạo ra một ví dụ tương đương với con số đó. Bạn có biết số 99 đến từ đâu không? Có thể có gì trong GF(2^128)?
Tom avatar
lá cờ tf
Tom
Tôi đang cố gắng kiểm tra nó bằng tay và điều này không hiệu quả với tôi. Có giảm bởi một số đa thức hay x 31 chỉ là phép nhân không mang? Trong cả hai trường hợp, nó dường như không hoạt động. Hãy lấy b = 10000001. b
Tom avatar
lá cờ tf
Tom
Tôi rút gọn nó bằng đa thức x^9+1. Và cuối cùng nó hoạt động.
Điểm:1
lá cờ tf
Tom

Có điều gì đó sai lệch trong bài viết Wikipedia. Họ viết:

$s = b \oplus (b \lll 1) \oplus (b \lll 2) \oplus (b \lll 3) \oplus (b \lll 4)$

Bằng:

$s = b \times 31 \mod 257$

ở đâu $\times$ là phép nhân đa thức của $b$$31$ lấy dưới dạng mảng bit. Nhưng mà $\mod 257$ không phải là hoạt động modulo tiêu chuẩn, nó là mod trong $GF(2^8)$$257$ thực tế là đa thức có dạng $x^{9}+1$.

Chúng ta có thể dễ dàng thấy rằng phép nhân ít mang theo của $b \times 31$ bằng:

$s = b \oplus (b \ll 1) \oplus (b \ll 2) \oplus (b \ll 3) \oplus (b \ll 4)$

Trong các bit $7,6,5,4$, ở đâu $\ll$ là dịch chuyển bitwise, không phải là circualr sfift. Nhưng trong ví dụ Wikipedia và trong AES, có sự thay đổi vòng tròn. Vậy thông tư đến từ đâu? Nó xuất phát từ việc giảm bởi đa thức $x^9+1$. Đây là cách phép nhân với rút gọn đa thức hoạt động trong $GF(2^8)$:

#bao gồm <cstdint>
#bao gồm <cstdio>
#include <bitset>
#include<iostream>


uint8_t nhân lên(uint a, uint b)
    {
        uint8_t p = 1;
        uint16_t L=1;
        uint16_t c = 0;

        for (unsign int i = 0; i < 8; ++i)
        {
            c ^= a & (L << i) ? (uint16_t)b << i : 0;
        }

        for (unsign int i = 8; i--> 0; )
        {
            nếu (c & (L << (i + 8)))
            {
                c ^= L << (i + 8);
                c ^= (uint16_t)p << i;
            }
        }

        trả về (uint8_t)c;
    }

int chính ()
{
    kết quả uint = 0;
    
    kết quả = nhân (131,31);
    std::cout << kết quả;
    
    trả về 0;
}

Ta cần đa thức bậc $9$, nhưng chúng ta có thể định nghĩa đa thức rút gọn trong triển khai thực tế bằng cách chỉ lấy giá trị đầu tiên của nó $8$ bit ít quan trọng nhất, vì vậy trong trường hợp của chúng tôi $p=1$. Bây giờ nếu chúng ta xem xét cách thức hoạt động của phép nhân không mang (vòng lặp đầu tiên), chúng ta có thể thấy điều đó trong $7,6,5,4$ bit, chúng ta sẽ nhận được kết quả tương tự, như với các ca:

$s = b \oplus (b \ll 1) \oplus (b \ll 2) \oplus (b \ll 3) \oplus (b \ll 4)$

Nhưng thay cho bit $11,10,9,8$ sẽ chính xác là các bit được dịch chuyển (bị hủy) trong quá trình dịch chuyển từng bit. Điều này là do phép nhân ít mang di chuyển chúng sang trái bởi $1,2,3...$ vị trí và sau đó tất cả là xored. Như ở đây:

nhập mô tả hình ảnh ở đây

Vì chúng ta đang nhân với $31$ chúng tôi sẽ luôn nhận được $4$ các bit bổ sung ở một nửa có ý nghĩa cao hơn trong kết quả 16 bit của chúng tôi. Và họ sẽ bị xáo trộn, bởi vì đây là cách hoạt động của phép nhân ít mang. Vì vậy, bây giờ chúng tôi có bit $7,6,5,4$ bằng kết quả của:

$s = b \oplus (b \ll 1) \oplus (b \ll 2) \oplus (b \ll 3) \oplus (b \ll 4)$

Và bit $11,10,9,8$, có thể thay cho bit $3,2,1,0$. Để thực hiện dịch chuyển vòng tròn, chúng ta chỉ cần xor lùi các bit này. Điều này được thực hiện bởi:

for (unsign int i = 8; i--> 0; )
        {
            nếu (c & (L << (i + 8)))
            {
                c ^= L << (i + 8);
                c ^= (uint16_t)p << i;
            }
        }

Nếu $p=1$. Chúng ta có thể thấy rằng mã này thực sự đang kiểm tra xem có bit nào bằng không $1$ ở bên trái trên vị trí $i$ của nửa trên của chúng tôi, và nếu đúng như vậy, thì nó xor bit đó với bit $i$ trên nửa thấp của chúng tôi. Và tất cả thuật toán đó tương đương với xoring với circialr shift $\lll$:

$s = b \oplus (b \lll 1) \oplus (b \lll 2) \oplus (b \lll 3) \oplus (b \lll 4)$

Biết được điều này, rõ ràng là loại tương đương này đúng với bất kỳ $GF(2^k)$, miễn là chúng tôi chọn $p=1$ (theo quy ước của mã đã đăng) là đa thức và cấp số nhân của chúng ta bằng $2^{\frac {k}{2}+1}+1$.

kelalaka avatar
lá cờ in
Trong $\LaTeX$ có `\ll \lll \gg` và `\ggg` để tạo $\ll, \quad \lll, \quad \gg \quad \text{ và } \quad \ggg$

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