Mã hóa và băm
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| symmetric/sɪˈmetrɪk/ | Đối xứng |
| encryption/enˈkrɪpʃn/ | mã hóa |
| asymmetric/ˌeɪsɪˈmetrɪk/ | Không đối xứng |
| plaintext/ˈpleɪntekst/ | văn bản rõ |
| ciphertext/ˈsaɪfətekst/ | văn bản mã hóa |
| decrypt/dɪˈkrɪpt/ | Giải mã |
| key pair/kiː peə/ | Cặp khóa |
| public key/ˈpʌblɪk kiː/ | Khóa công khai |
| private key/ˈpraɪvət kiː/ | Khóa riêng tư |
| session key/ˈseʃn kiː/ | Khóa phiên |
| cryptographic hash/ˌkrɪptəˈɡræfɪk hæʃ/ | Hàm băm mật mã |
| digest/ˈdaɪdʒest/ | Bản tóm tắt |
Hai người lạ đồng ý một bí mật trong nơi công cộng
- Đây là một vấn đề nghe có vẻ như không thể. Bạn và một cửa hàng chưa từng gặp nhau và không chia sẻ gì với nhau. Mọi thứ bạn nói với nhau đều bị mọi người nghe lén. Hãy đồng ý một khóa bí mật.
- Cho đến năm 1976, câu trả lời là bạn không thể: mã hóa đối xứng cần khóa được giao trước đó, qua người đưa thư hoặc trực tiếp, đó là lý do tại sao sách mã thời chiến được in và vận chuyển.
- Sau đó Diffie, Hellman và sau này Rivest, Shamir và Adleman đã chứng minh điều đó có thể thực hiện được, sử dụng một khóa chỉ dùng để khóa và một khóa khác chỉ dùng để mở khóa. Mọi mua hàng trực tuyến của bạn đều dựa vào điều này.
- Bài học này về mã hóa đối xứng và mã hóa bất đối xứng, tại sao các hệ thống thực tế sử dụng cả hai, và hàm một chiều gọi là hashing.
Từ vựng
- Mã hóa biến plaintext (dữ liệu rõ) dễ đọc thành ciphertext (dữ liệu mã hóa) khó đọc sử dụng một khóa; để giải mã là đảo ngược quá trình đó bằng khóa thích hợp.
- Mã hóa bảo vệ tính bí mật: bản sao bị chặn không thể hiểu được. Nó không ngăn chặn dữ liệu bị chặn, trì hoãn hoặc xóa bỏ.
- Độ mạnh nằm ở khóa, không phải ở việc giữ thuật toán bí mật. Các thuật toán được xuất bản và nghiên cứu chính xác để các điểm yếu được phát hiện bởi bạn bè thay vì kẻ thù.
Mã hóa đối xứng
- Mã hóa đối xứng sử dụng cùng một khóa để mã hóa và giải mã. AES là ví dụ tiêu chuẩn.
- Nó nhanh, nên phù hợp với dữ liệu khối: toàn bộ ổ đĩa, dòng video, tệp lớn.
- Điểm yếu của nó là phân phối khóa: khóa phải đến tay bên kia mà không bị chặn, và nếu bị chặn thì toàn bộ hệ thống sẽ bị phá vỡ. Với $n$ người muốn trò chuyện riêng tư theo cặp, số lượng khóa cần thiết tăng theo bình phương của $n$.
Mã dịch chuyển (khóa đối xứng)
Mã Caesar dịch chuyển mỗi chữ cái về phía trước theo một khóa cố định. KHÓA GIỐNG NHAU vừa mã hóa vừa giải mã — đó chính là ý nghĩa của đối xứng. Hãy cố đọc văn bản đã mã hóa mà không biết độ dịch chuyển.
Mã hóa đối xứng sử dụng:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Mã hóa đối xứng chia sẻ một khóa bí mật — nhanh, nhưng nó phải được phân phối an toàn.
Mã hóa bất đối xứng
- Mã hóa bất đối xứng cung cấp cho mỗi người dùng một cặp khóa: một khóa công khai họ công bố cho thế giới, và một khóa riêng tư họ không bao giờ tiết lộ.
- Bất cứ thứ gì được mã hóa bằng khóa công khai chỉ có thể được giải mã duy nhất bằng khóa riêng tư tương ứng. Vì vậy, để gửi Alice một tin nhắn bí mật, bạn mã hóa bằng khóa công khai của Alice, và chỉ có Alice mới có thể đọc nó.
- Không cần trao đổi khóa trước, điều này giải quyết vấn đề mà bài học đã mở ra. Chi phí là nó chậm hơn nhiều, nên không được sử dụng cho lượng dữ liệu lớn.

