【问题标题】:How would one write a private/public key system for a server authentication?如何为服务器身份验证编写私钥/公钥系统?
【发布时间】:2011-03-29 17:06:40
【问题描述】:

我猜这可能是在某个地方发布的,我搜索过,但找不到任何东西。

我有一个运行游戏服务器的服务器,并且我希望有一些 TCP 服务器(可能用 Ruby 编写)将提供一个伪会话,可用的命令很少(比如重新启动游戏服务器,发送日志等)

我想要的是一种类似 SSH 的身份验证,人们拥有公共和私人 DSA 密钥(我知道如何生成),并且公共密钥被服务器识别为正确的身份验证。

我不是在寻找代码实现,而是主要应该如何构建它。

我当时的想法是这样的:

  • [Client]连接服务器
  • [Server]发送公钥
  • [Client]发送用服务器公钥编码的公钥
  • [Server] 将密钥与授权客户端数据库进行比较
  • [Server] 生成会话密钥,使用客户端发布加密发送
  • [Client] 解码会话密钥并开始发送始终伴随会话密钥的消息

但我觉得这缺少了一些东西。特别是在查看 DSA 和 PK 系统时,我不断看到消息签名,但我不确定我是否理解它与使用 pub 密钥和会话密钥进行加密有何不同?

如果我的问题不清楚,我当然很乐意编辑我的帖子:-)。

【问题讨论】:

  • 不要忘记时间戳或随机数,以免受到重放攻击

标签: language-agnostic public-key private-key dsa


【解决方案1】:

为什么不使用 SSH,而不是类似 SSH?还是使用几乎无处不在的库支持任何平台的 SSL?

首先,它更容易。代码经过编写、测试、审查和维护。

其次,它更安全。如果您不明白为什么需要对消息进行签名,您还可能忽略什么?老实说,即使是经过大量审查的 TLS(SSL),在最近公开的重新协商错误中也存在严重缺陷。即使您知道自己在做什么,设计一个安全的协议也很困难。

顺便说一下,SSH 和 SSL 会为每个协议记录计算一个消息验证码,这样中间人就无法篡改消息内容。

【讨论】:

  • SSH 是不可能的,我不希望他们对机器有真正的 shell 访问权限。但是,我完全理解 SSL 的重点。出于某种原因,我认为不完全是这样。其实我也不知道X.509证书能起到PK系统的作用。然后我会调查一下,谢谢你指引我更好的方向!
  • @ThibaultMartin-Lagardette SSH 不必暗示“对机器的真正 shell 访问”。您可以将其限制为仅用于通信。
【解决方案2】:

如果您想要类似 SSL 的实现,那么为什么不直接使用 SSL?

【讨论】:

    【解决方案3】:

    如果您确实选择实施自己的安全层(这有时是正确的答案),那么需要注意很多微妙之处。首先阅读我认为关于该主题的最终坟墓:

    布鲁斯·施奈尔的Applied Cryptography

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 2015-08-20
      • 2012-10-27
      • 2014-07-31
      • 2013-10-08
      • 2011-04-10
      相关资源
      最近更新 更多