Размеры ключей TripleDES - .NET против Википедии - PullRequest
6 голосов
/ 20 июля 2011

Согласно Википедии , TripleDES поддерживает 56, 112 и 168-битные длины ключей, но System.Cryptography.TripleDESCryptoServiceProvider.LegalKeySizes говорит, что принимает только 128 и 192-битные длины ключей.

Система, которую я разрабатываю, должна быть совместимой (данные, зашифрованные моим кодом, должны быть расшифрованы в PHP, Java и Objective-C), и я не знаю, кто в этом случае прав.

Так кому же мне верить? И как я могу быть уверен, что мои зашифрованные данные переносимы?

Ответы [ 4 ]

13 голосов
/ 20 июля 2011

В Википедии не сказано, что TripleDES поддерживает 56-битные ключи.«Опции ключа» говорят о ключах «тройной длины» и ключах «двойной длины», последний «уменьшает размер ключа до 112 бит».Эффективный размер ключа для оригинального DES составляет 56 бит.Такой ключ построен из 64-битного ввода, хотя 8 бит остаются неиспользованными.Таким образом, опция ключа «тройной длины» работает с трехкратным 56-битным (= 168) из трехкратного 64-битного (= 192 бит), а опция «двойной длины» работает с двухкратным 56-битным ключом (= 112)построен из двух раз 64 бит (= 128).

Поскольку вашему TripleDESCryptoServiceProvider необходимо сначала получить действительные ключи из 64-битного ввода, он будет принимать только 128 бит (двойную длину) или 192 бита (тройную длину) в качестве входных данных, а затем получит внутреннее извлечение168 или 112-битные фактические ключи от этого входа.

Это стандартная процедура для TripleDES, поэтому у вас не должно возникнуть проблем с переносимостью между платформами.

0 голосов
/ 20 июля 2011

Des использует кратные 64-битные ключи, но выбрасывает 8 бит, оставляя полезную длину ключа 64 бит.
Triple des может использовать двойную или тройную длину ключа.
Однако, поскольку повторение des с тем же ключом расшифровываетсообщение, запущенное четное количество раз, может частично расшифровать материал, если ключи разделяют шаблоны.

По этой причине des всегда запускается нечетное количество раз.

По этой же причине вам никогда не следует выбирать ключ, в котором повторяются 64-битные части.

Таким образом, эффективная длина ключа составляет 112 бит

с тройным дес 192 бита.
0 голосов
/ 20 июля 2011

Я полагаю, что некоторые (все?) Реализации DES используют только 7 битов на символ ключа (кодировка ASCII).Я не уверен, что определение DES допускает использование 8-битных символов в ключах или оно фактически игнорирует старший бит каждого байта.Я думаю, что это последнее.

Однако в ключах .NET размеры основаны на количестве байтов, умноженных на 8 бит на байт, даже если основной алгоритм игнорирует этот старший бит.Это, вероятно, основное несоответствие.

TripleDES запускает DES три раза с потенциально тремя различными 56-битными ключами DES.В некоторых реализациях промежуточный прогон инвертируется (шифрование-дешифрование-шифрование или «EDE»), так что использование одного и того же 56-битного ключа DES для всех трех дублирует шифрование простого DES.Это было сделано для совместимости со старыми системами, где обе используют аппаратное шифрование.Я не уверен, что TripleDESCryptoServiceProvider использует этот подход «EDE» или «EEE» (или дает вам выбор).Кроме того, один и тот же 56-битный ключ DES можно использовать для первого и третьего запуска, используя 112-битный ключ вместо 168-битного ключа, который он также может использовать.

Сертифицированный TripleDESCryptoServiceProvider не будет принимать56-битные (64-битные) ключи, потому что это на самом деле не безопасность 3DES (вы могли бы вместо этого использовать DESCryptoServiceProvider?).Одно время было определено, что 168-битный EEE (или EDE?) 3DES не обеспечивает большей безопасности, чем использование 112-битного (128-битного) ключа.Однако могут быть некоторые экстремальные (обычно недоступные) атаки, в которых короткий ключ теоретически более уязвим.Это также может относиться к вопросу EDE vs EEE.

Что касается вопроса совместимости с другими языками, классы .NET * CryptoServiceProvider - это просто API-оболочка для базовой библиотеки Windows CRYPTO.Если другие языки также используют библиотеку Windows CRYPTO, она должна быть совместимой.В противном случае вам необходимо выяснить, используют ли они EDE или EEE, и убедиться, что все используют один и тот же (вы можете иметь или не иметь гибкость в этом отношении), и, очевидно, использовать одну и ту же длину ключа.Вероятно, все они используют один и тот же порядок байтов, но если вы обнаружите, что все еще не совпадают, это может быть еще одна вещь, которую нужно проверить.Скорее всего, в Windows все они используют CRYPTO и, вероятно, будут совпадать, если вы можете установить параметры одинаково для всех из них.

0 голосов
/ 20 июля 2011

Triple DES будет использовать только 112/168 бит вашего 128/192-битного ключа..NET запрашивает больше битов для выравнивания (каждый 56-битный подключ выровнен по 64-битной границе).

56-битный DES поврежден, и я ожидаю, что они затруднили его использование.

...