Một khóa khóa, một khóa mở, và chỉ một trong số chúng là bí mật
Ghép nối mỗi công cụ mã hóa với những gì nó sử dụng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Đối xứng nhanh nhưng cần chia sẻ khóa; bất đối xứng giải quyết vấn đề đó với cặp khóa; hàm băm là một chiều; HTTPS kết hợp chúng.
Để gửi một tin nhắn bảo mật đến Alice sử dụng mã hóa bất đối xứng, bạn mã hóa bằng:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Việc mã hóa bằng khóa công khai của người nhận có nghĩa là chỉ khóa riêng tư tương ứng của họ mới có thể giải mã nó.
Ghép nối mỗi loại mã hóa với điểm yếu chính của nó.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Sơ đồ hỗn hợp sử dụng từng loại để che phủ điểm yếu của loại kia: bất đối xứng để giao deliver khóa, đối xứng để mang dữ liệu.
Ví dụ làm mẫu: gửi tin nhắn bí mật
- Giải thích cách mã hóa bất đối xứng cho phép Bob gửi tin nhắn bí mật đến Alice, ngay cả khi họ chưa từng gặp nhau. [3]
- Alice công bố khóa công khai của cô ấy, mà bất kỳ ai cũng có thể có, bao gồm cả kẻ nghe lén.
- Bob mã hóa tin nhắn bằng khóa công khai của Alice. Ciphertext chỉ có thể được giải mã bằng khóa riêng tư tương ứng.
- Alice giải mã nó bằng khóa riêng tư của mình, mà cô ấy chưa từng chia sẻ. Kẻ nghe lén nắm giữ khóa công khai và ciphertext không thể khôi phục tin nhắn.
- Lỗi phổ biến nhất là nói Bob mã hóa bằng khóa của chính anh ta. Hãy theo dõi khóa nào được sử dụng ở mỗi bước.
Bob gửi Alice một tin nhắn bảo mật sử dụng mã hóa bất đối xứng. Anh ta mã hóa bằng khóa nào?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Chỉ có khóa riêng tư của Alice mới có thể đảo ngược những gì khóa công khai của cô ấy đã làm, và chỉ có Alice mới có nó. Bob chưa bao giờ thấy khóa riêng tư của Alice.
Phương pháp lai, là những gì thực sự xảy ra
- Đối xứng nhanh nhưng không thể chia sẻ khóa của nó; bất đối xứng có thể chia sẻ khóa nhưng chậm. Các hệ thống thực tế sử dụng mỗi loại cho những gì nó giỏi.
- Client tạo một khóa phiên ngẫu nhiên, mã hóa khóa nhỏ bé đó bằng khóa công khai của server, và gửi đi. Server giải mã nó bằng khóa riêng tư của mình, và giờ cả hai phía đều có cùng một khóa phiên.
- Mỗi byte của cuộc trò chuyện thực tế sau đó được mã hóa đối xứng bằng khóa phiên đó: nhanh, và bước bất đối xứng chậm chạp chỉ diễn ra một lần, trên vài byte.
- Đây chính xác là cách HTTPS và SSH hoạt động.

