如何为服务器身份验证编写私钥/公钥系统?

时间:2010-08-13 22:51:09

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

我想这可能已发布在某个地方,我进行了搜索,但找不到任何内容。

我有一台运行游戏服务器的服务器,我想要一些TCP服务器(可能用Ruby编写),它将提供一个伪会话,几乎没有可用的命令(比如重启游戏服务器,发送日志等。)

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

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

我在想的是:

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

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

如果我的问题不明确,我很乐意编辑我的帖子: - )。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

为什么不使用SSH而不是SSH?或者使用SSL,它对任何平台都有无处不在的库支持?

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

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

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

答案 2 :(得分:2)

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

布鲁斯施奈尔的Applied Cryptography