Mã hóa 3DES là gì và DES hoạt động như thế nào?

Mã hóa 3DES là gì và cách thức hoạt động của DES (1)

3DES là một mật mã mã hóa được lấy từ Tiêu chuẩn mã hóa dữ liệu gốc (DES). Nó trở nên nổi bật vào cuối những năm 1990, nhưng đã không còn được ưa chuộng do sự gia tăng của các thuật toán an toàn hơn.

Mặc dù nó sẽ không còn được sử dụng vào năm 2023, nhưng nó vẫn được thực hiện trong một số tình huống. Vì nó dựa trên một trong những thuật toán được nghiên cứu và công bố rộng rãi đầu tiên, DES, điều quan trọng là phải tìm hiểu về 3DES là gì và cách thức hoạt động của nó.

Hướng dẫn này sẽ đưa bạn qua từng bước của quy trình DES một cách chi tiết, sau đó trình bày cách sửa đổi DES trong 3DES để đảm bảo an toàn hơn. Nó cũng đề cập đến các vấn đề bảo mật khác nhau và liệu bạn có nên sử dụng thuật toán hay không.

3DES là gì?

Mặc dù nó chính thức được gọi là Thuật toán mã hóa dữ liệu ba (3DEA), nhưng nó thường được gọi là 3DES. Điều này là do thuật toán 3DES sử dụng mã hóa Tiêu chuẩn mã hóa dữ liệu (DES) ba lần để mã hóa dữ liệu của nó.

DES là một thuật toán khóa đối xứng dựa trên mạng Feistel. Là một mật mã khóa đối xứng, nó sử dụng cùng một khóa cho cả quá trình mã hóa và giải mã. Mạng Feistel làm cho cả hai quá trình này gần như giống hệt nhau, điều này dẫn đến một thuật toán hiệu quả hơn để thực hiện.

DES có cả khối 64 bit và kích thước khóa, nhưng trên thực tế, khóa chỉ cấp bảo mật 56 bit. 3DES được phát triển như một giải pháp thay thế an toàn hơn vì độ dài khóa nhỏ của DES. Trong 3DES, thuật toán DES được chạy qua ba lần với ba khóa, tuy nhiên nó chỉ được coi là an toàn nếu sử dụng ba khóa riêng biệt.

Công dụng của 3DES

Khi các điểm yếu của DES thông thường trở nên rõ ràng hơn, 3DES đã được áp dụng trong một loạt các ứng dụng. Đó là một trong những chương trình mã hóa được sử dụng phổ biến hơn trước khi AES nổi lên.

Một số ví dụ về việc triển khai của nó bao gồm các hệ thống thanh toán Microsoft Office, Firefox và EMV. Nhiều nền tảng trong số này không còn sử dụng 3DES vì có những lựa chọn thay thế tốt hơn.

Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST) đã đưa ra một đề xuất dự thảo nói rằng tất cả các hình thức 3DES sẽ không được chấp nhận cho đến năm 2023 và không được phép từ năm 2024 trở đi. Mặc dù nó chỉ là một bản nháp, nhưng đề xuất này biểu thị sự kết thúc của một kỷ nguyên và đã qua thời gian để chuyển sang các thuật toán khác, an toàn hơn.

Lịch sử mã hóa 3DES

Vì 3DES có nguồn gốc từ DES, nên tốt nhất là giới thiệu tiêu chuẩn sớm hơn trước. Vào những năm bảy mươi, Cục Tiêu chuẩn Quốc gia (NBS – từ đó được đổi tên thành NIST) đã tìm kiếm một thuật toán mà nó có thể sử dụng làm tiêu chuẩn để mã hóa thông tin chính phủ nhạy cảm nhưng chưa được phân loại.

NBS chấp nhận các đề xuất cho một tiêu chuẩn phù hợp với yêu cầu của nó, nhưng không có ứng cử viên nào từ vòng ban đầu là phù hợp. Nó đã mời nhiều bài nộp hơn và lần này IBM đã gửi qua một thuật toán mà nhóm của nó đã phát triển. Bài nộp được lấy từ mật mã Lucifer mà Horst Feistel thiết kế.

Năm 1975, thuật toán IBM được NBS công bố là Tiêu chuẩn mã hóa dữ liệu được đề xuất. Công chúng được mời bình luận về thiết kế, đã thu hút một số lời chỉ trích.

Các nhà mật mã học nổi tiếng như Whitfield Diffie và Martin Hellman, nhà thiết kế trao đổi khóa Diffie-Hellman, tuyên bố rằng độ dài khóa quá ngắn và các hộp S đã được thay đổi từ thiết kế ban đầu của họ.

Vào thời điểm đó, nhiều người trong cộng đồng tiền mật mã nghĩ rằng NSA đã phá hoại dự án và làm suy yếu thuật toán, do đó đây sẽ là cơ quan duy nhất có thể phá vỡ DES.

Khi điều này được điều tra bởi Ủy ban Tình báo Thượng viện Hoa Kỳ về Tình báo, người ta thấy rằng NSA đã thuyết phục IBM rằng một kích thước khóa giảm là đủ; hỗ trợ gián tiếp trong việc phát triển các cấu trúc hộp S; và được chứng nhận rằng thuật toán DES cuối cùng, theo hiểu biết tốt nhất của họ, không có bất kỳ điểm yếu về thống kê hoặc toán học nào.

Báo cáo tương tự tiếp tục nói rằng NSA đã không làm xáo trộn thiết kế theo bất kỳ cách nào. Điều này đã được hỗ trợ bởi một số cựu nhân viên IBM, người đã tuyên bố rằng thuật toán DES được thiết kế hoàn toàn bởi nhóm IBM.

Tài liệu phân loại riêng của NSA và tuyên bố rằng cơ quan đã hợp tác chặt chẽ với IBM để tăng cường thuật toán chống lại tất cả các cuộc tấn công ngoại trừ và để tăng cường các bảng thay thế

Những nghi ngờ về việc giả mạo NSA đã được xoa dịu trong những năm 1990 khi phân tích mật mã được phát hiện công khai. Khi các hộp chữ S ác tính được thử nghiệm với kỹ thuật mới, chúng được phát hiện có khả năng chống tấn công cao hơn so với khi chúng được chọn ngẫu nhiên.

