Hàm hash
- Cho
$y = h(m) \rightarrow$ tìm$m$ khó. (tính 1 chiều) - Cho
$m$ , tìm$m'$ sao cho$h(m) = h(m')$ khó. - Tìm
$m, m'$ sao cho$h(m) = h(m')$ khó.
Trường hợp 2 và 3: hạn chế đụng độ
Cách 1: Dùng hệ mã
Cách 2: Kết hợp băm
VD:
Cách 3: Xây dựng thuật giải
VD: MASH:
- Chọn
$p, q$ nguyên tố,$M = pq$ có$m$ bit. - Chọn
$n$ là bội của 16 sao cho$n < m$ . -
$H_0 = 0, A = 1111 0000 ... 0000$ ($n$ bit) -
$X$ là thông điệp.
- Chia
$X$ thành$t$ khối$\frac{n}{2}$ bit. - Thêm
$\frac{n}{2}$ bit là giá trị b (giá trị của chiều dài$x$ ).
- Lặp từ
$i = 1 \rightarrow t$ :
- Chia khối
$X_i$ thành các khối 4 bit. - Chèn 4 bit 1111 vào trước, riêng khối cuối chèn
$1010$ .
Kết quả là
- Lặp từ
$i = 1 \rightarrow t$ :
$F_i = (H_{i - 1} \oplus y_i \lor A)^{257} \pmod M$ - Lấy
$G_i$ là$n$ bit phải$F_i$ . - Tính
$H_i = (a_i \oplus H_{i - 1})$
-
$H_t$ là kết quả.
- MD5 (mostly in password hashing)
- SHA-* (1 - 128bit, 2 - 256bit, 3 - non limited; mostly in blockchain SHA2)
- Bảo mật passwords
- Bảo vệ đường truyền: RSA - mã hóa username và password
- Bảo vệ dữ liệu trong database: hash password
- Mã chứng thực văn bản (MAC - Message Authentication Code)
- Bảo vệ tính toàn vẹn của văn bản.
- VD: Cho document
$M, c = h(M || k)$ (ghép$k$ là khóa bí mật của người chủ văn bản vào$M$ )
- VD: Cho document
- Chữ ký điện tử (Digital Signature)
Văn bản gốc
$M$ ,$C$ có$e, d$ (RSA),$A$ có khóa$k$ bí mật.
- Với
$A$ : tạo mã chứng thực$a = \text{MAC}(M || k)$ . - Với
$C$ :- Nén M thành u:
$u = h(M)$ . - Chữ ký của người công chứng:
$s = \text{RSA}(d, u)$
- Nén M thành u:
- Mọi người đều có thể kiểm tra: so sánh
$h(M) = \text{RSA}(e, s)$
Cho
- Tạo bảng
$t = 2^{\frac{n}{2}}$ biến thể của$P: P_1, P_2, ..$ - Lặp:
$\forall i \in t:$ chèn$(P_i, h(P_i))$ vào$t$ . - Tạo
$P'$ , tra trong$t$ .
Kháng: cho
Nguyên lí chung: dựa trên hệ mã public key cryptosystem
-
$s = f_d(m)$ , chỉ có chủ giữ$d$ mới ký được - Mọi người đều có
$e$ , nên đều có thể kiểm tra$f^{-1}_e(s) = m$
Tuy nhiên
Tạo key:
- Sử dụng pha tạo key của RSA tạo
$n, e, d$ . Chú ý$e$ dùng để ký - bí mật,$d$ dùng để kiểm chứng - công khai.
Pha ký:
- Người ký tạo digest
$h$ từ document$m$ , sau đó dùng RSA mã hóa$h$ thành chữ ký$s$ bằng khóa bí mật$e$ . - Người ký công khai document
$m$ , chữ ký$s$ và$n, d$ .
Pha kiểm chứng:
- Người kiểm chứng tạo digest
$h$ từ document$m$ . - Người kiểm chứng giải mã
$s$ thành$h'$ , dùng$d, n$ với thuật toán RSA - Nếu
$h' = h$ , document$m$ được gửi đi toàn vẹn, không bị chỉnh sửa, đúng người ký.
Quan trọng: Ký cần nhanh, verify không cần nhanh. Giải mã nhanh có cách (CRT).
- Các tham số:
- p là số nguyên tố (khoảng 512 bit).
- q là số nguyên tố (khoảng 160 bit).
-
$g \in \mathbb{Z}_N$ (bậc$g$ là bội của$q$ ) $h: {0, 1}^{*} \rightarrow {0, 1}^{160}$ -
$x : 0 < x < q$ (khóa mật) -
$y \equiv g^x \pmod p$ (Diffie-Hellman - khóa công khai)
- Ký văn bản
$m$ :- Chọn ngẫu nhiên
$k \in \mathbb{Z}_N$ -
$r \equiv (g^k \pmod p) \pmod q, s \equiv k^{-1}(h(m) + xr) \pmod q$ (Ký bằng khóa$x$ ) - Kết quả là
$(r, s)$ .
- Chọn ngẫu nhiên
- Xác minh chữ ký:
$t \equiv s^{-1} \pmod p$ -
$r \equiv (g^{h(m)t}y^{rt} \pmod p) \pmod q$ (Kiểm bằng khóa$y$ )
-
$A$ làm:- Chọn một
$s$ là số chính phương$\pmod n$ , công bố$(n, s)$ - Tính
$t^2 \equiv s \pmod n$ và giữ bí mật$t$ .
- Chọn một
-
$A$ làm:- Chọn ngẫu nhiên
$r < n$ $z_1 \equiv r^2 \pmod n, z_2 \equiv sz_1^{-1} \pmod n$ - Gửi
$(z_1, z_2)$ cho$B$ .
- Chọn ngẫu nhiên
-
$B$ làm:- Kiểm
$s \equiv z_1z_2 \pmod n$ - Chọn 1 bit
$c \in {0, 1}$ - Gửi
$c$ cho$A$ .
- Kiểm
-
$A$ làm:-
$c = 0$ thì gửi$r$ . -
$c = 1$ thì gửi$t^{r - 1}$ .
-
-
$B$ làm:-
$c = 0$ thì kiểm$r^2 \equiv z_1 \pmod n$ . -
$c = 1$ thì kiểm$(t^{r - 1})^2 \equiv z_2 \pmod n$ .
-
Cách trên là Interactive Proving.
Không giống CSDL quan hệ thường học, CSDL có thể là file, record, row, col, ..
Xét CSDL
Sử dụng CRT để mã hóa CSDL.
- Sinh
$n$ số nguyên tố$p_i$ khác nhau thỏa$p_i > f_i \forall i \in [1, n]$ - Giải hệ
$X \equiv f_1 \pmod{p_1}$ - ...
$X \equiv f_n \pmod{p_n}$
$C = X$ là mã hóa của$D$ ,$p_i$ là khóa để đọc$f_i$ , gửi khóa$p_i$ này cho chủ của$f_i$
$f_i \equiv C \pmod{p_i}$
Đa thức
Với
- với
$n = 2$ , đa thức$\displaystyle P_2(x) = y_1\frac{x - x_2}{x_1 - x_2} + y_2\frac{x - x_1}{x_2 - x_1}$ - với
$n = 3$ , đa thức$\displaystyle P_3(x) = y_1\frac{(x - x_2)(x - x_3)}{(x_1 - x_2)(x_1 - x_3)} + y_2\frac{(x - x_1)(x - x_3)}{(x_2 - x_1)(x_2 - x_3)} + y_3\frac{(x - x_1)(x - x_2)}{(x_3 - x_1)(x_3 - x_2)}$
Ví dụ: với ngưỡng
Ở đây ta chọn
Khi đó, nếu cần biết
Ví dụ:
- Nếu
$u_1, u_2, u_3$ cùng nhau giải mã, khi đó$\displaystyle P(0) = 1\frac{(0 - 2)(0 - 3)}{(1 - 2)(1 - 3)} + 1\frac{(0 - 1)(0 - 3)}{(2 - 1)(2 - 3)} + 4\frac{(0 - 1)(0 - 2)}{(3 - 1)(3 - 2)} = 4$ - Tương tự, chỉ cần 3 người cùng nhau giải mã sẽ thu được
$c$ .