我们有一个定制的程序,它需要在客户端和服务器之间进行经过身份验证/加密的通信(都是Python语言)。在
我们正在以一种非正统的方式从自定义编写的Diffie-Hellman+AES到RSA+AES进行全面检查。所以我对我的想法很感兴趣。在
前提条件:Klient有一个128位的注册密钥,在身份验证过程中它需要保持机密-这个密钥也是服务器和客户端之间唯一的共享机密。在
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)
三。然后服务器响应:
[后面是伪代码]
^{pr2}$
现在双方都知道“clientuuid”、“sharedkey”,客户机以后可以使用它来对自己进行身份验证。上面的方法应该是安全的,即使攻击者后来学习了regkey,因为他必须破解RSA密钥,中间人攻击(针对RSA)应该停止身份验证。无法正确完成。
我看到的唯一可能的攻击方法是攻击者知道regkey并可以在身份验证期间更改流量。我说的对吗?
我真的很想听听您的IDE,了解如何从这种方法中添加/删除什么,以及您是否知道一种更好的方法来进行这种交换。
PS!我们目前使用的是Diffie-Hellman(我自己的lib,所以可能有缺陷),我们已经尝试过使用PreSharedKeys的TLSv1.2(由于某些原因不起作用),我们被限制在http协议中,因为我们需要在django中这样做。因为我们在http中这样做,所以我们尽量保持请求/应答计数尽可能低(没有会话是最好的)-1将是最好的:)
如果您对具体细节有任何疑问,请提问。在
所以,你们这些加密/安全极客,请帮帮我:)
不。使用SSL。重新发明密码系统是个坏主意。在
您可以轻松地设置一个反向代理。在更高的端口(例如8080)上运行Django应用程序,并将其设置为仅响应来自环回地址(127.0.0.1)的连接。在端口443(标准HTTPS端口)上运行反向代理,并将所有请求代理到Django应用程序。但是使用站点的证书设置反向代理,并将其作为SSL端点。然后发送到Django应用程序的代理请求将只是“常规的旧”HTTP,而不是HTTPS。在
Apache Mod_Proxy
NginX as a Reverse Proxy
不要再发明风团,使用HTTPS。在
服务器可以向客户端颁发证书并将其存储在数据库中。客户端可以使用服务器的自签名证书进行分发以进行验证。服务器可以使用Apache's HTTPS Environment Variables验证客户端。在
相关问题 更多 >
编程相关推荐