2011-07-20 30 views
6

Theo Wikipedia, TripleDES hỗ trợ độ dài khóa 56, 112 và 168 bit, nhưng System.Cryptography.TripleDESCryptoServiceProvider.LegalKeySizes cho biết nó chỉ chấp nhận độ dài khóa 128 và 192 bit.Kích thước khóa TripleDES - .NET vs Wikipedia

Hệ thống mà tôi đang phát triển cần phải tương thích (dữ liệu được mã hóa bởi mã của tôi cần được giải mã trong PHP, Java và Objective-C) và tôi không chính xác trong trường hợp này.

Vậy tôi nên tin vào ai? Và làm thế nào tôi có thể chắc chắn dữ liệu được mã hóa của tôi là di động?

Trả lời

13

Wikipedia không nói TripleDES hỗ trợ khóa 56 bit. Các "tùy chọn khóa" nói về các phím "ba chiều dài" và các phím "hai chiều", sau này "giảm kích thước khóa xuống 112 bit". Kích thước khóa hiệu dụng cho DES ban đầu là 56 bit. Một khóa như vậy được xây dựng từ đầu vào 64 bit, mặc dù 8 bit vẫn chưa được sử dụng. Tùy chọn khóa "ba chiều dài" do đó hoạt động với ba bit 56 bit (= 168) được xây dựng từ ba lần 64 bit (= 192 bit) và tùy chọn "hai chiều dài" hoạt động với hai lần khóa 56 bit (= 112) được xây dựng từ hai lần 64 bit (= 128).

Khi TripleDESCryptoServiceProvider của bạn cần lấy các khóa thực tế từ đầu vào 64 bit trước, nó sẽ chỉ lấy 128 bit (hai chiều dài) hoặc 192 bit (ba chiều dài) làm đầu vào và sau đó lấy nội bộ 168 hoặc 112 bit khóa thực tế từ đầu vào đó.

Đó là quy trình chuẩn cho TripleDES, vì vậy bạn sẽ không gặp phải vấn đề gì với tính di động trên các nền tảng.

+0

ba ngày kể từ khi nhìn vào ví dụ vô dụng sau đó câu trả lời này đã giúp tôi nhận ra cách Net hỗ trợ các phím 128bit và chức năng CCCrypt lực lượng bạn vào 192bit. .. nó sao chép 64 bit đầu tiên của 128bits vào cuối để K3 = K1. Khả năng tương thích với iOS <-> C# .Net. Quá dễ. –

0

Triple DES sẽ chỉ sử dụng 112/168 bit của khóa bit 128/192 của bạn. .NET yêu cầu nhiều bit hơn cho mục đích căn chỉnh (mỗi khóa con 56 bit được căn chỉnh trên một ranh giới 64 bit).

56 bit DES bị hỏng và tôi cho rằng họ đã làm cho việc sử dụng trở nên khó khăn hơn.

0

Tôi tin rằng một số (tất cả?) Triển khai DES chỉ sử dụng 7 bit cho mỗi ký tự của khóa (mã hóa ASCII). Tôi không chắc chắn nếu định nghĩa của DES cho phép các ký tự 8 bit trong các khóa hoặc nếu nó thực sự bỏ qua bit cao của mỗi byte. Tôi nghĩ đó là thứ hai.

Tuy nhiên, trong các kích thước khóa .NET được dựa trên số byte, thời gian 8 bit mỗi byte, ngay cả khi thuật toán cơ bản bỏ qua bit đầu đó. Đó có lẽ là sự khác biệt chính.

TripleDES chạy DES ba lần với ba khóa DES 56 bit khác nhau. Trong một số triển khai, chạy giữa được đảo ngược (mã hóa-giải mã-mã hóa hoặc "EDE") để sử dụng cùng một khóa DES 56 bit cho cả ba bản sao mã hóa của DES đơn giản. Điều này được thực hiện để tương thích với các hệ thống cũ hơn, nơi cả hai đều đang sử dụng mã hóa dựa trên phần cứng. Tôi không chắc liệu TripleDESCryptoServiceProvider có sử dụng phương pháp "EDE" này hay phương pháp "EEE" (hay cung cấp cho bạn một lựa chọn). Hơn nữa, cùng một khóa DES 56 bit có thể được sử dụng cho lần chạy đầu tiên và thứ ba, sử dụng khóa 112 bit thay vì khóa 168 bit mà nó cũng có thể sử dụng.

