首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计一种安全的IM协议

设计一种安全的IM协议
EN

Cryptography用户
提问于 2014-02-27 16:28:48
回答 1查看 365关注 0票数 2

我最近没有太多的编程,所以我想我会制作一个加密的即时通讯程序(读: Skype克隆)来提高我的技能。不过,这不重要,我能做到。问题是,我对密码学几乎一无所知,所以我想在这里问一问,这样我就不会发现我做密码的方式是错误的,我必须重新设计所有的东西。

我的计划是:

  • 当客户端连接时,它会生成一个键盘(或从磁盘加载一个键盘),并将公钥发送到服务器。
  • 服务器将群聊中每个人的公钥广播给其他人。
  • 当客户端发送消息时,它对消息进行多次加密(使用NaCl的crypto_box),每次加密一次。然后将它们全部发送到服务器,包括向哪个客户端发送加密消息的信息。
  • 服务器只需将消息转发给接收方,接收方就可以使用自己的私钥和发件人的公钥解密消息(同样使用crypto_box)。

当然会有身份验证,所以有些人不能假装是别人,就把他们的公钥发送到服务器上。

我不知道这个方法有多安全,也不知道它是否有效。如果这不是最优的,你会怎么做?

EN

回答 1

Cryptography用户

发布于 2014-02-28 06:11:10

我认为在深入设计协议之前的第一个问题是问自己你想要什么样的安全通信?也就是说,当涉及到IM用户之间的通信时,有两种选择需要考虑:

  1. 对于客户机-服务器安全通信,需要考虑两个方向:。
    1. 从“发件人到服务器”,您必须使用服务器的公钥加密消息(假设使用公钥加密)。
    2. 从“发件人到收件人”,服务器将使用各自收件人的公钥加密每条消息(假设使用公钥加密)。但是,如果您考虑使用对称加密,那么对协议的一个很好的参考就是广泛使用的SSL/TLS协议。

  2. 对于端到端的安全通信,对于组消息很难实现,对于单个消息则更简单。这意味着发送方将使用预定义的加密密钥对消息进行加密,并且只有知道加密密钥的人才能解密该消息。与一个组共享预定义的加密可能会危及整个安全性。

一旦确定了框架类型,就可以向有效负载(即消息)添加附加信息,以确保存在身份验证、不可抵赖性、数据完整性等。一个很好的参考是SSL/TLS协议。

票数 3
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/14722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档