Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [An toàn thông tin] Mã hoá và giải mã Regev (LWE) thu nhỏ

    Bài toán Học với lỗi (Learning With Errors — LWE) là nền tảng của nhiều chuẩn mật mã hậu lượng tử NIST (Kyber, Dilithium). Xét sơ đồ mã hoá khoá công khai thu nhỏ của Regev cho 1 bit mỗi lần.

    Khoá công khai gồm ma trận A∈Zqm×nA \in \mathbb{Z}_q^{m \times n}A∈Zqm×n​ (hàng AiA_iAi​) và vector b=(b1,…,bm)b = (b_1, \dots, b_m)b=(b1​,…,bm​) với bi≡⟨Ai,s⟩+ei(modq)b_i \equiv \langle A_i, s \rangle + e_i \pmod qbi​≡⟨Ai​,s⟩+ei​(modq) (sss là khoá bí mật, eie_iei​ nhiễu nhỏ — cho trước trực tiếp trong đề, không cần tính lại).

    Mã hoá bit μ∈{0,1}\mu \in \{0, 1\}μ∈{0,1}: chọn một tập con chỉ số S⊆{1,…,m}S \subseteq \{1, \dots, m\}S⊆{1,…,m} (cho dưới dạng chuỗi bit độ dài mmm, ký tự 1 tại vị trí iii nghĩa là i∈Si \in Si∈S), tính

    a′=∑i∈SAi mod q,b′=(∑i∈Sbi+μ⌊q2⌋) mod qa' = \sum_{i \in S} A_i \bmod q, \qquad b' = \Big(\sum_{i \in S} b_i + \mu \Big\lfloor \frac{q}{2} \Big\rfloor\Big) \bmod qa′=∑i∈S​Ai​modq,b′=(∑i∈S​bi​+μ⌊2q​⌋)modq

    Bản mã là (a′,b′)(a', b')(a′,b′).

    Giải mã bằng khoá bí mật sss: tính d=(b′−⟨a′,s⟩) mod qd = (b' - \langle a', s\rangle) \bmod qd=(b′−⟨a′,s⟩)modq, sau đó đưa ddd về đại diện đối xứng dc∈(−q/2,q/2]d_c \in (-q/2, q/2]dc​∈(−q/2,q/2] (nếu d>q/2d > q/2d>q/2 thì dc=d−qd_c = d - qdc​=d−q, ngược lại dc=dd_c = ddc​=d). Bit giải mã được là 000 nếu ∣dc∣<q/4|d_c| < q/4∣dc​∣<q/4, ngược lại là 111.

    Cho AAA, bbb, sss và TTT truy vấn mã hoá/giải mã (mỗi truy vấn gồm SSS và μ\muμ), với mỗi truy vấn hãy thực hiện mã hoá rồi giải mã ngay và in ra bit thu được.

    Ví dụ

    Input:

    3 32 4
    27 2 2 22
    7 1 17
    15 14 8
    6 5 27
    2 1 5
    3 5 2
    4
    1111 0
    0000 1
    1010 1
    0101 0
    

    Output:

    0
    1
    1
    0
    
    • Định dạng đầu vào:

      Dòng 1: ba số nguyên n,q,mn, q, mn,q,m (1≤n,m≤501 \le n, m \le 501≤n,m≤50, q≥4q \ge 4q≥4). Dòng 2: mmm số nguyên b1,…,bmb_1, \dots, b_mb1​,…,bm​ (0≤bi<q0 \le b_i < q0≤bi​<q). mmm dòng tiếp theo: mỗi dòng nnn số nguyên — hàng AiA_iAi​ (0≤Ai,j<q0 \le A_{i,j} < q0≤Ai,j​<q). Dòng tiếp theo: nnn số nguyên — khoá bí mật sss. Dòng tiếp theo: số nguyên TTT (T≥0T \ge 0T≥0) — số truy vấn. TTT dòng tiếp theo, mỗi dòng gồm chuỗi bit SSS độ dài mmm (0/1) và số nguyên μ∈{0,1}\mu \in \{0, 1\}μ∈{0,1}, cách nhau bởi dấu cách.

    • Định dạng đầu ra:

      In ra TTT dòng, mỗi dòng là bit (0 hoặc 1) giải mã được của truy vấn tương ứng.

    Ví dụ:

    Đầu vào:

    3 32 4
    27 2 2 22
    7 1 17
    15 14 8
    6 5 27
    2 1 5
    3 5 2
    4
    1111 0
    0000 1
    1010 1
    0101 0
    

    Đầu ra:

    0
    1
    1
    0
    

    Đầu vào:

    2 16 1
    6
    8 3
    4 2
    2
    1 1
    1 0
    

    Đầu ra:

    1
    0
    

    Đang tải editor...