Điều này cho thấy nhóm IBM đã biết về phân tích mật mã vào những năm bảy mươi, với Steven Levy tuyên bố rằng NSA yêu cầu họ giữ bí mật về kỹ thuật để bảo vệ an ninh quốc gia.

Nhà mật mã học nổi tiếng Bruce Schneier đã từng châm biếm, đã mất cộng đồng học thuật hai thập kỷ để tìm ra rằng các tinh chỉnh NSA thực sự đã cải thiện tính bảo mật của DES.

Bất chấp những câu hỏi ban đầu về bảo mật thuật toán và sự tham gia của NSA, thuật toán IBM tiếp tục được phê chuẩn là Tiêu chuẩn mã hóa dữ liệu vào năm 1976. Nó được xuất bản vào năm 1977 và được tái khẳng định là tiêu chuẩn vào năm 1983, 1988 và 1993.

Khi tiền điện tử tuyến tính được xuất bản lần đầu tiên vào năm 1994, nó bắt đầu đặt ra câu hỏi về tính bảo mật của thuật toán. Năm 1997, NIST tuyên bố đang tìm kiếm một thuật toán để thay thế DES. Nhu cầu về một thuật toán mới được tăng cường khi công nghệ phát triển hơn nữa và các cuộc tấn công tiềm năng ngày càng mạnh mẽ.

Các nỗ lực bẻ khóa khác nhau cho thấy rằng việc phá vỡ thuật toán ít khó khăn hơn so với suy nghĩ trước đây. Năm 1998, phân phối.net đã có thể bẻ khóa DES là 39 ngày.

Đến đầu năm 1999, Electronic Frontier Foundation, Deep Deep Crack đã rút ngắn thời gian xuống còn hơn 22 giờ. Điều này báo hiệu sự kết thúc của DES, vì một cuộc tấn công có tính chất này hiện đang nằm trong tầm tay của một kẻ thù có nguồn lực tốt.

Vấn đề chính là không gian khóa nhỏ và một thuật toán mới rất cần thiết. Đây là một vấn đề, bởi vì phải mất thêm vài năm nữa để NIST giải quyết thuật toán trở thành tiêu chuẩn thay thế, Tiêu chuẩn mã hóa nâng cao (AES).

Trong khi mật mã cho AES đã được quyết định, 3DES đã được đề xuất như là một biện pháp ngăn chặn. Nó liên quan đến việc chạy thuật toán DES ba lần, với ba khóa riêng biệt. Năm 1999, DES được xác nhận lại, nhưng với 3DES là thuật toán lý tưởng. DES bình thường chỉ được phép trong các ứng dụng cũ.

3DES đã trở thành một thuật toán mã hóa rộng rãi, mặc dù việc sử dụng nhiều tài nguyên và giới hạn bảo mật đã khiến nó bị thay thế bởi AES trong phần lớn các trường hợp sử dụng.

Hiểu thuật toán DES

Trước khi chúng ta có thể nói về các chi tiết của 3DES, điều quan trọng là phải hiểu thuật toán DES mà nó bắt nguồn từ đó. Vì vậy, hãy để Lốc bắt đầu ngay từ đầu.

Chúng tôi sử dụng mã hóa để biến dữ liệu văn bản gốc của chúng tôi thành bản mã, đây là thông tin không thể truy cập bởi những kẻ tấn công (miễn là chúng tôi đang sử dụng các thuật toán thích hợp).

Các thuật toán mã hóa về cơ bản là các công thức toán học phức tạp. Khi nói đến việc mã hóa một cái gì đó giống như Let Let Let đi đến bãi biển, nhiều người đã nhầm lẫn. Rốt cuộc, làm thế nào bạn có thể áp dụng toán học vào những thứ như chữ cái và ký tự?

Mã hóa văn bản

Thực tế là máy tính don lồng giải quyết các chữ cái và ký tự. Thay vào đó, chúng hoạt động trên hệ thống 1 và 0 được gọi là nhị phân. Mỗi 1 hoặc 0 được gọi là một bit và một tập hợp tám trong số chúng được gọi là một byte.

Bạn có thể tra cứu thủ công hoặc sử dụng trình chuyển đổi trực tuyến để thấy rằng trong hệ nhị phân, Lừa Lừa đi đến bãi biển.

01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111 00100000 01110100 0110111

Khối

Khi dữ liệu được mã hóa, nó chia thành các khối riêng biệt để xử lý. DES có kích thước khối 64 bit, về cơ bản có nghĩa là mỗi khối phù hợp với 64 khối và số không. Khối đầu tiên của chúng tôi (64 chữ số đầu tiên của nhị phân hiển thị ở trên) sẽ là:

01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111

Thứ hai của chúng tôi sẽ là:

00100000 01110100 01101111 00100000 01110100 01101000 01100101 00100000

Và khối cuối cùng của chúng tôi sẽ là:

01100010 01100101 01100001 01100011 01101000

Đệm

Bạn có thể nhận thấy rằng khối thứ ba của chúng tôi chỉ dài 40 bit. Trước khi có thể được mã hóa, nó cần được xây dựng với kích thước khối 64 bit. Điều này được thực hiện với đệm, trong đó bao gồm thêm thông tin bổ sung vào một khối để hoàn thành nó. Điều này có thể được thực hiện với một số sơ đồ khác nhau và nó cũng có thể phục vụ để làm cho thông tin được mã hóa khó bị bẻ khóa hơn, nhưng chúng tôi đã thắng được trong bài viết này.

Lịch trình khóa DES

Các thuật toán mã hóa sử dụng các khóa để thêm vào dữ liệu sẽ thay đổi kết quả cuối cùng của quá trình. Nếu DES chỉ liên quan đến các bước như hoán vị và hộp S (hoán vị được giải thích bên dưới, trong khi hộp S được bao phủ trong Thay thế phần), tất cả những gì kẻ tấn công sẽ phải làm là khám phá các chi tiết của thuật toán, sau đó thực hiện từng bước ngược lại để tiết lộ thông điệp ban đầu.

