Tất cả buổi chiều Mungo đã làm việc trên mã của Stern’s, chủ yếu nhờ sự giúp đỡ của thông báo mới nhất mà anh ấy đã tải xuống từ Nevin Square. Stern là rất tự tin. Anh ấy nhận thức rõ London Central biết về thứ anh ấy tải xuống.Rõ ràng là họ đã không quan tâm tới việc Mungo đọc những thông báo của họ thường xuyên như thế nào, vì họ rất tự tin vào sự chắc chắn của mã.
Trò chuyện với Strange Men, Ruth Rendell
46 trang |
Chia sẻ: vietpd | Lượt xem: 2022 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Mã hóa khối chuẩn mã hóa dữ liệu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 3:
MÃ HÓA KHỐI
CHUẨN MÃ HÓA DỮ LIỆU
Tất cả buổi chiều Mungo đã làm việc trên mã của Stern’s, chủ yếu nhờ sự giúp đỡ của thông báo mới nhất mà anh ấy đã tải xuống từ Nevin Square. Stern là rất tự tin. Anh ấy nhận thức rõ London Central biết về thứ anh ấy tải xuống.Rõ ràng là họ đã không quan tâm tới việc Mungo đọc những thông báo của họ thường xuyên như thế nào, vì họ rất tự tin vào sự chắc chắn của mã.
Trò chuyện với Strange Men, Ruth Rendell
Các vấn đề chính
Mã hóa khối (block cipher) là một chương trình mã hoá /giải mã trong đó khối văn bản gốc được sử dụng toàn bộ và dùng để tạo ra khối văn bản mã hoá có chiều dài bằng nhau.
Nhiều mã hóa khối có cấu trúc Feistel.Cấu trúc như vậy bao gồm số vòng đồng nhất của quá trình xử lý. Ở mỗi vòng, vật thay thế được thực hiện trên một phân nửa dữ liệu được xử lý, sau đó là phép hoán vị trao đổi hai nửa. Khóa cũ được mở rộng để một khóa khác được dùng cho mỗi vòng.
Chuẩn mã hoá dữ liệu (The Data Encryption Standard- DES ) đã trở thành thuật toán mã hóa rộng rãi cho đến gần đây.Nó thể hiện cấu trúc Feistel cổ điển.DES sử dụng khối 64-bit và khóa 56-bit.
Hai phương pháp quan trọng của thám mã là thám mã vi phân (differential cryptanalysis) và thám mã tuyến tính. DES đã cho thấy khả năng chống chịu cao với hai loại tấn công này.
Mục tiêu của chương này là để minh họa nguyên tắc mã hóa đối xứng hiện đại.Vì mục đích này, chúng ta tập trung vào mã hóa đối xứng được sử dụng rộng rãi nhất : Chuẩn mã hoá dữ liệu ( the Data Encryption Standard - DES).Mặc dù nhiều mã hóa đối xứng đã được phát triển từ khi giới thiệu DES, và mặc dù nó được định trước để được thay bằng Chuẩn Mã Hoá Nâng cao (the Adavaned Encryption Standard - AES ), DES vẫn là thuật toán quan trọng nhất. Hơn nữa, nghiên cứu chi tiết về DES cung cấp hiểu biết về nguyên tắc được dùng trong các mã hóa đối xứng khác.Chúng ta xem xét mã hóa đối xứng quan trọng khác, bao gồm AES, trong chương 5 và 6.
Chương này bắt đầu bằng thảo luận về nguyên tắc chung của mã hóa khối đối xứng, là loại mã hóa đối xứng nghiên cứu trong cuốn sách này ( ngoại trừ mã hóa luồng RC4 trong chương 6). Tiếp theo, chúng ta xem xét DES đầy đủ. Sau đó tìm hiểu thuật toán cụ thể, rồi chúng ta quay lại thảo luận tổng quát hơn về thiết kế khối mã hoá.
So sánh các thuật toán mã hóa công khai ( public-key) như RSA, với cấu trúc của DES, và hầu hết các thuật toán mã hóa đối xứng, là rất phức tạp và không thể giải thích dễ dàng như RSA và các thuật toán tương tự.Theo đó, người đọc có thể có để bắt đầu với một phiên bản đơn giản của DES, được mô tả trong Phụ lục C. Phiên bản này cho phép người đọc thực hiện mã hóa và giải mã bằng tay và đạt được một hiểu biết tốt về các hoạt động chi tiết thuật toán.Kinh nghiệm cho thấy rằng một nghiên cứu của phiên bản đơn giản này giúp tăng cường sự hiểu biết về DES.[1]
[1]Tuy nhiên bạn có thể bỏ qua Phụ lục C, ít nhất trên một lần đọc đầu tiên. Nếu bạn bị lạc hoặc bị sa lầy vào những chi tiết của DES, bạn có thể quay trở lại và bắt đầu với đơn giản hóa DES.
3.1Nguyên tắc mã hoá khối
Hầu hết mọi thuật toán mã hóa khối đối xứng thông dụng được dựa trên cấu trúc gọi tên là mã hoá khối Feistel [ FEIS73 ]. Vì lý do đó, điều quan trọng là phải xem xét nguyên tắc thiết kế mã hóa Feistel. Chúng ta bắt đầu bằng so sánh các mã hóa theo luồng và mã hoá khối. Sau đó chúng ta thảo luận về sự trình bày cấu trúc mã hoá khối Feistel. Cuối cùng, chúng ta thảo luận về một vài ý nghĩa của nó.
Mã hoá luồng và mã hoá khối
Mã hóa luồng là loại mã hóa chuyển một dòng dữ liệu số một bit hoặc một byte cùng lúc .Ví dụ của mã hóa luồng cổ điển là mã hóa autokeyed vigenère và mã hóa Vernam. Mã hoá khối là loại mã hóa trong đó khối của văn bản gốc được xem xét toàn bộ và dùng để tạo ra khối văn bản mã hoá có chiều dài bằng khối văn bản ban đầu. Thông thường, kích cỡ mỗi khối là 64bit hoặc128 bit được sử dụng. Sử dụng một vài kiểu thao tác được trình bày trong chương 6, mã hoá khối có thể được dùng để đạt được kết quả tương tự như mã hóa theo luồng.
Chúng ta đi vào phân tích mã hoá khối. Nói chung, chúng có thể áp dụng cho phạm vi bao quát hơn của ứng dụng hơn mã hóa theo luồng. Đại đa số qua mạng ứng dụng mã hóa sử dụng là mã hoá khối đối xứng .Vì vậy, sự quan tâm về chương này, và thảo luận của chúng ta trong suốt cuốn sách về mã hoá đối xứng, sẽ tập trung vào mã hoá khối.
Trình bày về cấu trúc mã hóa Feistel
Một mã hóa khối vận hành trên khối văn bản gốc n bit để tạo ra khối văn bản mã hoá n bit.Có 2n khả năng có thể khác khối văn bản gốc,và mã hoá để được đảo ngược (tức là để cho giải mã khả thi ),mỗi mã hóa khối phải tạo ra khối văn bản mã hoá duy nhất. Biến đổi như vậy được gọi là đảo ngược, hoặc nonsingular. Ví dụ sau minh họa biến đổi nonsingular và singular cho n = 2.
Ánh xạ nghịch đảo
Plaintext Ciphertext
00 11
01 10
10 00
11 01
Ánh xạ không nghịch đảo
Plaintext Ciphertext
00 11
01 10
10 01
11 01
Ở trường hợp thứ hai, bản mã hoá của 01 có thể được tạo ra bởi một trong hai khối văn bản gốc.Vậy là nếu chúng ta tự giới hạn mình vào các ánh xạ khi đảo nghịch, số biến đổi khác nhau là 2n !
Hình 3.1 minh họa lôgic của mã hóa thay thế tổng quát với n = 4. Đầu vào 4 bit tạo ra một trong 16 trạng thái đầu vào, được ánh xạ bởi mã hóa thay thế tới duy nhất một trong 16 trạng thái đầu ra có thể, mỗi một trong những đầu vào được biểu diễn bởi 4 bit đã mã hóa. Sơ đồ mã hoá và giải mã các ánh xạ khi có thể định nghĩa bởi các bảng, như đã nêu trong bảng 3.1. Đây là dạng tổng quát nhất của mã hoá khối và có thể được dùng để định nghĩa bất kỳ ánh xạ đảo ngược nào giữa văn bản gốc và văn bản mã hoá.Feistel đề cập đến điều này như là các mã hóa khối lý tưởng, bởi vì nó cho phép số lượng tối đa của các mã hóa có thể ánh xạ từ khối văn bản gốc [FEIS75].
Hình 3.1. Khối thay thế tổng quát n-bit-n-bit ( với n = 4 )
Bảng 3.1
Bảng mã hoá và giải mã bảng cho mã hóa thay thế của hình 3.4
Plaintext Ciphertext
0000 1110
0001 0100
0010 1101
0011 0001
0100 0010
0101 1111
0110 1011
0111 1000
1000 0011
1001 1010
1010 0110
1011 1100
1100 0101
1101 1001
1110 0000
1111 0111
0000 1110
0001 0011
0010 0100
0011 1000
0100 0001
0101 1100
0110 1010
0111 1111
1000 0111
1001 1101
1010 1001
1011 0110
1100 1011
1101 0010
1110 0000
1111 0101
Nhưng có một vấn đề thực tế với các mã hóa khối lí tưởng.Nếu một khối kích thước nhỏ, chẳng hạn như n = 4,được sử dụng,sau đó hệ thống tương đương với một mã hóa thay thế cổ điển. Hệ thống như vậy, chúng ta đã thấy, rất dễ bị công kích bởi các phân tích thống kê của văn bản gốc. Điểm yếu này không phải là vốn có trong việc sử dụng một thuật toán mã hóa thay thế mà là kết quả từ việc sử dụng một khối kích thước nhỏ.Nếu n đủ lớn và có thể thay thế đảo ngược bất kì giữa văn bản gốc và văn bản mã hóa được chấp thuận, sau đó các đặc tính thống kê của văn bản nguồn được che giấu đến mức độ nào đó mà khoa học thám mã không thể tìm được.
Một mã hóa thay thế đảo ngược bất kì (mã hóa khối lý tưởng) cho một khối kích thước lớn là không thực tế, tuy nhiên, từ một cách nhìn về sự thực hiện và hiệu quả. Để chuyển đổi như vậy, các ánh xạ phải tự tạo khóa. Xem xét lại Bảng 3.1, trong đó xác định một ánh xạ cụ thể đảo ngược từ văn bản gốc đên đến bản mã hóa với n = 4.Ánh xạ có thể được xác định bởi các mục ở cột thứ hai,trong đó thể hiện giá trị của bản mã cho mỗi khối kí tự gốc.Điều này, về bản chất, là chìa khóa để xác định các ánh xạ cụ thể từ trong số tất cả các ánh xạ có thể. Trong trường hợp này, bằng cách sử dụng phương pháp đơn giản của việc xác định khóa này, chiều dài chính yêu cầu là (4 bit) x (16 dòng) = 64 bit.Nói chung, đối với một thuật toán mã hóa khối n-bit lý tưởng, độ dài của khóa xác định trong kiểu này là n x 2n bit. Đối với một khối 64-bit, đây một chiều dài mong muốn để ngăn chặn các cuộc tấn công thống kê, thì chiều dài khóa bắt buộc là 64 x 264= 270 1021 bits.
Xem xét những mặt khó khăn, Feistel chỉ ra rằng những gì cần thiết là một ước lượng cho các hệ thống mã hóa khối lý tưởng với n lớn, được xây dựng trên các thành phần dễ dàng thực hiên được [FEISI75]. Nhưng trước khi chuyển sang cách tiếp cận của Feistel, chúng ta hãy làm một quan sát khác. Chúng ta có thể sử dụng các thuật toán mã hóa khối thay thế tổng quát, nhưng để làm cho chúng thực hiện dễ dàng, giới hạn cho chính chúng ta với một tập hợp các ánh xạ có thể đảo ngược.Ví dụ , giả sử chúng ta định nghĩa các ánh xạ về một tập hợp các phương trình tuyến tính. Trong trường hợp n = 4,chúng ta có
y1=k11x1+k12x2+k13x3+k14x4
y2=k21x1+k22x2+k23x3+k24x4
y3=k31x1+k32x2+k33x3+k34x4
y4=k41x1+k42x2+k43x3+k44x4
Chỗ xi là bốn chữ số nhị phân của khối văn bản gốc, các yi là bốn chữ số nhị phân của khối mã hóa, các ki j là các hệ số nhị phân, và phép toán số học là mod 2.Các kích thước khóa chỉ là n2, trong trường hợp này có 16 bit. Sự nguy hiểm với loại xây dựng kiểu này là nó có thể dễ bị tấn công để thám mã bởi các kẻ tấn công đó là đoán trước các cấu trúc của thuật toán. Trong ví dụ này, những gì chúng ta có là bản chất của mã hóa Hill đã thảo luận trong Chương 2, áp dụng cho dữ liệu nhị phân thay vì ký tự. Như chúng ta đã thấy ở chương 2, một hệ thống tuyến tính đơn giản như thế này là khá dễ bị tấn công.
Mã hóa Feistel
Feistel dự kiến [FEIS73] rằng chúng ta có thể tiến gần đến các mã hóa khối lý tưởng bằng cách sử dụng các khái niệm về mã hóa sản phẩm, đó là việc thực hiện của hai hay nhiều thuật toán mã hóa đơn giản theo một trình tự mà kết quả cuối cùng hay sản phẩm được mã hóa mạnh hơn bất kỳ các thành phần mã hóa. Bản chất của phương pháp này là phát triển mã hóa khối với chiều dài khóa là k bit và độ dài của khối là n bit, cho phép tổng cộng 2k biến đổi có thể, thay vì 2n! phép biến đổi có sẵn với các mã hóa khối lý tưởng.
Đặc biệt,Feistel dự kiến việc sử dụng một mã hóa mà xen kẽ giữa thay thế (substitutions) và hoán vị (permutations). Trong thực tế, đây là một ứng dụng thực tiễn của một đề nghị của Claude Shannon để phát triển sản phẩm mã hóa xen kẽ các chức năng xáo trộn (confusion) và truyền bá (diffusion) [SHAN49]. Chúng ta tiếp tục tìm hiểu về các khái niệm của sự truyền bá và sự xáo trộn và sau đó trình bày mã hóa Feistel.Nhưng trước tiên, nó đáng chú thích vào sự kiện đáng chú ý này:Các cấu trúc mã hóa Feistel đã xuất hiện từ hơn ¼ thế kỉ được dựa trên đề xuất của Shannon năm 1945, là cấu trúc được sử dụng bởi nhiều mã hóa khối đối xứng quan trọng hiện nay đang sử dụng.
Sự truyền bá và xáo trộn
Thuật ngữ sự truyền bá và xáo trộn đã được giới thiệu bởi Claude Shannon để giữ hai khối có cấu trúc cơ bản cho bất cứ hệ thống mật mã nào [SHAN49 ][2]. Điều quan tâm của Shannon là để cản trở thám mã dựa trên phân tích thống kê. Khả năng lập luận là như sau. Đoán kẻ tấn công biết chút ít về thống kê đặc trưng của văn bản gốc. Chẳng hạn như, trong thông báo mà con người có thể đọc được trong ngôn ngữ nào đó, sự phân bố tần số của các kí tự khác nhau có thể là biết trước. Hoặc có thể có cụm từ hoặc chữ có thể để xuất hiện trong thông báo (chữ có thể xảy ra). Nếu thống kê này không phản ánh chút nào trong văn bản mã hoá, người giải các mật mã có thể suy luận khóa mã hóa, hoặc thành phần của khóa, hoặc ít nhất bộ khóa có thể để chứa khóa chính xác.Trong những gì Shannon gọi tên là mã hóa lý tưởng mạnh mẽ, tất cả thống kê của văn bản mã hoá không lệ thuộc vào particular-key được sử dụng. Mã hóa thay thế duy nhất mà chúng ta được bàn đến trước đây (Hình 3.1 ) là một thuật toán mã hóa, nhưng như chúng ta đã thấy, điều đó là không thực tế.
[2]1949 bản thảo của Shannon xuất hiện ban đầu như một báo cáo được phân loại trong năm 1945.Shannon thích một vị trí tuyệt vời và độc đáo trong lịch sử của máy tính và thông tin khoa học. Ông không chỉ phát triển những ý tưởng về các chuyên đề mật mã học hiện đại ma còn đảm nhiệm luôn việc phát minh ra các quy luật của lý thuyết thông tin.Ngoài ra, ông tạo ra một quy luật, ứng dụng của đại số Boolean cho việc nghiên cứu các mạch kỹ thuật số, điều này cuối cùng ông điều hành để tung ra như một luận án thạc sĩ.
Ngoài việc áp dụng hệ thống lý tưởng, Shannon đề nghị hai phương pháp để làm thất bại thám mã thống kê : sự truyền bá và xáo trộn.Ở sự truyền bá, cấu trúc thống kê của văn bản gốc được xóa bỏ khỏi thống kê tầm xa của văn bản mã hoá.Điều này được đạt được bởi có mỗi chữ số văn bản gốc ảnh hưởng giá trị của nhiều chữ số trong văn bản mã hoá; nói chung điều này tương đương với có mỗi chữ số văn bản mã hoá bị ảnh hưởng bởi nhiều chữ số văn bản gốc. Ví dụ sự truyền bá là để mã hoá 1 thông báo M = m1, m2, m3 . . . của kí tự so với thao tác trung bình :
yn=i=1kmn+1 mod 26
Thêm k các kí tự liên tiếp để có được 1 ký tự mã hóa yn.Người ta có thể thấy rằng cấu trúc thống kê của văn bản gốc đã được loại bỏ.Vì vậy, tần số mẫu tự trong văn bản mã hoá sẽ gần như bằng nhau hơn trong văn bản gốc; tần số biểu đồ cũng sẽ gần như bằng nhau, vân vân. Ở mã hoá khối nhị phân, sự truyền bá có thể đạt được bằng liên tục thực hiện một số phép hoán vị trên dữ liệu tiếp theo là đưa chức năng vào phép hoán vị; kết quả là những bit từ những vị trí khác nhau trong văn bản gốc góp phần tạo nên 1 bit đơn của văn bản mã hoá[3].
[3]Một số sách trên công nghệ mã hóa xem phép hoán vị với sự truyền bá. Việc này không đúng sự thật. Phép hoán vị, tự nó không thay đổi thống kê của văn bản gốc ở mức của ký tự đơn lẻ hoặc khối thay đổi trật tự. Chẳng hạn như, trong DES (Chuẩn mã hoá dữ liệu), phép hoán vị trao đổi hai khối 32 bit, nên thống kê của chuỗi của 32 bit hoặc kém hơn được bảo quản.
Mọi mã hoá khối bao gồm sự biến đổi của khối của văn bản gốc thành khối của văn bản mã hoá, biến đổi tùy theo khóa.Cơ chế của sự truyền bá là tìm cách làm mối quan hệ thống kê giữa văn bản gốc và văn bản mã hoá phức tạp nhất có thể để cản trở các cố gắng suy luận khóa. Mặt khác, việc thất bại trong việc tìm cách làm mối quan hệ giữa thống kê của văn bản mã hoá và giá trị của khóa mã hóa phức tạp nhất có thể, lại cản trở việc cố gắng tìm ra khóa.Vì vậy,dù là kẻ tấn công có thể nhận được một số xử lý trên thống kê của văn bản mã hoá, cách khóa được dùng để tạo ra văn bản mã hoá quá phức tạp đến nỗi làm cho nó trở nên khó khăn để suy luận khóa.Điều này đạt được bằng sử dụng thuật toán thay thế phức tạp.Ngược lại, các hàm thay thế tuyến tính đơn giản sẽ chỉ gây chút ít sự xáo trộn.
Như [ROBS95b] chỉ ra, sự thành công là truyền bá và xáo trộn trong việc nắm bắt được bản chất của các thuộc tính mong muốn của một mã khối mà chúng đã trở thành nền tảng của thiết kế khối mã hóa hiện đại.
Cấu trúc mã hóa Feistel
Hình 3.2 mô tả cấu trúc đề xuất bởi Feistel. Đầu vào của thuật toán mã hóa là khối văn bản gốc có chiều 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, L0 và R0. Hai nửa dữ liệu đi qua n vòng xử lý rồi tổ hợp để tạo ra khối văn bản mã hoá.Mỗi vòng i có đầu vào Li-1 và Ri-1, lấy từ vòng trước đó, giống như như 1 khoá con Ki, lấy từ tổng thể K. Nói chung, những khóa con Ki khác với khóa K và các khóa khác.
Hình 3.2. Mạng Feistel cổ điển
Tất cả các vòng có cấu trúc tương tự nhau. Một thay thế được thực hiện trên một nửa trái của dữ liệu. Điều này được thực hiện bằng cách áp dụng một hàm vòng F cho nửa bên phải của dữ liệu và sau đó lấy exclusive-OR của các đầu ra của hàm đó và một nửa còn lại của dữ liệu. Tất cả các vòng có cùng một cấu trúc chung cho mỗi vòng, nhưng là tham số của mỗi vòng là khóa con Ki.Sau sự thay thế này, một hoán vị được thực hiện mà bao gồm việc trao đổi hai nửa của dữ liệu.Cấu trúc này là một dạng đặc biệt của mạng thay thế-hoán vị (SPN) được đề xuất bởi Shannon.
Việc thực hiện chính xác của một mạng Feistel phụ thuộc vào sự lựa chọn của các tham số và đặc điểm thiết kế sau đây :
Kích cỡ khối: khối kích thước lớn hơn có nghĩa là bảo mật cao hơn (tất cả những thứ khác bằng nhau), nhưng giảm đi tốc độ mã hóa/giải mã của một thuật toán cho trước.Việc bảo mật cao hơn đạt được bằng cách truyền bá tốt hơn. Theo truyền thống, một kích thước khối 64 bit đã được coi là một sự cân bằng hợp lý và đã được phổ cập trong thiết kế gần mật mã khối. Tuy nhiên, AES mới sử dụng một kích thước khối128-bit.
Kích thước khóa: kích thước lớn hơn có nghĩa là an ninh tốt hơn, nhưng có thể làm giảm tốc độ mã hóa/giải mã. Việc bảo mật cao hơn đạt được bằng cách chống tấn công brute-force tốt hơn và rắc rối hơn. Kích thước khóa của 64 bit hoặc ít hơn bây giờ nhiều người xem là không đủ,và 128 bit đã trở thành một kích thước thông thường.
Số vòng: Bản chất của mật mã Feistel là một vòng duy nhất cung cấp bảo mật không đầy đủ nhưng nhiều vòng cung cấp sẽ tăng cường bảo mật hơn.Một kích thước điển hình là 16 vòng.
Thế hệ thuật toán khóa phụ: phức tạp lớn hơn trong thuật toán này nên dẫn đến khó khăn lớn hơn của phân tích mật mã.
Hàm vòng: Một lần nữa, phức tạp hơn thường có nghĩa chống phân tích mật mã tốt hơn .Có hai quan tâm khác trong thiết kế của một mã hóa Feistel:
Tốc độ phần mềm mã hóa/giải mã: Trong nhiều trường hợp, mã hóa được nhúng trong các ứng dụng hoặc các chức năng tiện ích theo cách như vậy là để ngăn cản một thực hiện phần cứng. Theo đó, tốc độ thực hiện của thuật toán sẽ trở thành một mối quan tâm.
Dễ dàng trong việc phân tích: Mặc dù chúng ta muốn làm cho thuật toán của chúng ta là khó khăn nhất có thể để phân tích mật mã, có lợi ích rất lớn trong việc đưa ra các thuật toán dễ dàng để phân tích. Đó là, nếu thuật toán có thể được giải thích ngắn gọn và rõ ràng, nó được dễ dàng hơn để phân tích rằng thuật toán để giảm rủi ro và do đó chống phân tích mật mã phát triển một mức độ cao hơn để đảm bảo sức mạnh của nó.DES,ví dụ, không có một chức năng dễ dàng dễ dàng phân tích.
Giải mã thuật toán Feistel
Quá trình giải mã với mã hóa Feistel cơ bản cũng giống như quá trình mã hóa.Ta có luật như sau: Sử dụng các mã hóa khối làm đầu vào cho thuật toán nhưng sử dụng các khóa con Ki với trình tự đảo ngược. Đó là, sử dụng Kn ở vòng đầu tiên, Kn-1 ở vòng thứ hai, và như vậy cho đến khi K1 được sử dụng ở vòng cuối cùng. Đây là một tính năng tốt bởi vì nó có nghĩa là chúng ta không cần phải thực hiện hai thuật toán khác nhau, một cho mã hóa và một để giải mã.
Để thấy rằng các thuật toán có khóa với thứ tự đảo ngược ra kết quả đúng, hãy xem xét hình 3.3, hình đó cho thấy quá trình mã hóa đi xuống phía bên tay trái và quá trình giải mã đi lên phía bên phải cho một thuật toán 16 vòng (kết quả sẽ là như nhau cho bất kỳ số vòng). Để làm rõ, chúng tôi sử dụng ký hiệu REi và LEi cho dữ liệu đi qua các thuật toán mã hóa và LDi và RDi cho dữ liệu đi qua các thuật toán giải mã. Biểu đồ cho thấy rằng, ở mỗi vòng, giá trị trung gian của quá trình giải mã là bằng với giá trị tương ứng của quá trình mã hóa với hai nửa của giá trị trao đổi.Đặt vào một trường hợp khác, để cho đầu ra của vòng thứ i được mã hóa LEi||REi (Li nối với Ri). Sau đó các đầu vào tương ứng với (16i) giải mã vòng thứ là REi || LEi hoặc tương đương, RD16-1 | | LD16-i .
Hình 3.3. Mã hóa và giải mã Feistel
Hãy đi qua Hình 3.3 để chứng minh tính hợp lệ của các xác nhận trước đó.[5] Sau lần lặp cuối cùng của quá trình mã hóa, hai nửa của thuật toán được trao đổi, do đó bản mã là RE16 | | LE16.Kết quả của vòng đó là văn bản mã hóa. Bây giờ lấy bản mã đó và sử dụng nó như là đầu vào cho cùng một thuật toán. Các đầu vào vòng đầu tiên là RE16 | | LE16,trong đó là tương ứng với trao đổi 32-bit của đầu ra của vòng thứ mười sáu của quá trình mã hóa.
[5]Để đơn giản hóa các biểu đồ, và không bị xoắn, không hiển thị các trao đổi diễn ra vào cuối mỗi lần lặp. Nhưng xin lưu ý đó các kết quả trung gian ở cuối giai đoạn thứ i của quá trình mã hóa là số lượng 2W-bit được hình thành bằng cách ghép các LEi và REi, và đó là kết quả trung gian ở cuối giai đoạn thứ i của quá trình giải mã là 2W -bit lượng hình thành bằng cách ghép các LDi và RDi.
Bây giờ chúng ta muốn cho thấy rằng kết quả của vòng đầu tiên của quá trình giải mã bằng một hoán đổi 32-bit của đầu vào đến vòng thứ mười sáu của quá trình mã hóa.Trước tiên, hãy xem xét quá trình mã hóa. Chúng ta thấy rằng:
L