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
WiFiP2PManager、OnPeersAvailable、DeviceList.Count 为零 - 始终
WifiP2pManager.requestPeers() 在 onPeersAvailable() 中不断返回旧对等点