繁体   English   中英

两个移动设备之间的安全连接:SSL密钥不是“私有”

[英]Secure connection between two mobile devices: SSL key not 'private'

我使用自签名证书和使用openssl生成并存储在密钥库中的密钥,在运行同一应用程序的两个Android设备之间使用SSL。 问题在于,私有密钥库必须以某种方式嵌入到应用程序包中,因此对任何攻击者都可用。 我相信这将使攻击者能够监听会话并解密两部手机之间的数据。

我没有使用或不需要PKI的任何其他功能,我只是提供了两个密钥库,因为SSL连接设置需要它们。

是否存在不需要预定义PKI并在运行时动态生成自己的密钥的安全SSL密码?

我研究了在运行时生成自己的密钥-在Java中创建密钥很容易,但是KeyStore.setEntry()需要一个X509证书链,而不仅仅是公钥,并且Android不包含JCE代码来生成X509。 我可以通过添加BouncyCastle(兼容Android的版本称为SpongyCastle)库来实现此目的,但这会增加我的应用程序包大小的开销。

Internet上无法访问第三方信任服务器,这两个电话可能位于无法访问Internet的专用WLAN上。

作为一项不错的奖励,我希望能够相信该应用程序正在与自身通信,而不是有人从PC上嗅探协议,但是我认为这不会成为可能,因为该应用程序包中的内容将始终可用。

为确保您正在与您信任的某人/某人交谈,您需要一种对另一方进行身份验证的机制。 我不知道在没有数据保密的情况下实现这一目标的方法:

  • 非对称身份验证(即您当前的实现)要求私钥数据保持私密性。

  • 对称身份验证要求共享机密保持私有。

将来, TrustZone将允许应用程序将机密数据存储在手机的安全元件中。 但是,在此之前,您始终会面临设备上恶意软件的风险。 向您的密钥库(用户知道,而不是应用程序知道)添加密码可能会给攻击者增加额外的障碍,但是一旦手机被感染,便可以窃听密码。

为了最大程度地降低风险状况,您应该按设备生成密钥,而不是将单个证书/密钥对组合组合到应用程序中。 当然,这将增加添加新用户所需的工作量,因为将需要某种形式的注册(例如,验证其密钥)。 或者,您可以将问题推送给您的用户,并让他们决定以PGP方式信任谁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM