So sánh mã khối và mã dòng
Mã hóa là là nhu cầu quan trọng trong cuộc sống của con người và là khái niệm trung tâm của An toàn thông tin. Nói đơn giản, mã hóa là làm sao để trao đổi thông tin giữa 2 bên mà không bị người thứ 3 biết được nội dung. Show Thời kỳ chiến tranh chính là lúc mà nhu cầu mã hóa thông tin trở nên cấp thiết nhất, nếu các thông tin mật bị kẻ thù giải mã được thì đó sẽ là thảm họa. Do vậy mà thời chiến cũng là thời kỳ bùng nổ của các lý thuyết về mã hóa. Trong chiến tranh thế giới thứ 2, phe Đồng Minh nhờ việc giải mã được cỗ máy mã hóa Enigma của quân Đức mà khiến cho chiến tranh rút ngắn khoảng 2 năm. Đức không thua sao được khi mà các thông tin quân sự mật đều bị phe Đồng Minh giải mã dễ dàng. Bạn đọc có thể đọc thêm về cuộc đời của Alan Turing, hoặc xem bộ phim The Imitation Game để hiểu thêm về cuộc chiến này dưới góc nhìn mật mã học. Sơ đồ hệ thống mật mãMột sơ đồ hệ thống mật mã gồm có năm thành phần:
Trong đó:
Như vậy: Đồng thời 2 hàm E và D phải thỏa mãn hệ thức Các tập ký tự bản rõ và bản mã thường dùng là tập 26 kí tự tiếng Anh, khi đó
hoặc có thể chuyển đổi tương đương thành tập các số nguyên để thuận tiện cho tính toán:
Ta có thể tạm chia các hệ mã hóa thành 3 loại: Mật mã khóa đối xứng, mật mã khóa bất đối xứng, và mã hóa một chiều. Mật mã khóa đối xứngMã hóa đối xứng nghĩa là chìa khóa để lập mã và chìa khóa giải mã là một. 2 bên A và B muốn trao đổi thông tin với nhau, trước tiên sẽ thống nhất phương pháp lập mã và giải mã, tức là hàm E và hàm D đã biết (thường thì người thứ 3 cũng sẽ biết được 2 hàm E và D). Thứ cần giữ bí mật chính là khóa Đa số các loại mật mã truyền thống đều là mã hóa đối xứng. Đơn giản nhất là mã Caesar hay mã chuyển dịch. Từng kí tự trong bản mã sẽ được dịch chuyển về phía sau Vd: với `c = E(p, k)`3, bản rõ HELLO sẽ được mã hóa thành JGNNQ. Ngoài ra còn các loại mật mã truyền thống khác như: mã thay thế, mã Affin, mã Vigenere, mã Hill, mã hoán vị, … hay các hệ mật mã hiện đại như mã DES, mã 3-DES, mã AES, … Mật mã khóa bất đối xứngMã hóa bất đối xứng nghĩa là chìa khóa mã hóa Tương tự mã hóa đối xứng, hàm E và hàm D sẽ được thống nhất trước và công khai, tuy nhiên điểm khác là khóa Khái niệm mật mã khóa công khai mới được ra đời vào giữa những năm 1970, và ngay sau đó đã trở thành một khái niệm trung tâm của khoa học mật mã hiện đại. Một số hệ mật mã khóa công khai phổ biến là: hệ RSA, hệ Rabin, hệ ElGamal, … Mã hóa một chiềuĐôi khi ta lại chỉ cần mã hóa mà không cần giải mã, khi đó ta sẽ dùng phương pháp mã hóa một chiều. Thông thường phương pháp mã hóa 1 chiều sử dụng 1 hàm băm (hash function) để cho ra kết quả là một chuỗi hash có độ dài cố định. Đặc điểm của hàm băm là có thể nhận vào 1 chuỗi có độ dày thay đổi nhưng kết quả trả về lại có độ dài cố định. Và việc giải mã chuỗi hash để tìm lại thông tin ban đầu là không thể. 2 chuỗi giống nhau khi đưa vào hàm băm sẽ cho ra cùng một chuỗi hash. 2 chuỗi chỉ khác biệt đôi chút khi đưa vào hàm băm lại trở nên hoàn toàn khác biệt. Vậy tại sao lại cần mã hóa một chiều, có thể bạn sẽ thắc mắc mã hóa mà không giải mã được thì mã hóa làm gì? Hãy tưởng tượng bạn viết 1 ứng dụng, và cần lưu mật khẩu đăng nhập của người dùng, nhưng nếu mã hóa mật khẩu theo kiểu mã hóa đối xứng hay bất đối xứng thì bạn vẫn sẽ phải lưu khóa Các hệ mã hóa một chiều phổ biến là: MD5 và SHA. Ok, bạn đã thấy ứng dụng của mã hóa một chiều rồi đấy, ngoài ra nó còn ứng dụng trong kiểm tra tính toàn vẹn dữ liệu với 1 nguyên lý tương tự. Mã hóa theo khối và mã hóa theo dòngNgoài cách chia 3 loại mã hóa như trên người ta còn chia các hệ mật mã thành 2 loại: mã hóa theo khối (block cipher) và mã hóa theo dòng (stream cipher). Mã hóa theo khốiMã hóa theo khối (block cipher) nghĩa là ta sẽ chia bản mã thành từng khối có độ dài bằng nhau và bằng `p = D(c, k')`4 (có thể chia thành khối 64 bit, 128 bit, … hoặc đơn giản là khối 3 kí tự, 4 kí tự, …) rồi áp dụng phép lập mã và giải mã đối với từng khối thông tin. Mã Caesar là trường hợp đặc biệt mà `p = D(c, k')`5, tức là ta mã hóa từng kí tự một. Mã hoán vị là ví dụ về mã theo khối với `p = D(c, k')`6. Các hệ mã khối nổi tiếng đó là DES có kích thước khối là 64 bit (tức là mỗi lần mã hóa một khối bản rõ 64 bit và cho ra khối bản mã 64 bit) và kích thước khóa là 56 bit; AES có kích thước khối là 128 bit, và kích thước khóa là 128, 192 hoặc 256 bit. Mã hóa theo dòngVới các hệ mã dòng (stream cipher), ta sẽ xử lý trên từng bit của bản rõ. Một hệ mã dòng rất nổi tiếng đó là One Time Pad (OTP). Với bản rõ `p = D(c, k')`9 `c ⊂ C; p ⊂ P và k, k' ⊂ K`0 Với OTP, khóa k phải đáp ứng 3 điều kiện sau đây:
Nếu thỏa mãn 3 điều kiện trên, hệ mã OTP sẽ là an toàn tuyệt đối (perfect security) theo định lý của Clause Shannon, tức là kẻ tấn công sẽ không thể biết được thông tin gì của bản rõ m chỉ từ bản mã c. Trong thực tế, người ta thường chọn ngẫu nhiên một khóa `c ⊂ C; p ⊂ P và k, k' ⊂ K`3 `c ⊂ C; p ⊂ P và k, k' ⊂ K`4 Thám mãCần phân biệt giữa thám mã với giải mã. Giải mã là khi ta đã biết hàm D và khóa Thám mã được chia làm các loại:
Hy vọng qua bài viết này người đọc sẽ có cái nhìn tổng quan về mật mã học và các loại mật mã. Các bài tiếp theo tôi sẽ trình bày từng hệ mật mã cụ thể cùng với đó là hướng dẫn viết code mã hóa và thám mã cho các hệ mật mã này. |