Bất đối xứng, PKI, blockchain và chống MITM
Mã bất đối xứng, bắt tay SSL TLS, hạ tầng khóa công khai, blockchain và phòng chống MITM khi triển khai ML.
KhóThuật toán ~60 phút
Ôn lại trước khi học
Giới thiệu
Bài này học khóa công khai, chứng chỉ và chống nghe lén. Dùng để giữ mô hình ML an toàn khi triển khai.
Kiến thức cần nhớ
Mã bất đối xứng
- Định nghĩa: cặp khóa công khai mã hóa, bí mật giải mã.
- Ai cũng bỏ thư vào hòm, chỉ chủ hòm mở được.
- Ví dụ đời thường: như khe hòm thư ai cũng nhét được.
- Chậm hơn đối xứng hàng trăm lần thực tế.
- Nên dùng lai: bất đối xứng trao khóa, đối xứng mã data.
TLS và PKI
- Định nghĩa: TLS bắt tay rồi chuyển sang mã nhanh.
- Trình duyệt kiểm chứng chỉ trước khi tin máy chủ.
- PKI là hệ nhà cấp chứng chỉ xác minh danh tính.
- Ví dụ đời thường: như kiểm căn cước trước khi giao chìa.
- Không có PKI thì kẻ gian tự xưng tên người khác.
| Lớp phòng thủ | Chống gì | Bằng gì |
|---|---|---|
| Nghe lén | Đọc trộm | TLS, mã hóa |
| Mạo danh | Giả máy chủ | Chứng chỉ, ghim |
| Lộ khóa | Dùng mãi 1 khóa | Xoay và thu hồi |
Blockchain và MITM
- Định nghĩa: khối sau chứa băm khối trước nên khó sửa.
- Nhiều bên không tin nhau vẫn đồng ý 1 sổ chung.
- MITM là kẻ chen giữa đọc sửa lưu lượng đi qua.
- Ví dụ đời thường: như người đưa thư lén mở thư.
- Sửa bằng mã hóa lúc nghỉ và kiểm toàn vẹn model.
Ví dụ
- Input: tải model qua mạng không TLS -> Output: MITM tráo model độc.
- Giải thích: thiếu chứng chỉ nên không phát hiện giả mạo.
# Kiểm toàn vẹn trước khi tải model
import hashlib
bam = hashlib.sha256(open("m.bin","rb").read()).hexdigest()
print(bam == bam_chuan) # True mới dùng
💻 Bài tập
Ngôn ngữ: Python 3 với cryptography. Nộp vào day-106/.
RSA tự cài ở Bài 1 chỉ để hiểu toán. Không dùng để bảo vệ dữ liệu thật. Mọi việc thật dùng thư viện đã kiểm định.
Bài 1: RSA tí hon
| Hàm | Yêu cầu |
|---|---|
is_probable_prime(n, k=20) | Miller-Rabin |
gen_prime(bits) | Sinh số nguyên tố ngẫu nhiên bằng secrets |
egcd, modinv | Nghịch đảo modulo |
keygen(bits=512) | e = 65537, trả (n, e) và (n, d) |
encrypt(m, pub), decrypt(c, priv), sign(m, priv), verify(m, s, pub) | pow(m, e, n) |
decrypt(encrypt(m)) == m với 100 m ngẫu nhiên < n
verify(m, sign(m)) = True; sửa 1 bit của m -> False
p = 61, q = 53, e = 17 -> n = 3233, d = 2753; encrypt(65) = 2790
Bài 2: Mã hóa lai và chứng chỉ
- Dùng
cryptography: sinh cặp khóa RSA 2048. Mã hóa file 10 MB bằng mã hóa lai: khóa AES-256 ngẫu nhiên mã hóa file (AES-GCM), RSA-OAEP mã hóa khóa AES. - So thời gian: mã hóa 10 MB trực tiếp bằng RSA (theo khối) và bằng lai.
- Tự tạo CA gốc, cấp chứng chỉ cho
localhost. Kiểm tra chữ ký chứng chỉ bằng khóa công khai CA. Sửa 1 byte trong chứng chỉ: kiểm tra thất bại.
Bài 3: Blockchain tí hon và MITM (nâng cao)
Block(index, timestamp, data, prev_hash, nonce)vớihash = sha256(...). Proof-of-work: hash bắt đầu bằng 4 số 0.Chain.is_valid(). Sửadatacủa khối 3: chuỗi không hợp lệ, trừ khi đào lại mọi khối sau. Đo thời gian đào lại.- MITM: giả lập client tải file model từ server qua kênh không mã hóa, kẻ giữa tráo file. Sửa bằng 2 cách: kiểm tra SHA-256 công bố trước, và chữ ký số của server. Viết test cho cả 2.
✅ Tiêu chí hoàn thành
- RSA tí hon pass ví dụ số nhỏ và test ngẫu nhiên.
- Bảng thời gian RSA trực tiếp và mã hóa lai.
- Chứng chỉ bị sửa thì kiểm tra thất bại.
- Bài 3 phát hiện được file bị tráo.
❓ Câu hỏi ôn tập
- Khóa công khai khác khóa bí mật sao?
- TLS dùng lai thế nào?
- PKI tin ai đầu tiên?
- MITM chen vào đâu?
🌕 Bạn đã hoàn thành ngày 106. Làm hết bài tập phía trên rồi sang ngày tiếp theo.