Vì hầu hết các thuật toán của chúng tôi đều được biết đến rộng rãi, điều này sẽ thực sự bổ sung nhiều bảo mật. Thay vào đó, các khóa bí mật được thêm vào để thay đổi đầu ra theo cách không thể dự đoán được chỉ bằng cách biết thuật toán (miễn là sử dụng thuật toán đủ phức tạp).

DES bắt đầu bằng một phím duy nhất, được sử dụng để tạo các khóa phụ được áp dụng trong mỗi vòng. Đây là khóa 64 bit, có cùng kích thước với các khối của chúng tôi. Hãy để nói rằng chìa khóa của chúng tôi là:

01001010 10101101 11101000 10100101 01110001 01010100 10101001 11111010

Bây giờ, khóa này trong nhị phân, đó là cách dữ liệu được thể hiện khi máy tính xử lý nó. Khi con người xử lý các phím, thông thường chúng sẽ xuất hiện dưới dạng hỗn hợp các ký tự, đại loại như thế này:

kj329nf982bc9wn1

Trong DES, bước đầu tiên để lấy các phím tròn của chúng ta là hoán vị phím (di chuyển nó xung quanh) theo bảng sau:

3des-2a

Theo hoán vị, mỗi bit của khóa gốc của chúng ta được xáo trộn đến một vị trí mới như được chỉ định bởi bảng. Vì ô ở góc trên cùng bên trái (của C) cho biết 57, số đầu tiên của khóa hoán vị của chúng tôi sẽ là số ở vị trí thứ 57 của khối cũ:

01001010 10101101 11101000 10100101 01110001 01010100 10101001 11111010

Tế bào thứ hai nói 49, có nghĩa là chữ số thứ hai của khóa mới của chúng tôi sẽ là số nằm ở vị trí thứ 49 của khối cũ:

01001010 10101101 11101000 10100101 01110001 01010100 10101001 1111010

Tế bào thứ ba nói 41, vì vậy chúng tôi tìm kiếm chữ số ở vị trí thứ 41:

01001010 10101101 11101000 10100101 01110001 01010100 10101001 1111010

Cho đến nay, chìa khóa của chúng tôi được tạo thành từ110Giáo dục.

Phần còn lại của khóa được sắp xếp theo cùng một cách, theo các giá trị của bảng. Chúng tôi di chuyển từ trái sang phải và một khi chúng tôi đi đến cuối hàng, chúng tôi nhảy xuống cái tiếp theo, giống như bình thường. Một lần bảng C kết thúc, chúng tôi nhảy đến bảng D để hoàn thành nửa sau của khóa.

Không có cách nào dễ dàng để hoán chuyển toàn bộ khối của chúng tôi theo bảng hoán vị ban đầu. Bạn có thể thực hiện toàn bộ thủ công hoặc viết một kịch bản cho nó (hoặc thậm chí gặp may mắn và tìm thấy một đoạn sâu trong internet), nhưng chúng tôi sẽ gian lận và tạo ra nó:

1100010 1010010 1010101 0101010 1010000 1111001 0001011 1000111

Bạn có thể lo lắng rằng chúng tôi đang tạo ra một số con số trong hướng dẫn này, nhưng thực tế là nó không thực sự quan trọng. Không ai mã hóa dữ liệu theo cách thủ công nữa, tất cả đều được thực hiện thông qua các chương trình. Khía cạnh quan trọng nhất của hướng dẫn này là bạn có được một ý tưởng rõ ràng về các khái niệm mà chúng ta đang đối phó. Các con số tự phục vụ để giúp bạn hình dung những gì đang diễn ra.

Một số độc giả có thể nhận thấy rằng bảng (và bây giờ là khóa của chúng tôi), chỉ có 56 bit chứ không phải 64. Điều này là do mỗi bit thứ tám bị bỏ qua. Đây là một tạo tác từ thời kỳ công nghệ cũ, khi điều quan trọng là phải có các bit kiểm tra chẵn lẻ, xác minh xem khóa đã được nhận chính xác hay chưa. Các bit kiểm tra chẵn lẻ này có nghĩa là trong thực tế, DES chỉ có bảo mật của khóa 56 bit.

Các bảng C và D cung cấp cho chúng ta một khóa có hai nửa 28 bit. Đôi khi, các nửa được gọi là C và D, nhưng trong suốt bài viết này, chúng tôi sẽ gọi chúng là L và R, cho trái và phải. Phía bên trái của chúng tôi là:

1100010 1010010 1010101 0101010

Trong khi quyền của chúng tôi là:

1010000 1111001 0001011 1000111

Bước tiếp theo là dịch chuyển phím theo một hoặc hai khoảng trắng sang trái, tùy thuộc vào vòng. Số lượng không gian chính xác được quyết định theo bảng được xác định trước:

Số vòng Số lượng ca trái
1 1
2 1
3 2
4 2
5 2
6 2
7 2
số 8 2
9 1
10 2
11 2
12 2
13 2
14 2
15 2
16 1

Vì vậy, hãy để Lừa lấy nửa trái và phải của chúng tôi:

L 1010010 1010010 1010101 0101010

R 1010000 1111001 0001011 1000111

Và dịch chuyển cả hai vị trí sang trái, vì vòng đầu tiên có sự thay đổi 1 theo bảng (số ở đầu bên trái được chuyển sang đầu bên phải).

Khóa con thứ nhất:

L 0100101 0100101 0101010 1010101

R 0100001 1110010 0010111 0001111

Trong vòng thứ hai, bảng cũng nói 1, do đó, kết quả này sẽ lại được thay đổi bằng cách di chuyển từng vị trí số một sang trái.

Hiệp hai khóa con:

L 1001010 1001010 1010101 0101010

R 1000011 1100100 0101110 0011110

Trong vòng thứ ba, các số sẽ được di chuyển hai vị trí sang trái, bởi vì bảng bây giờ cho biết 2.

Khóa con thứ ba:

L 0101010 0101010 1010101 0101010

R 0001111 0010001 0111000 1111010

Trong các vòng tiếp theo, các số được di chuyển sang trái theo khoảng cách được chỉ định trong bảng, với mỗi ca được áp dụng cho kết quả của vòng trước. Cuối cùng, điều này mang lại cho chúng ta mười sáu khóa con khác nhau, một cho mỗi vòng của quy trình DES.

