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

标签 python security authentication encryption cryptography

我们有一个自定义构建的程序,需要在客户端和服务器之间进行经过身份验证/加密的通信[均使用 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 验证客户端.

关于python - 自定义系统中基于 HTTP 的身份验证/加密协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3205349/

相关文章:

node.js - 如果用户未经过身份验证,则显示公共(public)逻辑 React JS 和 Node API

ruby-on-rails - 如何从 access_token 反向查找用户(Rails,Devise)

python - 如何从项目管道访问scrapy设置

python - PyQt 和 PySide 等成熟的软件包的术语是什么?

security - 存储信用卡信息

ios - 如何保护我的音乐应用程序下载的音乐文件?

php - Hybridauth 身份验证失败! Facebook 返回了无效的用户 ID

python - 如何在 Go 中实现 DllMain 入口点

python - 为什么我在请求同义词集时不能将 wn.ADJ_SAT 作为 pos 传递

security - 通过新的 TCP 连接重用 TLS session