Bất đối xứng để đồng ý khóa, đối xứng để mang dữ liệu
Trong phương pháp hỗn hợp được sử dụng bởi HTTPS, mã hóa bất đối xứng được sử dụng để:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Mã hóa bất đối xứng chậm chỉ chia sẻ một khóa phiên; phần dữ liệu chính sau đó sử dụng mã hóa đối xứng nhanh.
Sắp xếp các bước của cơ chế lai được HTTPS sử dụng theo thứ tự.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Bước bất đối xứng chậm chỉ chạy một lần, trên vài byte; mọi thứ sau đó đều là mã hóa đối xứng nhanh.
Hashing
- Một bảng băm mật mã biến đầu vào có kích thước tùy ý thành digest (bản tóm tắt) có kích thước cố định. Đầu vào giống nhau luôn cho ra digest giống nhau, và một thay đổi nhỏ ở đầu vào làm thay đổi hoàn toàn digest.
- Nó là một chiều: đầu vào không thể được khôi phục từ digest. Đó là mục đích chính, và đó là điều khiến nó khác với mã hóa, vốn được thiết kế để đảo ngược.
- Ứng dụng: lưu trữ mật khẩu, nơi hệ thống chỉ giữ digest và so sánh digests lúc đăng nhập, nên cơ sở dữ liệu bị trộm sẽ không cung cấp mật khẩu; và kiểm tra tính toàn vẹn, nơi digest của tệp được tính lại và so sánh để phát hiện bất kỳ thay đổi nào.
Một hàm băm mật mã tạo ra một ____ có kích thước cố định từ đầu vào có kích thước bất kỳ.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Cùng một đầu vào luôn tạo ra cùng một digest, một thay đổi nhỏ sẽ tạo ra một digest hoàn toàn khác, và không thể khôi phục lại đầu vào từ digest đó.
Ví dụ làm mẫu: tại sao hash mật khẩu thay vì mã hóa nó
- Một trang web lưu mật khẩu người dùng dưới dạng bảng băm thay vì văn bản mã hóa. Giải thích tại sao.
- Mã hóa là đảo ngược được: một khóa tồn tại đâu đó biến giá trị đã lưu trở lại thành mật khẩu, và kẻ tấn công thu được cơ sở dữ liệu cũng có thể thu được khóa.
- Hashing là một chiều, nên cơ sở dữ liệu bị trộm chứa các digest sẽ không cung cấp mật khẩu, và thậm chí nhân viên của trang web cũng không thể đọc chúng.
- Đăng nhập vẫn hoạt động vì hệ thống hash những gì người dùng gõ và so sánh digests, không bao giờ so sánh chính mật khẩu.
Băm và hiệu ứng tuyết lở
Một hàm băm là một chiều: dễ tính toán, gần như không thể đảo ngược. Một thay đổi nhỏ trong đầu vào lật ngược một phần lớn, khó dự đoán của đầu ra — hiệu ứng tuyết lở khiến hàm băm tốt cho mật khẩu.
Một hàm băm mật mã mang tính một chiều (không thể khôi phục đầu vào từ digest) và thể hiện hiệu ứng tuyết lở — một thay đổi nhỏ trong đầu vào sẽ đảo ngược một phần lớn, khó dự đoán của đầu ra.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Tính một chiều cộng với hiệu ứng tuyết lở khiến cho việc lưu trữ mật khẩu dưới dạng hash và kiểm tra tính toàn vẹn trở nên hiệu quả.
Tại sao nên lưu mật khẩu dưới dạng hash thay vì mã hóa? Chọn tất cả các phương án đúng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Mặc dù digest có kích thước cố định thực sự có thể ngắn hơn, nhưng đó không phải là lý do bảo mật. Tính không thể đảo ngược mới là yếu tố then chốt.
Điểm số dễ mất
- Để gửi cho ai đó một tin nhắn bí mật, bạn sử dụng khóa công khai của họ, không phải của bạn. Nói rõ khóa của ai được sử dụng ở từng bước.
- Điểm yếu của mã hóa đối xứng là phân phối khóa; điểm yếu của mã hóa bất đối xứng là tốc độ. Hệ thống lai sử dụng cả hai để bù đắp cho nhau.
- Băm (Hashing) là một chiều và không phải mã hóa: không có khóa và không có gì để giải mã.
- Mã hóa chỉ bảo vệ tính bí mật. Nó không ngăn chặn việc bị nghe lén, xóa bỏ hoặc thay đổi tin nhắn một cách khó phát hiện: để làm được điều đó, bạn cần dùng hashing.
Bạn đã nắm vững
- mã hóa biến dữ liệu rõ thành dữ liệu mã bằng một khóa và chỉ bảo vệ tính bí mật; sức mạnh nằm ở khóa, không phải ở việc giấu thuật toán
- đối xứng: một khóa chung, nhanh, tốt cho dữ liệu khối, yếu về phân phối khóa · bất đối xứng: một khóa công khai để mã hóa và một khóa riêng tư để giải mã, không cần trao đổi trước, nhưng chậm
- hệ thống lai được HTTPS và SSH sử dụng gửi một khóa phiên ngẫu nhiên được mã hóa bất đối xứng, sau đó truyền dữ liệu theo cách đối xứng
- một hàm hash mật mã học tạo ra một đoạn digest có kích thước cố định, là một chiều, và được dùng cho mật khẩu và kiểm tra toàn vẹn