Một số mật mã khối đối xứng quan trọng được sử dụng ngày nay dựa trên cấu trúc được gọi là mật mã khối Feistel. [FEIS73]. Vì lý do đó, điều quan trọng là phải kiểm tra các nguyên tắc thiết kế của mật mã Feistel.
Trong phần này, chúng ta bắt đầu với việc so sánh Mật mã dòng và Mật mã khối. Sau đó, chúng tôi thảo luận về cấu trúc mật mã khối Feistel.
Mục lục
Mật mã dòng và mật mã khối
Mật mã luồng là một loại mã hóa luồng dữ liệu kỹ thuật số từng bit hoặc từng byte một. Ví dụ về mật mã dòng cổ điển là mật mã Vigenère tự động và mật mã Vernam. Trong trường hợp lý tưởng, phiên bản đệm một lần. của mật mã Vernam sẽ được sử dụng, trong đó dòng khóa (ki) dài bằng số bit của bản rõ (pi).
Nếu dòng khóa mật mã là ngẫu nhiên, thì mật mã này không thể bị phá vỡ bằng bất kỳ cách nào khác ngoài việc lấy dòng khóa. Tuy nhiên, dòng khóa phải được cung cấp cho cả hai người dùng trước thông qua một số kênh an toàn và độc lập. Điều này dẫn đến một số vấn đề không sử dụng được đối với dữ liệu lớn
Theo đó, vì những lý do thực tế, bộ tạo luồng bit phải được coi là một thủ tục thuật toán, do đó, luồng bit được mã hóa có thể được tạo bởi cả hai người dùng. Bộ tạo luồng bit là một thuật toán được kiểm soát bằng khóa và phải tạo ra luồng bit mạnh về mặt mật mã. Nghĩa là, việc dự đoán các phần tương lai của luồng bit dựa trên các phần trước đó của luồng bit là không thực tế về mặt tính toán. Hai người dùng chỉ cần chia sẻ khóa tạo và mỗi người có thể tạo dòng khóa.
Mã khối là một khối trong đó khối bản rõ được coi như khối bản rõ cần xử lý và được sử dụng để tạo ra một khối bản mã có độ dài bằng nhau. Thông thường, kích thước khối 64 hoặc 128 bit được sử dụng, như với Mật mã luồng, trong đó hai người dùng chia sẻ khóa mã hóa đối xứng.
Sử dụng một số chế độ hoạt động, Mật mã khối có thể được sử dụng để đạt được hiệu quả tương tự như Mật mã dòng. Cần nhiều nỗ lực hơn nữa để đi vào phân tích mật mã khối, nói chung Mật mã khối dường như có thể áp dụng cho nhiều ứng dụng hơn so với Mật mã dòng. Phần lớn các ứng dụng mật mã đối xứng dựa trên mạng sử dụng Mật mã khối.
Cấu trúc mật mã Feistel
Một mật mã khối hoạt động trên một khối bản rõ gồm n bit để tạo ra một khối bản mã gồm n bit. Có thể có 2^n khối bản rõ khác nhau và để mã hóa có thể đảo ngược (nghĩa là có thể giải mã được), mỗi khối phải tạo một khối bản mã duy nhất. Sự chuyển đổi như vậy được gọi là đảo ngược, hoặc không có nghĩa. Các ví dụ sau đây minh họa các phép biến đổi dị thường và không đặc trưng cho n = 2.
Trong trường hợp sau, một bản mã 01 có thể được tạo bởi một trong hai khối văn bản thuần túy. Vì vậy, nếu chúng ta giới hạn ánh xạ đảo ngược, số phép biến đổi khác nhau là (2n!)^2.
Hình trên minh họa logic của một mật mã thay thế phổ biến cho n = 4. Đầu vào 4 bit tạo ra một trong 16 trạng thái đầu vào có thể, được ánh xạ bởi mật mã phụ tới một trong 16 trạng thái đầu ra có thể. có thể, mỗi trạng thái được lặp lại – được gửi bởi 4 bit bản rõ.
Ánh xạ mã hóa và giải mã có thể được xác định bằng cách lập bảng, như hình dưới đây:
Feistel gọi đây là “mật mã khối ý tưởng”. Bởi vì nó cho phép số ánh xạ mật mã tối đa có thể từ khối bản rõ. Nhưng có một vấn đề thực sự với “mật mã khối ý tưởng”. Nếu kích thước khối nhỏ, chẳng hạn như n = 4, được sử dụng, thì hệ thống tương đương với mật mã thay thế cổ điển.
Những hệ thống như vậy, như chúng ta đã thấy, dễ bị tổn thương khi phân tích thống kê văn bản gốc. Điểm yếu này không cố hữu trong việc sử dụng mật mã thay thế mà là kết quả của việc sử dụng kích thước khối nhỏ. Nếu n đủ lớn và cho phép thay thế thuận nghịch tùy ý giữa bản rõ và bản mã, thì các đặc điểm thống kê của bản rõ ban đầu bị che lấp đến mức loại phân tích mật mã này không khả thi.
Tuy nhiên, một mật mã thay thế có thể đảo ngược tùy ý (mật mã khối lý tưởng) cho kích thước khối lớn là không thực tế, tuy nhiên, từ quan điểm triển khai và hiệu suất. Đối với một phép biến đổi như vậy, bản thân ánh xạ tạo thành chìa khóa. Xem lại bảng chuyển đổi ở trên, xác định một ánh xạ ngược cụ thể từ bản rõ sang bản mã cho n = 4.
Ánh xạ có thể được chỉ định bởi các mục trong cột thứ hai, hiển thị giá trị của bản mã cho mỗi khối bản rõ. Về bản chất, đây là chìa khóa xác định một ánh xạ cụ thể trong số tất cả các ánh xạ có thể. Trong trường hợp này, sử dụng phương pháp xác định khóa đơn giản này, độ dài khóa cần thiết là (4 bit) * (16 hàng) = 64 bit.
Nói chung, đối với mật mã khối n bit lý tưởng, độ dài của khóa được xác định theo kiểu này là n * (2^n) bit. Đối với khối 64 bit, có độ dài mong muốn để ngăn chặn các cuộc tấn công thống kê, độ dài khóa bắt buộc là 64 * (2^64) = 2^70 hoặc 10^21 bit.
Mật mã Feistel
Feistel đề xuất rằng chúng ta có thể ước tính “mật mã khối ý tưởng” bằng cách sử dụng khái niệm “mật mã sản phẩm”, là việc triển khai hai hoặc nhiều loại mã hóa đơn giản theo cách sao cho kết quả cuối cùng hoặc sản phẩm được mã hóa mạnh hơn bất kỳ loại nào. mã hóa thành phần. Bản chất của phương pháp này là phát triển một mật mã khối có độ dài khóa là k bit và độ dài khối là n bit, cho phép tổng cộng 2^k phép biến đổi có thể, thay vì (2^n)! chuyển đổi có sẵn với “mật mã khối ý tưởng”.
Cụ thể, Feistel đề xuất việc sử dụng một mật mã thay thế của các phép thay thế và hoán vị, trong đó các thuật ngữ được định nghĩa như sau:
- Thay thế: Mỗi phần tử hoặc nhóm phần tử của bản rõ được thay thế duy nhất bằng phần tử mã hóa tương ứng hoặc nhóm phần tử mã hóa có liên quan.
- Hoán vị: Một chuỗi các phần tử văn bản được thay thế bằng một hoán vị của chuỗi đó. Tức là không có phần tử nào được thêm bớt hoặc thay thế trong dãy mà thay đổi thứ tự xuất hiện của các phần tử trong dãy.
Kiến trúc bên trong của Feistel Cipher
Phía bên trái của hình trên mô tả cấu trúc mật mã do Feistel đề xuất. Đầu vào của thuật toán mã hóa là một khối văn bản có độ dài 2w bit và một khóa K. Khối văn bản gốc được chia thành hai nửa, LE0 và RE0. Hai nửa dữ liệu trải qua n vòng xử lý rồi kết hợp với nhau để tạo ra một khối bản mã.
Mỗi vòng i có các đầu vào LEi – 1 và REi – 1 được lấy từ vòng trước, cũng như một khóa con Ki được lấy từ tất cả K. Nói chung, các khóa con Ki khác với K và khác nhau. Trong hình trên, 16 vòng được sử dụng, mặc dù có thể thực hiện nhiều vòng hơn.
Tất cả các vòng đều có cấu trúc giống nhau. Một sự thay thế được thực hiện trên nửa bên trái của dữ liệu. Điều này được thực hiện bằng cách áp dụng hàm vòng F cho nửa bên phải của dữ liệu và sau đó lấy OR loại trừ của đầu ra của hàm đó và nửa bên trái của dữ liệu.
Hàm vòng có cùng cấu trúc chung cho mỗi vòng nhưng được tham số hóa bởi khóa con Ki. Một cách khác để diễn đạt điều này là nói rằng F là một hàm của nửa bit bên phải và là khóa con của các bit y, tạo ra giá trị đầu ra có độ dài w bit: F(REi, Ki + 1).
Sau sự thay thế này, một phép hoán vị được thực hiện bao gồm việc trao đổi hai nửa dữ liệu. Cấu trúc này là một dạng đặc biệt của mạng hoán vị thay thế (SPN) do Shannon đề xuất.
Việc triển khai chính xác mạng Feistel phụ thuộc vào việc lựa chọn các thông số và tính năng thiết kế sau:
- Kích thước khối: Kích thước khối lớn hơn có nghĩa là bảo mật cao hơn (tất cả những thứ khác đều bằng nhau) nhưng làm giảm tốc độ mã hóa/giải mã cho một thuật toán nhất định. Bảo mật hơn đạt được bằng cách khuếch tán lớn hơn. Theo truyền thống, kích thước khối 64-bit đã được coi là một sự đánh đổi hợp lý và gần như phổ biến trong thiết kế mật mã khối. Tuy nhiên, AES mới sử dụng kích thước khối là 128 bit.
- Kích thước khóa: Kích thước khóa lớn hơn có nghĩa là bảo mật hơn nhưng có thể làm giảm tốc độ mã hóa/giải mã. Bảo mật cao hơn đạt được nhờ khả năng chống lại các cuộc tấn công vũ phu. Kích thước khóa từ 64 bit trở xuống hiện được coi là không đủ và 128 bit đã trở thành kích thước phổ biến.
- Số vòng: Bản chất của mật mã Feistel là một vòng cung cấp bảo mật không đầy đủ nhưng nhiều vòng cung cấp bảo mật gia tăng. Số vòng tiêu biểu là 16 vòng.
- Thuật toán tạo khóa con: Độ phức tạp cao hơn trong thuật toán này sẽ dẫn đến khó khăn hơn trong “phân tích mật mã”.
Có hai cân nhắc khác trong thiết kế mật mã Feistel:
- Mã hóa/giải mã phần mềm nhanh chóng: Trong nhiều trường hợp, mã hóa được nhúng trong các ứng dụng hoặc chức năng tiện ích theo cách ngăn chặn việc triển khai phần cứng. Theo đó, tốc độ thực thi của thuật toán trở thành mối quan tâm lớn.
- Dễ phân tích cú pháp: Mặc dù chúng tôi muốn làm cho thuật toán của mình khó viết mã nhất có thể, nhưng có một lợi ích lớn trong việc làm cho thuật toán dễ phân tích cú pháp. Nếu một thuật toán có thể được giải thích một cách chính xác và rõ ràng, thì việc phân tích thuật toán đó để tìm các lỗ hổng “phân tích mật mã” sẽ dễ dàng hơn và do đó phát triển mức độ đảm bảo cao hơn về tính mạnh mẽ của nó. Ví dụ, DES không có chức năng dễ phân tích cú pháp.
Trên đây là cơ sở về Mật mã khối, nguồn gốc và mô tả cơ bản mật mã khối là gì, cách thức hoạt động cũng như hướng thiết kế mật mã khối cho ứng dụng.
Loạt bài về Hệ thống mật mã cũng kết thúc tại đây. Quản Trị Mạng mong rằng những bài viết này sẽ mang đến cho các bạn những kiến thức bổ ích về mật mã, mã hóa…
Bạn thấy bài viết Hệ thống mật mã: Phần 6 có khắc phục đươc vấn đề bạn tìm hiểu ko?, nếu ko hãy comment góp ý thêm về Hệ thống mật mã: Phần 6 bên dưới để TTrường THCS Đồng Phú có thể thay đổi & cải thiện nội dung tốt hơn cho các bạn nhé! Cám ơn bạn đã ghé thăm Website: thcsdongphucm.edu.vn của Trường THCS Đồng Phú
Nhớ để nguồn bài viết này: Hệ thống mật mã: Phần 6 của website thcsdongphucm.edu.vn
Chuyên mục: Kiến thức