Bước tiếp theo là một hoán vị khác theo bảng PC2 được hiển thị bên dưới:

des-3a

Đến bây giờ, bạn nên làm quen với hoán vị, vì vậy chúng tôi đã giành chiến thắng trong quá trình đi sâu. Nếu bạn muốn xem nó hoạt động chi tiết hơn như thế nào, hãy tham khảo phần giải thích gần đầu phần này. Mặc dù các vị trí di dời là khác nhau, quá trình là như nhau.

Mỗi trong số 16 phím xuất phát trong quá trình dịch chuyển giờ được xáo trộn theo bảng, với số từ vị trí thứ 14 được chuyển đến vị trí đầu tiên, thứ 17 đến thứ hai, thứ 11 đến thứ ba, v.v…

Nếu bạn nhìn kỹ vào bảng, bạn sẽ nhận thấy rằng chỉ có 48 bit, thay vì 56 bit mà chúng ta đã có trước đây. Quá trình này được gọi là hoán vị nén.

Bạn cũng có thể thấy rằng nửa trên của bảng có các số từ một đến 28, trong khi nửa dưới chứa các số từ 29 đến 56. Điều này giữ cho nửa bên trái và bên phải của các khóa con của chúng tôi tách biệt và được chỉ ra bên dưới bởi không gian lớn hơn ở giữa các phím.

Một lần nữa, chúng tôi sẽ lừa đảo và tạo nên những con số. Hãy nói rằng toàn bộ quá trình này đã cho chúng ta những khóa con sau:

Vòng một:         010101 010101 101010 110100 101001 100101 101010 101010

Vòng hai:         011010 110101 101110 110010 010100 110010 111101 101101

Vòng ba:     010100 100110 110110 101010 100110 011000 101011 011001

Vòng bốn:         011001 110101 011001 110101 000011 001011 010101 010101

Vòng năm:         110101 001101 010101 010101 010011 001011 010111 100101

Vòng sáu:           010111 110101 011001 111001 101001 100101 101010 101010

Vòng bảy:     110101 111010 101110 101010 100110 010110 111011 001110

Vòng tám:       011001 110101 010101 001001 010011 001011 010100 101010

Vòng chín:         111011 011010 011110 100010 100010 010110 110011 110010

Vòng 10:             011010 010101 101110 101001 010010 010110 111000 101010

Vòng 11:             110101 001101 101110 101010 100101 100101 101010 001010

Vòng 12:             101001 100100 101001 101010 100110 011000 101011 011001

Vòng 13:             010010 010010 010101 010101 010110 110001 100101 101010

Vòng 14:             101001 100110 010101 011101 010001 001010 110010 111110

Vòng 15:             011001 011010 011001 110101 001001 011001 100101 101101

Vòng 16:             010010 100110 010101 010101 010001 101000 110010 111010    

Quá trình dịch chuyển này dẫn đến mỗi bit từ khóa ban đầu được sử dụng trong khoảng 14 trong số 16 khóa con, mặc dù một số bit được sử dụng nhiều hơn một chút so với các khóa khác.

Hoán vị ban đầu

Khi dữ liệu đã được chia thành các khối và được đệm nếu cần thiết, đó là thời gian để bắt đầu quá trình mã hóa DES. Chúng tôi sẽ quay trở lại với các khóa con mà chúng tôi vừa tạo ở giai đoạn sau. Bước đầu tiên được gọi là hoán vị ban đầu, trong đó dữ liệu được sắp xếp lại theo bảng sau:

3d-12

Quá trình hoán vị ban đầu này không làm cho thuật toán trở nên an toàn hơn. Điều này là do nó không liên quan đến đầu vào của bất kỳ khóa nào và có thể dễ dàng đảo ngược. Thuật toán ban đầu được thiết kế theo cách này vì nó giúp việc thực hiện dễ dàng hơn trong các bối cảnh nhất định.

Vì chúng tôi đã bao phủ hoán vị một vài lần, chúng tôi sẽ bỏ qua mọi lời giải thích chính ở đây. Quay lại Lịch trình khóa DES phần nếu bạn cần thêm thông tin về cách họ làm việc.

Hãy để Lừa lấy khối đầu tiên từ tin nhắn Hãy để Lôi đi đến bãi biển, nơi chúng tôi bắt nguồn từ Khối phần dưới Hiểu thuật toán DES:

01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111

Kể từ khi tế bào đầu tiên nói 58, chúng tôi sẽ chọn số từ vị trí thứ 58:

01001100 01100101 01110100 00100111 01110011 00100000 01100111 011011111

Sau đó, chúng tôi sẽ lấy số từ vị trí thứ 50:

01001100 01100101 01110100 00100111 01110011 00100000 0110011 01101111

Và số từ vị trí thứ 42:

01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111

Điều này mang lại cho chúng tôi110” cho đến nay. Chúng tôi sẽ chiếm phần còn lại của số:

11010111 01001010 10101000 10011101 01001011 10110101 10000111 10101001

Khi hoán vị ban đầu hoàn tất, dữ liệu sẽ được chuyển sang bước tiếp theo.

Tách các khối

Khi dữ liệu đã trải qua hoán vị ban đầu, nó được chia thành hai nửa. Chúng tôi có khối của chúng tôi vừa trải qua hoán vị ban đầu của nó:

11010111 01001010 10101000 10011101 01001011 10110101 10000111 10101001

Và chúng tôi sẽ tách nó thành hai khối, một khối bên trái (bao gồm 32 chữ số đầu tiên), được gọi là L0:

L0    11010111 01001010 10101000 10011101

Và một khối bên phải (bao gồm 32 chữ số thứ hai), được gọi là R0:

R0    01001011 10110101 10000111 10101001

Hàm F

Bây giờ khối đã được phân tách, đã đến lúc chức năng F diễn ra. Trong vòng đầu tiên, nó sẽ chỉ được áp dụng cho nửa bên phải của khối, trong khi nửa bên trái được giữ sang một bên cho đến sau này. Phía bên phải trải qua bốn bước sau đây như là một phần của chức năng F:

  • Hoán vị mở rộng (E trong sơ đồ)
  • Trộn phím (trong sơ đồ)
  • Thay thế (mỗi S1, S2, vv trong sơ đồ)
  • Hoán vị (P trong sơ đồ)

