Professional Documents
Culture Documents
Chương 1
Chương 1
• “Một chuỗi các bước”: từ start → finish, mỗi bước chỉ được thực hiện khi bước trước nó đã xong.
• “bao gồm 2-3 bên”: ít nhất là 2 người cho một giao thức. (không bao giờ là 1 người cả)
• “hoàn thành công việc”: giao thức phải đạt được cái gì đó
→ Giao thức có thể hoàn thành nhưng mà không an toàn (người ngoài phá hoặc một trong các bên không
trung thực).
→ Giao thức an toàn, mật mã sẽ đảm bảo secrecy, authentication, integrity (thông tin không nhập nhằng,
gốc), dishonest people.
- Người tham gia phải: Hiểu rõ giao thức và Đồng ý để tham gia
- Giao thức phải: Không mập mờ (mỗi bước phải định nghĩa, không nhập nhằng)
- Tuy nhiên chi phí mời/thuê một người như vậy sẽ là khá đáng kể. Vì vậy arbitrated protocols có thể chia
thành 2 pha giao thức (sub-protocol)
• Non-arbitrated subprotocol (Giao thức con không người phân xử): thực hiện khi các bên muốn
hoàn thiện giao thức.
• Arbitrated subprotocol (Giao thức con có người phân xử): thực hiện chỉ khi có các trường hợp
tranh chấp
• Người phân xử phải không có quyền lợi liên can đến giao dịch và phải được cả hai tin tưởng
Ví dụ (Adjudicated Protocols):
• Alice và Bob thương lượng các điều khoản trong hợp đồng
• Alice ký hợp đồng
• Bob ký hợp đồng
Điểm khác biệt giữa người trọng tài và người phân xử (dùng theo ý nghĩa như ở đây) là người phân xử
không phải luôn luôn cần thiết. Nếu có tranh cãi thì mới cần người phân xử, không có tranh cãi thì thôi.
Vì thế trong trường hợp này ta không dùng khái niệm người trọng tài (arbitrator), với ý nghĩa là người phải
trực tiếp tham gia vào protocol, mà sử dụng khái niệm người phân xử (adjudicator): người này không cần
phải có mặt khi Alice và Bob tiến hành giao dịch, mà chỉ được mời đến khi Alice và Bob yêu cầu giải quyết
tranh cãi.
- Nếu một hoặc các bên cố gian lận, các bên khác sẽ ngay lập tức phát hiện và dừng giao thức.
→ Tuy nhiên không phải có giao thức này trong mọi trường hợp. (kịch bản đẹp nhưng khó xảy ra)
• Giả sử Alice và Bob đều có khóa riêng với Trent (ví dụ: KDC-Key Distribution Center). Các khóa này
phải sẵn có trước khi giao thức bắt đầu
• A và T phải có KAT (Ví dụ: mã băm password giữa mình và google); B và T phải có KBT
Giao thức
(1) A → T {yêu cầu tạo khóa phiên để liên lạc với Bob}
(2) T → A {𝐾}𝐾𝐴𝑇 || {𝐾}𝐾𝐵𝑇
(4) A → B {𝐾}𝐾𝐵𝑇
- Giao thức trên có một khuyết điểm lớn: các bên không thể XÁC THỰC được lẫn nhau
(B nhận một thông điệp nói là từ A thì B không thể xác minh được có đúng thông điệp do A chuyển trực
tiếp tới hay không hay do một kẻ giả mạo truyền tới. Tương tự với việc A nhận từ T)
→ Vì vậy kẻ tấn công mặc dù chưa thể lấy được thông tin mật mà các bên chuyển cho nhau, nhưng có thể
làm cho các bên chấp nhận và xử lý thông tin cũ (phát lại), dẫn tới xử lý thừa có thể gây thiệt hại nghiêm
trọng.
- Ví dụ:
(tấn công nhiều lần, khiến B tưởng A vẫn đang đòi, gây thiệt hại cho B)
(FROM PĐH) thầy bảo là dữ liệu lớn mà mã bằng khóa công khai thì rất là lâu và không nên dùng
• (3) Bob giải mã cái kia bằng private key của mình → Bob lấy được khóa phiên K
• (4) Cả hai bây giờ đều có thể mã hóa cuộc trò chuyện sử dụng khóa phiên K
- Máy trung gian, đường truyền đi qua nó, thằng này nguy hiểm gọi là Mallory (M). M có thể giả dạng Bob
để nói chuyện với Alice, giả dạng Alice để nói chuyện với Bob.
- Nếu không dùng KDC để lấy khóa public của nhau thì mình hay truyền public key cho nhau
1. Alice gửi Bob khóa công khai 𝐾𝐴 của mình. Mallory can thiệp và chặn 𝐾𝐴 , gửi cho B khóa của nó
𝐾𝑀
2. (Tương tự chiều ngược lại)
→ Vậy là từ bây giờ Bob gửi cho Alice, sử dụng “khóa công khai của Alice” (thực chất là của Mallory)
để gửi. (và ngược lại)
→ Mallory giải mã cái đấy, làm gì k biết xong lại mã hóa lại bằng mã công khai của Alice
→ Alice nhận được mà không hề hay biết đã bị đọc trộm, chỉnh sửa gì cả
→ Nhưng mà ai cũng có khóa công khai thì khó, dùng phức tạp nên mọi người thường dùng khóa công
khai tự tạo thôi.
*Interlock protocol (dùng khóa công khai không cần chứng chỉ, chống lại man-in-the-middle attack)
• Nếu ở bước (3), Eve nhận được một nửa message từ Alice, giải mã ra sẽ ra đoạn bit vô nghĩa
• Phải nhận cả hai nửa từ Alice xong ghép lại, xong giải mã ra mới có ý nghĩa được
→ Muốn thu được thông điệp gốc đã gửi thì Eve phải chờ nhận được cả 2 nửa mà Alice lần lượt gửi,
tuy nhiên lúc đó (đã là bước 5) đã quá muộn để TÁC ĐỘNG lên cái mà Bob có thể gửi đi ở bước số 4.
6. Authentication
- Bài toán đặt ra: Khi Alice đăng nhập vào hệ thống (ATM…) làm sao để hệ thống biết đó là Alice mà không
phải Eve đang cố gắng giả danh Alice?
- Xác thực sử dụng hàm băm: hệ thống sẽ không cần biết password của Alice mà vẫn phân biệt được pw
hợp lệ hay không.
1. A → T: 𝐴𝑙𝑖𝑐𝑒, 𝐵𝑜𝑏, 𝑅𝐴
2. T → A: {{𝐾, 𝐴𝑙𝑖𝑐𝑒}𝐾𝐵𝑇 , 𝑅𝐴 , 𝐵𝑜𝑏, 𝐾} 𝐾𝐴𝑇
3. Alice giải mã và lấy được khóa phiên K. Alice có thể confirm rằng random number 𝑅𝐴 bằng 𝑅𝐴 mà
đã gửi cho Trent ở bước (1) (Alice xác thực được Trent). Sau đó, Alice gửi Bob
A → B: {𝐾, 𝐴𝑙𝑖𝑐𝑒}𝐾𝐵𝑇
4. Bob nhận được đoạn mã và giải mã, lấy ra khóa phiên K. Bob tạo một số random khác 𝑅𝐵 và gửi
lại cho Alice (mã hóa bằng khóa phiên K) (cái này kiểu challenge Alice)
B → A: {𝑅𝐵 }𝐾
5. Alice giải mã bằng khóa K. Alice tạo ra 𝑅𝐵 − 1 và mã hóa bằng K. Gửi lại cho Bob
A → B: {𝑅𝐵 − 1}𝐾
➔ Bob nhận được và Bob có thể xác thực được Alice.
➔ Giao thức giúp Alice xác thực được Trent, Bob xác thực được Alice.
- (4) (5) để xác thực tránh tấn công phát lại do số random 𝑅𝐵 qua thời gian nó sẽ khác đi, không thể phát
lại được nữa.
(Nếu xác thực được thì sẽ tránh được tấn công phát lại)
7. Secret Spliting
- Chia message ra thành nhiều phần, mỗi phần sẽ không có ý nghĩa nhưng nếu ghép tất cả lại sẽ trở nên
có nghĩa.
- Mỗi người giữ một phần mật khẩu, tất cả cùng gõ mật khẩu một lúc mới mở.
8. Secret sharing
- Nâng cấp hơn cái Secret Spliting.
- Chia message thành n phần (gọi là shadows hoặc shares) sao cho chỉ cần dùng m phần bất kì đều tái tạo
lại được message (chứ không cần cả n phần như trên).
- Ví dụ:
9. Bit Commitment
- Bit Commitment là một cơ chế cho phép một người cam kết với một giá trị đã chọn, trong khi giấu nó
với người khác, và có khả năng tiết lộ giá trị đã cam kết sau này.
→ Các chương trình phải được thiết kế để một bên không thể thay đổi giá trị hoặc tuyên bố sau khi đã
cam kết.
- Ví dụ:
Bob không thể xem bit này, A cũng không thể thay đổi cho đến khi trận đấu kết thúc
(trận đấu kết thúc sau màn trình diễn tuyệt vời của Kim Ri Cha)
• Lỡ key rởm ra kết quả sai thì Alice sẽ đánh tráo kết quả (tránh cửa thua, vào cửa thắng)
• Nếu không có R thì Alice có cơ hội làm việc đó
→ Bob dùng R để xác minh xem thực sự Alice có đánh tráo kết quả bên trong hay không.
• Alice sẽ tìm K và K’ sao cho 𝐸𝐾 (𝑅, 0) = 𝐸𝐾′ (𝑅, 1) = 𝑦 và gửi 𝑦 cho Bob
• Khi kết quả trò chơi xác định xong, tùy theo thắng hay thua thì Alice gửi 𝐾 hoặc 𝐾 ′
• Vậy Alice lúc nào cũng thắng
→ Nếu R là Bob random thì Alice vẫn gian lận được nhưng mà sẽ rất mất thời gian (do phải tìm được K
và K’ thỏa mãn mà), cơ hội làm rất nhỏ.
+) R2 để che giấu giá trị b, Bob không đoán được bit b là gì (0 hay 1 chẳng hạn). (che giấu giá trị b)
Bob có hàm băm, băm thử (𝑅1 , 0) hoặc (𝑅2 , 0) xem thằng nào trùng với cái kia là đoán ra
được luôn.
+) R1 giúp cho việc Alice không thể đánh tráo bit b được (chống Alice gian lận, bảo vệ nhà cái Bob)
- Xét coin flipping sử dụng hàm băm: Giả sử Alice và Bob thống nhất hàm băm f.