0

由于互联网上的所有这些监视,我计划编写一个完整的开源、跨平台和完全加密的聊天客户端,包括视频功能。

与 Skype 类似,但消息和视频流应完全加密,所有通信只能发生在客户端本身之间,无需通过任何服务器。

然而,注册、身份验证和在线检查需要在服务器端完成,以保持简单且对初学者也可用。

因此,为了使其尽可能简单,我打算进行公钥/私钥加密。为了不将私钥存储在服务器上的任何地方,也不要将其携带到您要登录的每台计算机上,我考虑将密码设置为私钥。这样您就可以随时随地登录,而不必担心密钥。

如果您添加一个人,您将自动向他/她发送您的公钥。如果他/她接受,他/她将用她/他的公钥回应,然后你们就可以聊天/视频通话。

我在这里看到的问题是:

  • 更改密码(私钥)时如何保留公钥?
  • 我可以使用现有的 SSL 基础设施来实现这一点,而无需重新实现任何加密标准吗?

我已经有几个人愿意帮助编程(C/C++),但不幸的是,我们都不是很热衷于加密技术,所以我需要先对这些东西进行分类。一旦我知道如何实现加密,我将发布一个图表并征求有关它的反馈。

提前致谢。

4

1 回答 1

1

首先,我认为Jitsi大致是您正在考虑构建的应用程序。它通过OTR进行加密文本聊天,并通过ZRTP进行加密语音和视频聊天,用于密钥协商和SRTP。一般来说,密码协议设计非常困难,因此如果您要编写自己的应用程序,您应该使用这些协议和执行它们的库。

要回答您的问题,如果您希望它不在密码之间更改,则不能直接从密码中派生密钥。相反,您将密钥存储在使用从密码派生的密钥(使用 PKBDF2 或 scrypt)加密(对称)的服务器上。如果用户更改密码,他们会使用旧密码派生密钥解密密钥并使用新密钥重新加密。

不过,总的来说,除非您使用一些用户可以在任何地方登录的 webapp 类型的解决方案,否则这样做并没有多大意义。这实际上是一个非常糟糕的主意。看到一些对cryptocat的基于javascript的实现的批评,例如here

于 2013-06-28T23:56:28.357 回答