2017-01-03 3 views
1

Я создал приложение для Android, которое считывает данные с датчиков, установленных на смартфон, и отправляет эти данные в формате JSON на сервер приложений.Приложение для Android: DES или RSA?

Я настроил сервер и приложение для Android на работу по протоколу https и аутентифицировал себя с помощью взаимного авторизации (с самозаверяющими сертификатами).

Теперь меня попросили добавить в приложение Android шифрование перед клиентом, а сервер запустил процесс аутентификации.

В этой связи я хочу понять, что является лучшим алгоритмом между DES и AES с точки зрения потребления ресурсов.

Я ничего не нахожу в Интернете. Можете ли вы перенаправить меня на какой-то ресурс, где я могу больше узнать об этом аргументе?

ответ

3

DES устарел почти во всех законных целях использования симметричного шифрования (он устарел и легко грубодействует). AES (Rijndael с размером блока 128 бит) является стандартным симметричным решением для шифрования, в то время как Blowfish, Twofish, RC4 (также не рекомендуется) и 3DES/TDES - это другие варианты. AES поддерживается повсеместно и будет вашим лучшим решением в этом случае. Android поддерживает AES-шифрование через собственные библиотеки Java JCA (formerly JCE), а также SpongyCastle - модифицированную версию BouncyCastle, предназначенную для Android).

Если вам нужно что-то более существенное, чтобы поддержать это, есть много ресурсов:

Вы должны использовать сильный (128 или 256 бит) ключ, сгенерированный из CSPRNG (или надежно полученный из сильной кодовой фразы через PBKDF2, bcrypt или scrypt с высоким коэффициентом работы/итерациями), уникальный и непредсказуемый IV для каждого операции шифрования и (предпочтительно) аутентифицированное шифрование с ассоциированными данными (AEAD) cipher block mode of operation, например GCM или EAX, или, в противном случае, код аутентификации сообщения на основе HMAC (MAC) по шифрованному тексту и проверять его с постоянным временем проверка равенства до выполнение любого дешифрования.

2

Никогда не используйте DES. Это положительно античный (старше 40 лет), а короткая длина ключа (56 бит) означает, что теперь он может быть взломан довольно быстро со скромным оборудованием.

Его слабость была признана некоторое время назад, поэтому было предложено ввести Triple DES (3DES), чтобы обеспечить лучшую безопасность (увеличение длины ключа до 112 бит). Однако это произошло за счет увеличения времени вычислений, поскольку для шифрования каждого блока данных алгоритм должен выполнять значительно большую работу.

AES превосходит 3DES во всех отношениях. По дизайну, it is able to operate at high speed with low memory requirements. Кроме того, последние процессоры (включая архитектуры Intel x86 и ARM) имеют built-in AES instructions, которые позволяют выполнять шифрование и дешифрование на аппаратных средствах, что приводит к скорости, которые на несколько порядков выше, чем это возможно при использовании 3DES.

1

Я должен согласиться с другими ответами относительно DES - он обеспечивает небольшую защиту от мотивированного злоумышленника.

Что касается RSA (другой алгоритм, который вы упоминаете в своем названии), алгоритмы шифрования с открытым ключом, как правило, значительно медленнее (на величину около 1000 в зависимости от того, что я читал, хотя я никогда лично не был приурочен Это).

Также возможно менее безопасно использовать криптографию с открытым ключом для обмена длинными сообщениями.

Как некоторый фон, криптография с открытым ключом обычно зависит от какого-либо типа trap-door function (т. Е. Функции, которую относительно легко вычислить, но трудно найти обратную для). Оказывается, что эти функции чрезвычайно трудно найти; одним из наиболее распространенных сейчас (на что основан RSA) является integer factorization, который является NP-Intermediate на «стандартных» компьютерах (но broken для квантовых компьютеров).

Во-первых, тот факт, что число факторизация NP-интермедиат, по крайней мере теоретическая слабость в RSA - технически, никто не на самом деле доказано, что NP-промежуточные задачи по своей сути более «сложным», чем полиномиальных алгоритмов времени (хотя широко распространено мнение, что они есть), потому что это повлечет за собой решение P vs. NP problem, что является одним из основных выдающихся вопросов в области информатики.

Оказывается, что многие функции ловушки-двери не так сложно найти инверсии, поскольку они разрушают хороший симметричный ключ, такой как AES или Twofish, то есть лучший публичный криптоанализ для открытого ключа алгоритмы шифрования имеют тенденцию быть, по меньшей мере, несколько более выполнимыми, чем алгоритмы симметричного ключа. (Здесь есть article о том, почему совершенно невозможно «сломать» AES с грубой силой, и известные атаки против него даже не могут быть практически возможными).

По этой причине криптография с открытым ключом часто используется для таких вещей, как обмен ключами, и в этот момент обе стороны переключаются на криптографию с симметричным ключом.

Все, что сказать, что другие люди правы - используйте AES :).