Chứng chỉ TripleDESCryptoServiceProvider sẽ không chấp nhận khóa 56 bit (64 bit) vì nó không thực sự bảo mật 3DES (bạn có thể sử dụng DESCryptoServiceProvider thay thế?). Tại một thời điểm nó được xác định rằng các bit 3D-bit EEE (hoặc EDE?) 3DES không cung cấp bất kỳ bảo mật lớn hơn so với sử dụng một khóa 112-bit (128-bit). Tuy nhiên, có thể có một số cuộc tấn công cực đoan (thường không khả dụng) trong đó khóa ngắn hơn về mặt lý thuyết dễ bị tổn thương hơn. Điều đó cũng có thể áp dụng cho câu hỏi EDE và EEE.

Về khả năng tương thích của bạn với các câu hỏi ngôn ngữ khác, .NET * Các lớp CryptoServiceProvider chỉ là một API bao quanh thư viện Windows CRYPTO cơ bản.Nếu các ngôn ngữ khác cũng đang sử dụng thư viện Windows CRYPTO, nó phải tương thích. Nếu không, bạn sẽ phải tìm hiểu xem họ đang sử dụng EDE hoặc EEE và đảm bảo rằng tất cả đều sử dụng cùng một (bạn có thể hoặc không thể linh hoạt về điều đó), và rõ ràng là sử dụng cùng độ dài khóa. Họ có lẽ là tất cả bằng cách sử dụng cùng một thứ tự byte, nhưng nếu bạn tìm thấy mọi thứ vẫn không phù hợp với đó có thể là một điều để kiểm tra. Nhiều khả năng trên Windows, tất cả chúng đều sử dụng CRYPTO và có thể sẽ khớp với điều kiện bạn có thể đặt các tùy chọn theo cùng một cách cho tất cả chúng.

+0

Cuối, nhưng: định nghĩa của DES dành riêng * bit * thấp của mỗi byte của khóa cho chẵn lẻ (lẻ); trong những năm 1970 mật mã được thực hiện trong phần cứng rời rạc chuyên biệt và lỗi bit là một khả năng thực sự. Hôm nay với gần như tất cả mọi thứ trong phần mềm hoặc phần mềm một số triển khai bỏ qua chẵn lẻ và một số vẫn kiểm tra nó cho tính tương thích; Tôi không biết mà dot-NET (hoặc CAPI) nào. ASCII không nên được giả định hoặc yêu cầu cho các giá trị khóa, và chắc chắn không có gì để làm với định nghĩa. ... –

+0

... Ngoài ra, cả EDE và EEE đều được xem xét trở lại vào những năm 1990 khi rõ ràng là một "cải tiến" của DES là cần thiết, nhưng chỉ EDE được tiêu chuẩn hóa và tôi rất ngạc nhiên khi thấy bất kỳ việc thực hiện nào ngày hôm nay EEE. –

+0

@ dave_thompson_085 cảm ơn sự làm rõ về tiêu chuẩn hóa với EDE. Trên bit chẵn lẻ, nó sẽ khá tệ nếu việc thực hiện phần mềm (dịch thành phần cứng có thể thực hiện) chiếm 7 bit trên của mỗi byte được cung cấp khi có nhiều entropy trong 7 bit thấp hơn (trong trường hợp mật khẩu mã hóa được cung cấp trực tiếp- -Nếu có lẽ ngu ngốc). Tôi sẽ nghĩ rằng nó hợp lý nhất mà nó giữ 7 bit thấp hơn của mỗi byte và thay đổi chúng cùng với tính chẵn lẻ tính toán vào việc thực hiện 3DES. Tất nhiên, nó có thể làm một cái gì đó ít hợp lý, thay vào đó, và mất entropy. –

0

Des sử dụng bội số của các khóa 64 bit, nhưng bỏ đi 8 bit để lại một chiều dài hữu ích 64 bit.
Yêu cầu ba có thể sử dụng độ dài khóa gấp đôi hoặc gấp ba lần.
Tuy nhiên, vì việc lặp lại des với cùng một khóa giải mã thông báo đang chạy, thậm chí một số lần có thể giải mã một phần nội dung nếu các phím chia sẻ các mẫu.

Vì lý do này, des luôn chạy một số lần lẻ.

Đây cũng là lý do tại sao bạn không bao giờ nên chọn khóa nơi lặp lại các phần 64 bit.

Với ba des 192 chút bạn do đó có độ dài chìa khóa hiệu quả của 112 bit

Các vấn đề liên quan