Android WifiP2pManager 加密/安全

Posted

技术标签:

【中文标题】Android WifiP2pManager 加密/安全【英文标题】:Android WifiP2pManager Encryption / Secure 【发布时间】:2015-02-25 17:06:40 【问题描述】:

我已经构建了一个基本的应用程序,借助 WifiP2pManager 类,它可以使用该应用程序向其他手机发送消息,而无需 WiFi AP。

但是,我现在正在尝试保护通过应用程序传输的消息,但我不确定如何最好地安全地执行此操作。

我想使用一种公钥加密形式,但由于该应用程序设计为在不访问 Internet 的情况下运行,因此我不确定解决此问题的最佳方法,因为在设备使用时需要共享密钥连接。

使用 SSLSockets 合适吗?如何使用它?

提前感谢您!

【问题讨论】:

【参考方案1】:

WiFi P2P(直接)连接默认使用 WPA2 加密。连接的身份验证阶段使用 WPS(用户必须接受的推送对话框)并交换密钥以设置 WPA2。组形成后,您可以使用WifiP2pGroup.getPassphrase() 获取加密密钥。

通信已经很安全了(假设设备成功连接,没有任何人搞砸连接建立),但如果你想确保一切都是防弹的,你可以在群主设备上设置一个辅助密钥,并与客户(组形成后的第一件事)。并使用辅助密钥对数据进行加密。

发送:finalMessage = EncryptUsingGroupKey(message) 接收:finalMessage = DecryptUsingGroupKey(message)

“finalMessage”也将通过 WiFi P2P 使用 WPA2 密码进行加密/解密。

对于具有内置完整性的加密/解密,我建议使用Facebook Conceal。它使 android 上的加密变得非常容易和快速。它的主要目的是流式传输更大的文件(getCipherOutputStream 和 getCipherInputStream),但您可以使用加密/解密功能对较小的文件进行快速加密。但是,您需要修改基础 KeyChain 以使用特定密钥,而不是每次都生成一个随机密钥。

关于 SSLSockets,你并不真的需要它们;基本的 Java 套接字应该可以解决问题。

【讨论】:

以上是关于Android WifiP2pManager 加密/安全的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Android 11 (Wi-Fi Direct) 上使用 WifiP2pManager.setDeviceName

Android WifiP2PManager - 几个问题

NSD 和 WifiP2pManager 有啥不同?

检查android wifip2p连接是不是成功?

WiFiP2PManager、OnPeersAvailable、DeviceList.Count 为零 - 始终

WifiP2pManager.requestPeers() 在 onPeersAvailable() 中不断返回旧对等点