Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于loginserver模板的问题 #1335

Closed
donneyluckS opened this issue Jan 27, 2021 · 7 comments
Closed

关于loginserver模板的问题 #1335

donneyluckS opened this issue Jan 27, 2021 · 7 comments

Comments

@donneyluckS
Copy link

donneyluckS commented Jan 27, 2021

1111

最近在学习skynet
学习到了dh算法 了解到中间人攻击
请问这个登录流程中是怎么防范中间人攻击的呢?
我理解的好像并没有防范住
麻烦请大佬解答一下 不甚感谢

@firedtoad
Copy link

firedtoad commented Jan 27, 2021 via email

@donneyluckS
Copy link
Author

donneyluckS commented Jan 27, 2021

challange 这一步骤被你吃了么?? donneyluck notifications@github.com 于2021年1月27日周三 下午5:45写道:

challange 不是一样会被中间人拿到吗?
那第4步校验的时候 中间人拿跟服务器产生的密钥 加密challange 不就可以验证通过

@cloudwu
Copy link
Owner

cloudwu commented Jan 28, 2021

防范中间人攻击一般需要一个中间可信机构(签发证书),这里没有。

但是有另外一个简单的方法,就是依赖一个两边都知道,中间人不知道的秘密。比如用户自己设定的密码(加盐 hash 过)

这里的模版没这么做是因为这个模版假设真正的认证不在这里,也就是登录服务并不知道密码这个秘密。

但你可以自己简单扩展后续:登录服务给你的是一个 key 用于加密,你可以用这个 key 混入密码 hash 得到新 key 。因为密码并没有在网络传输,所以中间人不知道;但服务器依然可以做一样的操作。

@firedtoad
Copy link

firedtoad commented Jan 28, 2021

第四步 中间人不知道计算 hmac 使用的额外参数 无法计算出正确的challange
换句话说 计算hmac不一定要用 sharesecret

@donneyluckS
Copy link
Author

donneyluckS commented Jan 28, 2021

第四步 中间人不知道计算 hmac 使用的额外参数 无法计算出正确的challange

换句话说 计算hmac不一定要用 sharesecret

明白两位大佬的意思了
还是需要一个客户端和服务器约定好的额外参数来做校验
那么 这个登陆流程中的dh加密意义是什么?后续加密用吗?那为何不用其他方式加密一步到位(反正会用对称加密 或者 rsa)或者说选用dh加密有什么优势吗?麻烦解答一下 懂得不多 见谅

@firedtoad
Copy link

firedtoad commented Jan 28, 2021 via email

@cloudwu
Copy link
Owner

cloudwu commented Jan 28, 2021

DH 交换秘密是为了做到一次一密,这样不会因为后来的泄密导致前面的加密全部被解密。DH 交换不解决中间人攻击问题。中间人攻击是个独立需要解决的问题。

简单说就是:你不可以把所有安全问题都依赖在同一个东西(比如单个共享秘密/用户密码)上面。这个道理在很多方面都成立。例如,如果你想保存密码让用户下次不用输入密码登录。那么你不应该把密码保存在本地,而应该保存一个一次性认证 token 在本地,让这个 token 得到用户密码的授权。

@cloudwu cloudwu closed this as completed Jan 28, 2021
Repository owner locked and limited conversation to collaborators Jan 28, 2021

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants