加密套接字的简单握手

时间:2011-08-03 11:32:29

标签: security encryption ssl rsa

我需要保护客户端和服务器之间的套接字连接。不幸的是,SSL / TLS在客户端平台上是不可用的(所以那些会自动回答“不要推销自己的安全性”的人:不要 :-)),我需要构建一些东西我。我想出了这个简单的方案(基于我对SSL的小型,可能过时的知识):

  • 客户端连接到服务器
  • 客户端生成对称加密密钥
  • 使用服务器的公钥对其进行加密(因为它在程序中硬编码,所以它知道)
  • 它将该密钥发送到服务器
  • 服务器使用其私钥解密它
  • 通信开始,以消息的形式完成,每个消息对称编码。
  • 每条消息都包含一个序列号,因此即使它们的实际内容相同,也不会有两条消息相同。 (如果这不是必要的话,请告诉我,因为将其删除会使事情变得更容易)

据我所知,这是安全的。 MITM是不可能的,因为他无法解密生成的密钥。客户端软件本身是从HTTPS网站下载的。唯一的“缺陷”是嗅探器仍然可以看到发送的消息的数量和大小,但这不是问题。

您的专家意见是什么?

我需要查看要使用的具体加密(取决于客户端上可用的加密),但我认为RSA和AES-256是安全的选择吗?

2 个答案:

答案 0 :(得分:0)

只要您提供足够长的密钥,RSA和AES-256就是安全的选择。

答案 1 :(得分:0)

是的,这是SSL的基本(简化)理念。至于密钥长度,AES-256适用于对称,而此时带有2048的RSA应该没问题。不确定系统预计会持续多长时间,但您可能想要考虑一直在多长时间内加密(越来越大)的密钥大小。因此,这可能与您的硬编码概念有关,而不是将其作为用户指定。

我不确定你为什么要在那里硬编码公钥。如果它被撤销,或者它们(无论出于何种原因)更改密钥,或者如果他们想要使用不同的证书连接到不同的站点,或者可能发生的任何其他事情,这可能是从一个方便到一个错误相当快。

您是否考虑过非对称侧的椭圆曲线加密?不确定客户端是什么,但ECC越来越受欢迎(特别是在移动设备中),因为它使用的密钥尺寸明显小于RSA,因此处理的资源更少。