2015-02-25 3 views
0

Я создал базовое приложение, которое может отправлять сообщения на другие телефоны с помощью приложения без необходимости использования Wi-Fi AP благодаря классу WifiP2pManager.Android WifiP2pManager Encryption/Secure

Тем не менее, теперь я пытаюсь защитить сообщения, переданные через приложение, и я не знаю, как наилучшим образом сделать это безопасно.

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

Будете ли использовать SSLS-разъемы? Как можно использовать это?

Спасибо заранее!

ответ

0

Соединения WiFi P2P (Direct) по умолчанию шифруются WPA2. Фаза аутентификации соединений использует WPS (диалог Push, который должен быть принят пользователем), и ключ заменяется на настройку WPA2. После формирования группы вы можете получить ключ шифрования, используя WifiP2pGroup.getPassphrase().

Связь уже довольно безопасна (при условии, что устройства успешно подключены без каких-либо завинчиваний с установлением соединения), но если вы хотите убедиться, что все является пуленепробиваемым, вы можете настроить дополнительный ключ на устройстве владельца группы и обменять ключ с клиентами (первое, что после формирования группы). И используйте дополнительный ключ для шифрования данных.

Посылка: finalMessage = EncryptUsingGroupKey (сообщение)
Прием: finalMessage = DecryptUsingGroupKey (сообщение)

'finalMessage' также будет зашифрован/расшифрован WiFi P2P с использованием WPA2 ключевую фразу.

Для шифрования/дешифрования с встроенной целостностью я бы предложил использовать Facebook Conceal. Это делает crypto на Android чрезвычайно простым и быстрым. Это основная цель для потоковой передачи больших файлов (getCipherOutputStream и getCipherInputStream), но вы можете использовать функции шифрования/дешифрования для быстрого шифрования на более мелкие вещи. Однако вам нужно будет изменить базовый KeyChain, чтобы использовать конкретный ключ, вместо того, чтобы генерировать случайный каждый раз.

О SSLS-разъемах они вам в действительности не нужны; базовые сокеты Java должны делать трюк.

Смежные вопросы