giảm 5

Hoán vị mở rộng

Hoán vị mở rộng thực hiện ba điều. Điều quan trọng nhất là nó cho phép các bit dữ liệu đầu vào ảnh hưởng đến đầu ra của hai bit khác, gây ra hiệu ứng tuyết lở. Nó cũng tạo ra một nửa 48 bit bên phải, sao cho nó có cùng kích thước với khóa con cho bước tiếp theo. Tác dụng khác của hoán vị mở rộng là nó làm cho đầu ra dài hơn đầu vào. Điều này cho phép nó được nén trong hoạt động thay thế.

Các bit được sắp xếp lại theo bảng sau. Một số bit riêng lẻ nằm trong bảng hai lần, đó là cách khối được mở rộng từ 32 lên 48 bit:

des - 6a

Vì ô đầu tiên nói 32, chúng tôi lấy khối bên phải của chúng tôi và chọn số từ vị trí thứ 32, giống như chúng tôi đã làm trong các ví dụ khác về hoán vị được liệt kê ở trên:

R0    01001011 10110101 10000111 10101001

Sau đó chúng tôi lấy các số từ vị trí đầu tiên, vị trí thứ hai và cứ thế, cho đến khi chúng tôi đến góc dưới cùng bên phải của khối. Vì có một 1 trong ô này, chữ số cuối cùng cũng sẽ là số xuất hiện ở vị trí đầu tiên của khối của chúng tôi.

Hãy để nói rằng hoán vị mở rộng cho chúng ta một khối 48 bit mới:

101110 100110 100100 000000 001100 001110 101101 011110

Trộn phím

Khi khối đã được mở rộng lên 48 bit, đó là thời gian để áp dụng khóa con Vòng đầu tiên, mà chúng tôi đã nhận được trong Lịch trình chính của DES phần trên. Khối được sửa đổi bởi khóa con bằng mật mã XOR.

Mật mã XOR là một mật mã bổ sung tuân theo một quy trình đơn giản, đặc biệt khi so sánh với các yếu tố khác mà chúng ta đã thảo luận.

Trong một mật mã XOR:

0 + 0 = 0

1 + 0 = 1

1 + 1 = 0

Vì vậy, hãy nói rằng bạn phải XOR hai số sau đây dưới dạng nhị phân:

1101

0101

Mỗi chữ số sẽ được thêm vào một chữ số bên dưới nó. Theo ba quy tắc được hiển thị ở trên, điều này mang lại kết quả:

1000

Để hoàn thành bước trộn khóa, chúng tôi lấy phần bên phải của khối mà chúng tôi vừa mở rộng lên 48 bit và phím tròn đầu tiên. Sau đó chúng tôi thực hiện bổ sung XOR:

Khối:                      101110 100110 100100 000000 001100 001110 101101 011110

Làm tròn một khóa:     010101 010101 101010 110100 101001 100101 101010 101010

Kết quả XOR:             111011 110011 001110 110100 100101 101011 000111 110100

Kết quả của hoạt động XOR sau đó được chuyển sang vòng tiếp theo.

Thay thế

Thay thế thêm nhầm lẫn cho dữ liệu. Nó thường được thực hiện với các bảng tra cứu, còn được gọi là hộp thay thế hoặc hộp S. DES sử dụng tám bảng hoặc hộp S riêng biệt, một bảng khác nhau cho mỗi 6 bit dữ liệu. Bảng sau đây cho thấy tám hộp S của DES:

des - 7

Tám hộp S riêng biệt được sử dụng để dịch mỗi đầu vào 6 bit thành đầu ra 4 bit. Bước đầu tiên trong quy trình là lấy các chữ số ở đầu và cuối của đoạn 6 bit, sau đó chuyển đổi giá trị nhị phân đó thành số thập phân.

Hãy để Lừa lấy dữ liệu mà chúng ta vừa hoàn thành XORing ở bước trước:

111011 110011 001110 110100 100101 101011 000111 110100

Chúng tôi sẽ xem xét phân đoạn 6 bit đầu tiên để cho bạn thấy quá trình thay thế hoạt động như thế nào:

111011

Vì số đầu tiên và số cuối cùng đều 1, điều này cho chúng ta một giá trị của 11. Sau đó chúng tôi chuyển đổi 11 từ nhị phân đến thập phân, mang lại cho chúng ta 3. Đây chỉ là những giá trị tương đương, được viết theo những cách khác nhau. Hãy nghĩ về nó như chuyển đổi ngôn ngữ máy tính sang ngôn ngữ của con người. Bạn có thể tự kiểm tra chuyển đổi bằng máy tính trực tuyến nếu bạn muốn.

Sau đó, chúng tôi lấy bốn chữ số giữa của phân đoạn 6 bit đầu tiên:

111011

Và chuyển đổi chúng từ nhị phân sang thập phân. 1101 dịch sang số 13.

Bây giờ, chúng tôi lấy hai số này và tìm kiếm chúng trong S1 bàn:

                des - 7a

Số đầu tiên của chúng tôi, 3, bảo chúng tôi nhìn vào hàng thứ ba, trong khi số thứ hai của chúng tôi, 13 bảo chúng tôi nhìn vào cột thứ 13 Giá trị ở hàng thứ ba của cột thứ 13 là 0.

Bây giờ chúng tôi đã tra cứu số của chúng tôi trong bảng, chúng tôi chuyển đổi nó thành nhị phân bốn chữ số. Zero thường được viết là 0 trong nhị phân, nhưng 0000 là như nhau, và đây là định dạng phù hợp nhất cho mục đích của chúng tôi.

Theo quy trình này, hộp S chuyển đổi phần dữ liệu 6 bit đầu tiên của chúng tôi (111011) thành một giá trị 4 bit khác nhau (0000). Có vẻ như phức tạp, nhưng kỹ thuật này giúp làm mờ thêm mối quan hệ giữa bản mã và bản rõ mà nó được liên kết đến.

Phần dữ liệu 6 bit tiếp theo sau đó cũng trải qua quá trình tương tự, nhưng thay vào đó, nó sử dụng hộp S2 được hiển thị ở trên. Phần thứ ba sử dụng bảng S3 và cứ thế, cho đến khi phần cuối cùng trải qua sự thay thế thông qua bảng S8.

Một lần nữa, chúng tôi sẽ gian lận trong phần còn lại của các giá trị. Hãy nói rằng các hộp thay thế cho chúng ta một kết quả của:

0000 1010 1100 1001 0100 1001 0111 0001

Khi từng phần của dữ liệu đã đi qua hộp S của nó, nó sẽ chuyển sang bước tiếp theo.

Hoán vị

Giai đoạn cuối cùng của hàm F là một hoán vị khác, sử dụng bảng sau:des - 8a

Bây giờ, bạn nên có một sự hiểu biết đúng đắn về cách hoán vị chuyển các chữ số từ khối cũ sang một vị trí khác trong khối mới, vì vậy chúng tôi đã giành chiến thắng đi vào nó một lần nữa.

Hãy nói rằng hoán vị này có kết quả trước đó của chúng tôi:

0000 1010 1100 1001 0100 1001 0111 0001

Và cung cấp cho chúng tôi một đầu ra của:

0101 0110 1001 0101 0010 0100 0101 0010

Bây giờ hoán vị đã được hoàn thành, chúng tôi đã hoàn thành với bốn bước của hàm F trong vòng này. Trong ký hiệu toán học, giá trị này được gọi là f (R0, K1). Điều này có nghĩa là kết quả là hàm (f) của bên phải ban đầu của khối (R0) và khóa con Vòng đầu tiên (K1).

XOR với khối bên trái

Hãy nhớ làm thế nào chúng ta chia khối thành một nửa ngay trước khi chúng ta bắt đầu các bước của hàm F? Chúng tôi đặt bên trái của khối (L0), trong khi bên phải trải qua từng quá trình này. Chà, giờ là lúc L0 trở lại hoạt động.

Chúng tôi có phía bên phải mà chúng tôi vừa xử lý f (R0, K1) và thêm nó vào bên trái cũ (L0) sử dụng mật mã XOR. Điều này cho chúng ta R1, kết quả của vòng đầu tiên của chúng tôi:

f (R0, K1):                         0101 0110 1001 0101 0010 0100 0101 0010

L0:                                    1101 0111 0100 1010 1010 1000 1001 1101

Kết quả XOR (R1):              1000 0001 1101 1111 1000 1100 1100 1111

Tham khảo đến Trộn phím phần trên nếu bạn cần một lời nhắc về cách mã hóa XOR hoạt động.

Thêm 15 vòng nữa

Nếu bạn đã đạt được điều này đến nay, thì có lẽ DES có vẻ như là một quá trình gian khổ. Nhưng nó thậm chí còn chưa hoàn thành. Dữ liệu đi qua bốn bước của chức năng F, tiếp theo là XOR, 15 lần nữa, tổng cộng 16 vòng.

Trong vòng thứ hai, chúng tôi lấy phiên bản gốc, chưa chạm tới của bên phải của khối (R0) và biến nó thành bên trái mới (L1). Trong khi đó, chúng tôi lấy kết quả của vòng đầu tiên và gửi nó thông qua chức năng F. Mọi thứ xảy ra giống như lần trước, tuy nhiên lần này, khóa con cho vòng hai được sử dụng thay thế. Hãy nói rằng quá trình này mang lại cho chúng ta kết quả của:

f (R1, K2):        1011 0111 1000 1011 1001 1101 1001 1110

Sau đó, chúng tôi XOR kết quả với L1, thực sự là R0 (chúng tôi đã dẫn xuất kết quả này trong Tách khối phần). Điều này cho chúng ta kết quả của vòng thứ hai, R2:

f (R1, K2):           1011 0111 1000 1011 1001 1101 1001 1110

L1:                      0100 1011 1011 0101 1000 0111 1010 1001

R2:                     1111 1100 0011 1110 0001 1010 0011 0111

Bước này có vẻ hơi khó hiểu, nhưng theo sơ đồ Feistel, bên phải cũ trở thành bên trái mới, trong khi kết quả của hoạt động trở thành bên phải mới.

Sơ đồ sau đây cung cấp cho bạn một đại diện trực quan về những gì đang xảy ra. IP đại diện cho hoán vị ban đầu, F là điểm thay thế cho toàn bộ chức năng F, tượng trưng cho chức năng XOR và các mũi tên chỉ ra mỗi bên của khối di chuyển giữa trái và phải:

des-9

Công thức chính xác cho mỗi bước là:

Ln = = Rn-1

Rn = = Ln-1 + f(Rn-1,Kn)

Ở đâu:

L = Nửa bên trái của khối (bắt đầu bằng L0 khi khối ban đầu được tách)

R = Nửa bên phải của khối (bắt đầu bằng R0 khi khối ban đầu được tách)

n = Số vòng (bắt đầu bằng 0, khi khối ban đầu được chia)

f = Hàm F

Kn = Khóa con cho vòng n

Theo công thức và sơ đồ, trong vòng thứ ba, R1 trở thành nửa bên trái mới (L2), trong khi R2 được xử lý thông qua chức năng F. Hãy nói rằng nó mang lại cho chúng ta một kết quả:

f (R2, K3)        1001 0111 0000 1011 1101 0111 1011 1011

Sau đó, chúng tôi tính toán kết quả của vòng thứ ba (R3), sử dụng mật mã XOR, giống như trước đây:

f (R2, K3):           1011 0111 1000 1011 1001 1101 1001 1110

L2:                      0100 1011 1011 0101 1000 0111 1010 1001

R3:                      1111 1100 0011 1110 0001 1010 0011 0111

Quá trình tương tự tiếp tục cho đến vòng thứ mười lăm, với các khối chuyển đổi và khóa con tiếp theo được sử dụng trong mỗi vòng. Trong vòng 16 và vòng chung kết, các khối không được chuyển qua. Thay vào đó, chúng được kết hợp để tạo thành một khối 64 bit. Việc kiềm chế hoán đổi các khối trong giai đoạn cuối này cho phép thuật toán được sử dụng cho cả mã hóa và giải mã.

