Skip to main content
 首页 » 编程设计

python之自定义系统中基于 HTTP 的身份验证/加密协议(protocol)

2025年05月04日15arxive

我们有一个自定义构建的程序,需要在客户端和服务器之间进行经过身份验证/加密的通信[均使用 Python]。

我们正在以非正统的方式从自定义编写的 Diffie-Hellman+AES 到 RSA+AES 进行大修。所以我会对关于我的想法的评论非常感兴趣。

前提条件:客户端有一个128位的RegistrationKey,需要在认证过程中保密——这个 key 也是服务器端和客户端之间唯一的共享 key 。

  1. 客户端通过不安全的 channel 联系服务器并询问服务器 RSA PubKey
  2. 然后客户端查询服务器:
    [伪代码如下]

 
       RegistrationKey = "1dbe665ac7a944beb67f106f779e890b" 
       clientname = "foobar" 
       randomkey = random(bits=128) 
       rsa_cp = RSA(key=pubkey, data=randomkey+clientname) 
       aes_cp = AES(key=RegistrationKey, data=RegistrationKey+rsa_cp) 
       send(aes_cp)<br/> 
3.服务器响应: [伪代码如下]
 
       # Server decrypts the data and sees if it has a valid RegistrationKey, if it does... 
       clientuuid = random(bits=128) 
       sharedkey = random(bits=128) 
       rsa_cp = RSA(key=privkey, data=clientuuid+sharedkey) 
       aes_cp = AES(key=randomkey[got from client], data= rsa_cp) 
       send(aes_cp) 
现在双方都知道客户端稍后可以用来验证自己的“clientuuid”、“sharedkey”。上面的方法应该是安全的,即使攻击者后来知道了注册 key ,因为他必须破解 RSA key 并且中间人攻击(在 RSA 上)应该停止身份验证。从正确完成。 我看到的唯一可能的攻击方法是攻击者知道注册 key 并且可以在身份验证期间更改流量的情况。我说的对吗?


我真的很想听听您关于从这个方法中添加/删除什么的想法,如果您知道进行这种交换的更好方法。
附言!我们目前正在使用 Diffie-Hellman(我自己的库,所以它可能有缺陷)并且我们已经尝试使用 PreSharedKeys 的 TLSv1.2(由于某种原因没有工作)并且我们被限制为 http 协议(protocol),因为我们需要在 Django 。因为我们在 http 中这样做,所以我们尽量保持请求/应答计数尽可能低(没有 session 是最好的)- 1 是最好的 :)

如果您对具体细节有任何疑问,请提出。

所以,加密/安全极客们,请帮帮我 :)

请您参考如下方法:

不要重新发明 wheal,使用 HTTPS。

服务器可以向客户端颁发证书并将它们存储在数据库中。客户端可以分发服务器的自签名证书进行验证。服务器可以使用 Apache's HTTPS Environment Variables 验证客户端.