Hãy nói rằng vòng chung kết cho chúng ta kết quả:

1010 0101 0100 1011 1001 0001 0100 1000 0101 1010 1101 0001 1101 1001 1001 1101

Hoán vị cuối cùng

Hoán vị này là nghịch đảo của hoán vị ban đầu, và một lần nữa, nó không thêm giá trị bảo mật. Nó sắp xếp lại dữ liệu theo bảng sau:

des-10a

Bảng hoán vị này hoạt động giống như các bảng trước. Vì nó là bước cuối cùng của quá trình mã hóa, kết quả sẽ là bản mã cho khối đầu tiên của LvĐi nào tới bãi biển”. Hãy nói rằng khối mã hóa là:

0100 1001 0011 0010 1001 0101 0111 0100 1011 1010 0111 0101 0111 1010 0101 0101 0101

Bây giờ, nếu bạn muốn bản mã thực sự cho Lừa Hãy đi đến bãi biển, bạn có thể bỏ qua toàn bộ quá trình học và đi thẳng đến một công cụ mã hóa DES trực tuyến. Nếu chúng ta nhập câu của mình cùng với một khóa (hãy để nói là kj329nf982bc9wn1), công cụ sẽ cung cấp cho chúng ta một văn bản được mã hóa về:

U2FsdGVkX19Pienyu3w3q4zCd2IPKEPUWBzu3AeyVu2H3FeimZe6hA

Nếu bạn muốn, sau đó bạn có thể chuyển đổi khóa và bản mã thành nhị phân và sau đó so sánh cách khối đầu tiên thuật ngữ mã hóa xếp hàng với toàn bộ quá trình đã được vạch ra.

Giải mã DES

Trong DES, quá trình giải mã rất đơn giản. Cấu trúc thuật toán của Fe Feistel cho phép nó dễ dàng bị đảo ngược. Quá trình này được chạy gần như chính xác để giải mã thông tin. Sự khác biệt duy nhất là các khóa con được áp dụng ngược lại. Đây là một thiết lập hiệu quả, bởi vì nó có nghĩa là cùng một phần mềm và phần cứng có thể được sử dụng trong cả quá trình mã hóa và giải mã.

Để giải mã dữ liệu, đầu tiên nó phải trải qua một hoán vị ban đầu, sau đó khối được tách ra và một nửa bên phải đi qua hàm F. Sự khác biệt là trong vòng giải mã đầu tiên, khóa con thứ 16 được áp dụng. Mọi thứ khác tiến hành như bình thường. Khi chức năng F hoàn thành, nó được XOR với phía bên trái của khối.

Các khối được chuyển qua và kết quả trải qua quá trình tương tự cho vòng thứ hai, với ngoại lệ duy nhất là khóa con thứ 15 được áp dụng. Quá trình này tiếp tục cho đến vòng thứ 16, khi khóa con thứ 1 được sử dụng.

Giống như trong quá trình mã hóa, các khối aren hoán đổi ở giai đoạn cuối và sau đó dữ liệu trải qua một hoán vị cuối cùng. Việc này kết thúc quá trình giải mã, dẫn đến bản gốc của tin nhắn.

3DES

Khi các điểm yếu về bảo mật của DES trở nên rõ ràng hơn, 3DES đã được đề xuất như một cách mở rộng kích thước khóa của nó mà không phải xây dựng một thuật toán hoàn toàn mới. Thay vì sử dụng một khóa như trong DES, 3DES chạy thuật toán DES ba lần, với ba khóa 56 bit:

  • Chìa khóa được sử dụng để mã hóa bản rõ.
  • Khóa hai được sử dụng để giải mã văn bản đã được mã hóa bởi khóa một.
  • Khóa ba được sử dụng để mã hóa văn bản đã được giải mã bởi khóa ba.

Trong mỗi giai đoạn, quy trình DES hoàn chỉnh được thực hiện như đã nêu ở trên.

Bây giờ, bạn có thể đang tự hỏi Làm thế nào để áp dụng giải mã trong bước thứ hai tăng cường bảo mật?

Câu trả lời là nó sử dụng một khóa riêng. Nếu khóa đầu tiên cũng được sử dụng để giải mã dữ liệu trong bước thứ hai, thì dữ liệu sẽ quay lại ngay nơi bắt đầu.

Tuy nhiên, vì nó sử dụng một khóa khác, quá trình giải mã không thực sự phục vụ để giải mã dữ liệu. Nó có vẻ sai lệch về mặt logic, nhưng việc giải mã bằng một khóa riêng chỉ có tác dụng làm xáo trộn dữ liệu hơn nữa.

Khi khóa thứ hai đã giải mã dữ liệu, dữ liệu khóa thứ ba được áp dụng để mã hóa lại. Kết quả là bản mã 3DES.

3DES được cấu trúc theo cách này vì nó cho phép các triển khai tương thích với một khóa DES, hai khóa DES và ba khóa DES (những điều này được trình bày trong phần sau). Điều này sẽ không hoạt động nếu mã hóa được sử dụng trong cả ba bước.

Tùy chọn khóa 3DES

Về mặt kỹ thuật, 3DES có thể được thực hiện với ba cấu hình chính khác nhau. Mặc dù vậy, tùy chọn thứ hai và thứ ba là không an toàn và không bao giờ nên được thực hiện.

  • Tùy chọn khóa một – Tùy chọn này sử dụng ba khóa độc lập và an toàn nhất.
  • Tùy chọn khóa hai – Trong cấu hình này, khóa thứ nhất và thứ ba giống nhau.
  • Tùy chọn khóa ba – Điều này sử dụng ba khóa giống hệt nhau. Khi các khóa giống hệt nhau được sử dụng, quá trình giải mã trong giai đoạn thứ hai sẽ hủy bỏ mã hóa đầu tiên, chỉ để lại mã hóa cuối cùng để thay đổi dữ liệu. Điều này làm cho kết quả giống như DES thông thường.

Quá trình 3DES: Khóa tùy chọn một

Hãy trung thực, toàn bộ quá trình 3DES có thể khiến đầu bạn quay cuồng, đặc biệt nếu bạn chưa quen với mật mã. Để giúp nó chìm trong, ở đây, một bản tóm tắt ngắn gọn về toàn bộ sơ đồ mã hóa của thuật toán 3DES:

Bản rõ nhập vào thuật toán 3DES và là lần đầu tiên được mã hóa bằng khóa một trong các bước sau:

    • Lịch trình khóa – 16 khóa con được lấy từ khóa chính

    • Hoán vị ban đầu

    • Khối được chia thành hai nửa trái và phải

      • Nửa bên phải được gửi qua chức năng F

        • Hoán vị mở rộng

        • XOR với khóa con cho vòng

        • Thay thế

        • Hoán vị

      • XOR kết quả của hàm F với bên trái

      • Đặt bên phải cũ thành bên trái mới và kết quả là bên phải mới

        Lặp lại các bước trên 14 lần

      • Nửa bên phải được gửi qua chức năng F

        • Hoán vị mở rộng

        • XOR với khóa con cho vòng 16

        • Thay thế

        • Hoán vị

      • XOR kết quả của hàm F với bên trái

      • Kết hợp hai bên trái và phải của khối với nhau

    • Hoán vị cuối cùng

Lấy văn bản đã được mã hóa bằng khóa một, sau đó gửi nó qua Giải mã trên mạng Chìa khóa hai:

    • Lịch trình khóa – 16 khóa con được lấy từ khóa hai

    • Hoán vị ban đầu

    • Khối được chia thành hai nửa trái và phải

      • Nửa bên phải được gửi qua chức năng F

        • Hoán vị mở rộng

        • XOR với khóa con cho vòng (bắt đầu từ khóa con thứ 16 để giải mã)

        • Thay thế

        • Hoán vị

      • XOR kết quả của hàm F với bên trái

      • Đặt bên phải cũ thành bên trái mới và kết quả là bên phải mới

        Lặp lại các bước trên 14 lần

      • Nửa bên phải được gửi qua chức năng F

        • Hoán vị mở rộng

        • XOR với khóa con cho vòng đầu tiên

        • Thay thế

        • Hoán vị

      • XOR kết quả của hàm F với bên trái

      • Kết hợp hai bên trái và phải của khối với nhau
    • Hoán vị cuối cùng

Lấy dữ liệu đã được giải mã bằng cách sử dụng mã khóa bằng cách khóa hai, sau đó gửi dữ liệu qua viquá trình đông lạnh với Chìa khóa số ba:

    • Lịch trình khóa – 16 khóa con được lấy từ khóa ba

    • Hoán vị ban đầu

    • Khối được chia thành hai nửa trái và phải

      • Nửa bên phải được gửi qua chức năng F

        • Hoán vị mở rộng

        • XOR với khóa con cho vòng

        • Thay thế

        • Hoán vị

      • XOR kết quả của hàm F với bên trái

      • Đặt bên phải cũ thành bên trái mới và kết quả là bên phải mới

        Lặp lại các bước trên 14 lần

      • Nửa bên phải được gửi qua chức năng F

        • Hoán vị mở rộng

        • XOR với khóa con cho vòng 16

        • Thay thế

        • Hoán vị

      • XOR kết quả của hàm F với bên trái

      • Kết hợp hai bên trái và phải của khối với nhau

    • Hoán vị cuối cùng

Kết quả là bản mã 3DES.

Tính bảo mật của 3DES

Tính bảo mật của 3DES phụ thuộc vào tùy chọn khóa nào đang được sử dụng. Tùy chọn khóa một liên quan đến ba khóa 56 bit khác nhau, cung cấp cho nó tổng chiều dài khóa là 168 bit. Độ dài hiệu quả được giảm đáng kể bằng các cuộc tấn công trung gian, giúp bảo mật thế giới thực của nó giảm xuống còn 112 bit.

Các cuộc tấn công giữa chừng rất hữu ích đối với các sơ đồ mã hóa lặp lại cùng một thuật toán nhiều lần. Kỹ thuật lưu trữ các giá trị ngay lập tức từ mỗi giai đoạn mã hóa, sau đó sử dụng thông tin này để cải thiện triệt để thời gian cần thiết để bắt buộc thuật toán.

Tùy chọn hai và ba có các khóa nhỏ hơn đáng kể và dễ bị tổn thương đối với cả các cuộc tấn công bằng văn bản đã biết và các cuộc tấn công bằng văn bản đã chọn, cũng như các cuộc tấn công khác.

Các cuộc tấn công được biết đến có thể xảy ra khi một kẻ thù có quyền truy cập vào cả bản rõ và bản mã của tin nhắn. Nếu một thuật toán dễ bị tấn công, kẻ tấn công có thể sử dụng thông tin này để suy ra khóa, cho phép chúng bẻ khóa tất cả các dữ liệu khác đã được mã hóa bằng cùng một khóa.

Một cuộc tấn công bằng văn bản được chọn là tương tự, nhưng nó liên quan đến kẻ tấn công phát hiện ra khóa bằng cách so sánh các bản mã với các bản rõ tùy ý.

Do các lỗ hổng này và các kích thước khóa nhỏ tổng thể có liên quan, các tùy chọn khóa hai và ba không an toàn và không nên được thực hiện.

3DES có an toàn không?

Vì 3DES sẽ không còn được sử dụng trong vài năm tới, tốt nhất nên sử dụng các thuật toán khác. Mặc dù tùy chọn khóa vẫn được coi là an toàn cho nhiều ứng dụng, nhưng có nhiều lý do chính đáng cho lý do tại sao nên sử dụng nó thay vì sử dụng thay thế như AES.

Mặc dù 3DES giữ một vị trí quan trọng trong ngành mật mã như là phần tiếp theo của DES, nhưng những năm huy hoàng của nó đã kết thúc và đã đến lúc phải tiếp tục. Nếu bạn muốn bảo mật hệ thống của mình tốt trong tương lai, bạn nên sử dụng thuật toán cập nhật hơn thay thế.

Liên quan: Các loại mã hóa phổ biến được giải thích

Kế hoạch X bởi DoD được cấp phép theo Muff