Skip to content
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

自适应http与https,密码加密传输 #21

Merged
merged 3 commits into from Feb 26, 2023

Conversation

zanjie1999
Copy link
Contributor

@zanjie1999 zanjie1999 commented Feb 26, 2023

避免在使用http服务时使用https加载资源文件
密码加密传输,避免在http被抓包或是https中间人攻击
使用多次md5的中间值进行传输匹配,传输的内容与密码本身,配置文件中的md5都不同,避免撞库

@n0099
Copy link

n0099 commented Feb 26, 2023

#18 (comment)

<script src='//fastly.jsdelivr.net/npm/js-md5@0.7.3/build/md5.min.js'></script>
<script>
function md5zme() {
document.getElementById('password').value = md5(md5(document.getElementById('password').value))
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

两层甚至3层md5对于前端密码hash而言跟1层都是差不多不安全的
https://cmd5.com 这样的彩虹表早就算出了许多常见密码排列组合的hash
建议直接hmacsha256
提请四叶信安底层壬上壬上海贵族 FSF EFF 精神会员杨博文阁下 @yangbowen 立即评估如何在前端层正确地hash提交给后端的明文密码

@SomeBottle
Copy link
Owner

SomeBottle commented Feb 26, 2023

我看这样改了后,存放在OneDrive中的密码就是明文了。
看楼上的建议感觉可能还有改进的空间,不过我感觉这个小列表程序可能也不需要那么高的安全性。我明天再看看吧。

@zanjie1999
Copy link
Contributor Author

zanjie1999 commented Feb 26, 2023

我建议你在仔细看一看,这么做之后,配置里存的是明文密码的md5,传输的是明文密码md5再md5,框里输入的是明文密码
当然把md5加点盐或是换成别的加密方式那就更好了,不过我懒,感觉这样够了

@SomeBottle
Copy link
Owner

SomeBottle commented Feb 26, 2023

我建议你在仔细看一看,这么做之后,配置里存的是明文密码的md5,传输的是明文密码md5再md5,框里输入的是明文密码

再看了一眼,原来是套了两层,我先merge一下,后续有更改再说。
感谢贡献!

@SomeBottle SomeBottle merged commit 3106c80 into SomeBottle:master Feb 26, 2023
@yangbowen
Copy link

提请四叶信安底层壬上壬上海贵族 FSF EFF 精神会员杨博文阁下 @yangbowen 立即评估如何在前端层正确地hash提交给后端的明文密码

配置里存的是明文密码的md5,传输的是明文密码md5再md5,框里输入的是明文密码
当然把md5加点盐或是换成别的加密方式那就更好了,不过我懒,感觉这样够了

我认为客户端 hash 一遍,传给服务端,服务端再 hash 一遍,确实已经是比较不错的做法了。
客户端的这一遍用以在通信内容泄露时保护明文密码,服务器的这一遍用以在撞库时阻止攻击者直接发送泄露的 hash 作为验证凭据。

除了就是, MD5 不推荐,以及加盐很有必要。对常见密码的现有彩虹表是一个非常实际的威胁。而且在撞库的情况下,一个如此快速的 hash 算法意味着用户必须使用密码熵很高的密码(64位以上)才够安全,实际上密码熵通常是远远达不到的。
如果加盐的话只需要在客户端加一遍盐,服务端不需要。因为盐是为了保护 用户生成的密码 这一低熵秘密。客户端加盐的情况下,客户端传输的 hash(password, salt) 由于盐的存在已经是高熵的了,因而外侧 hash 并不需要再加一遍盐。
为保护低熵密码,实际不仅 MD5 ,就连其它安全的通用 hash 也是不太合适的。因为通用 hash 计算很快,穷举一个不大的密码空间耗时并不太长。为了更好的安全性的话推荐采用的不是 SHA-256 而是 Argon2 、 PBKDF2 、 bcrypt 等。

最后,“客户端发送(可能被 hash 的)秘密以向服务器验证身份”本身有不小的安全不足之处,具体来说就是攻击者截获了传输的信息的话直接重放该验证凭据(不论它是明文密码还是 hash 过的还是加盐的)就可以冒充。因此比它进一步改进的话就是 challenge-response 这样的验证方式。
然而基于 hash 的 challenge-response (信道不传输凭据等价物)跟上面提到的服务器端包一层 hash (服务器不存储凭据等价物)并不相容(想一想为什么!)。要兼顾这两项安全要求就是比上面说的全都更先进的 PAKE 的用武之地了。
另外,这些进阶的验证协议不论 challenge-response 还是 PAKE ,都要注意必须将身份验证被身份验证保护的通信关联起来,例如将后者的信道临时密钥用作验证信息的一部分。不能只是在匿名信道上“先身份验证,通过后允许操作”,否则中间人攻击者不难转发合法用户的身份验证后进行并非该合法用户传输的操作。

@n0099
Copy link

n0099 commented Feb 27, 2023

TL;DR: 没有银弹,能用就行

@n0099
Copy link

n0099 commented Feb 27, 2023

客户端的这一遍用以在通信内容泄露时保护明文密码,服务器的这一遍用以在撞库时阻止攻击者直接发送泄露的 hash 作为验证凭据。

所以大多数php小子都是无脑两层md5(md5()),然后被 https://cmd5.com 爆破

如果加盐的话只需要在客户端加一遍盐,服务端不需要

然而大多数实践都是服务端数据库里加盐,而不是服务端把数据库中存的每用户的盐传给客户端再让客户端自己hmac
而且又如何保证客户端获得盐的那次网络通信是安全的(没有mitm知道盐)?(更别说大多数人都选择直接在客户端获取登录态信息时每次都传输盐而不是让客户端本地缓存盐)

为了更好的安全性的话推荐采用的不是 SHA-256 而是 Argon2 、 PBKDF2 、 bcrypt 等。

php人最常用的是bcrypt,因为有自带的password_*()函数做这个,经典$2y$xx$xxxxxxxxGHSA-7fj2-8x79-rjf4

攻击者截获了传输的信息的话直接重放该验证凭据(不论它是明文密码还是 hash 过的还是加盐的)就可以冒充

然而带pm们缓解replay attack大多只是加了个只有客户端能生成的基于当时时间的随机数来保证客户端每个请求是唯一的,我也不知道这是不是掩耳盗铃

进一步改进的话就是 challenge-response 这样的验证方式。
然而基于 hash 的 challenge-response (信道不传输凭据等价物)跟上面提到的服务器端包一层 hash (服务器不存储凭据等价物)并不相容(想一想为什么!)

现实中的challenge:2FA 短信验证码 人脸识别 手持三件套,然后服务端还是存着您的明文密码(您也不知道贵司收集了您的个人信息后还是否对密码上心,很有可能两者都是无加密/混淆的,简简单单拖个库恶俗狗狂喜户籍满天飞)
四叶头子CS硕士PLT理论中级高手仏皇irol神对此早有预言: https://n0099.net/v/d/3408-wei-shi-yao-2faren-zheng-zai-li-hai-guo-wu-fa-pu-ji/47
于是我就被azure的mfa给锁住了: https://www.v2ex.com/t/910403#r_12614766

身份验证被身份验证保护的通信关联起来,例如将后者的信道临时密钥用作验证信息的一部分。不能只是在匿名信道上“先身份验证,通过后允许操作”,否则中间人攻击者不难转发合法用户的身份验证后进行并非该合法用户传输的操作。

经典CSRF
而实践中最常见最简单的实现就是服务端给客户端http response header set-cookie: php-session: xxxxx,这样客户端对所有后继请求都会隐式自动地在request header中附加这个session cookie

@zanjie1999
Copy link
Contributor Author

zanjie1999 commented Feb 27, 2023

奇怪的知识增加了
巧了,我也很久没写过php了,都在用py和go

@SomeBottle
Copy link
Owner

安全领域的水是真深啊
我觉得对于我这样一个耦合度较高的列表程序来讲,需要权衡 安全性 / 易配置性 / 程序效率 是比较难的一件事
(菜是原罪)
老实说我已经很久没怎么拿PHP写东西了

@n0099
Copy link

n0099 commented Feb 27, 2023

经典phper转golang兽的印记
image

@yangbowen
Copy link

TL;DR: 没有银弹,能用就行

不。基于 PAKE 的协议应该是目前的顶尖水平,但是使用率非常低。我听说的只有暴雪战网是用 SRP 这个 PAKE 协议的,绝大部分场合都是直接用 HTTP/HTTPS 传输明文密码或密码的散列。但是 SRP 很老了,有些设计也不那么好。更新更好的 OPAQUE 目前还是 draft 。但总之 PAKE 才能提供传统方式不可能兼顾的一些安全性要求。事实上,

然而基于 hash 的 challenge-response (信道不传输凭据等价物)跟上面提到的服务器端包一层 hash (服务器不存储凭据等价物)并不相容(想一想为什么!)。要兼顾这两项安全要求就是比上面说的全都更先进的 PAKE 的用武之地了。

对称加密(AES)、散列(SHA-256)、非对称加密(RSA)、数字签名(RSA、DSA)这些传统的密码学原语全都不具有同时实现以上两项要求所需的数学结构, PAKE 是基于 离散对数 的原理发明不同于 TLS 所使用的那些的新的计算方式的。

@yangbowen
Copy link

yangbowen commented Feb 27, 2023

然而大多数实践都是服务端数据库里加盐,而不是服务端把数据库中存的每用户的盐传给客户端再让客户端自己hmac
而且又如何保证客户端获得盐的那次网络通信是安全的(没有mitm知道盐)?(更别说大多数人都选择直接在客户端获取登录态信息时每次都传输盐而不是让客户端本地缓存盐)

是的,这也是属于非 PAKE 的传统方式不可能顾及的问题。它甚至不在于客户端获得盐的那次网络通信是安全的——攻击者只需要作一次失败的登录尝试就知道盐了。更广泛地说,一旦客户端向服务器展示与密码有相当于一一对应关系的信息(如 hash(password) )就意味着攻击者可以凭这一信息穷举密码;然而客户端计算验证响应所需的额外信息(如 salt )一旦被服务器展示给客户端就意味着攻击者仍旧掌握了用于切断上述一一对应关系的信息。所以这在传统方式下是无法解决的问题。


在服务端加盐,意味着在以下情况下,攻击者能够对密码展开有效的(不受登录尝试次数限制的)穷举:

  • 获得服务器数据库。此时,由于它有盐保护,因此无法使用预计算的彩虹表。由于服务器必须能够验证客户端身份,而能够验证就必然能够验证穷举是否正确,因此这种情况无法避免地允许攻击者展开穷举。
  • 获得合法用户在一次登录尝试中的(单向)通信内容。此时,由于它是 hash(password) 没有盐保护,因此可以使用(不针对某一用户)预计算的彩虹表。

且在以下情况下,攻击者直接能够冒充合法用户进行登录:

  • 获得合法用户在一次登录尝试中的(单向)通信内容。直接重放这一信息即可。

在客户端加盐,意味着在以下情况下,攻击者能够对密码展开有效的穷举:

  • 获得服务器数据库。此时,它跟密码之间仍然隔了一层盐,无法使用预计算的彩虹表。它跟客户端的验证响应(传输这一信息即可通过验证)之间没有盐,但由于这一信息本就是 hash(password, salt) 因此需要进行 infeasible 的哈希原像才能取得。
  • 获得合法用户在一次登录尝试中的(来回)通信内容。此时,由于它是 hash(password, salt) ,因此无法使用预计算的彩虹表。
  • 先对若干用户作失败的登录尝试,此后的某一时机获得服务器数据库。先前的失败登录尝试中即可得知 salt 的值,从而可以(在成功攻破服务器数据库之前)展开穷举并生成彩虹表。利用这一彩虹表可以在攻破数据库之后很快得知这些用户的密码,虽然计算的总量并没有减少。针对这种攻击,只有在服务器一侧加盐才能避免。但由于每个用户的 salt 是不同的,所以这种攻击意味着对每个用户要分别展开预计算。应当只有高价值用户(例如已知是其它网站的管理员的用户)才会受到这种昂贵的攻击。

且在以下情况下,攻击者直接能够冒充合法用户进行登录:

  • 获得合法用户在一次登录尝试中的(单向)通信内容。直接重放这一信息即可。尽管它是 hash(password, salt) ,但 salt 并不会改变。这种攻击至少需要 challenge-response 才能杜绝。

顺带一提,对于以上所有情况除了获得服务器数据库后展开每用户的暴力穷举, challenge-response 杜绝只取得通信内容即可冒充,因而适宜非加密的信道;而 PAKE 避免全部。

@n0099
Copy link

n0099 commented Feb 27, 2023

所以四叶信安底层壬上壬上海贵族 FSF EFF 精神会员杨博文阁下认为PAKE是后量子时代下唯一幸存的信安场景一揽子解决方案?

直接用 HTTP/HTTPS 传输明文密码或密码的散列

然而事实核查:截止2023年3月,以ra3日冕mod开发组长上海贵族伊欧神为代表的现代前端娱乐壬上壬们仍在高强度https传输明文密码,并在用户密码泄露时指责是用户的网络环境不安全没挂vpn所以才会被mitm攻击
如同经典指责被强奸女性穿太少而不是强奸犯即受害者有罪论 https://en.wikipedia.org/wiki/Victim_blaming

以上两项要求

哪儿两项?保护低熵密码和防止replay attack吗?

PAKE 是基于 离散对数 的原理

https://en.wikipedia.org/wiki/Discrete_logarithm#Cryptography 进一步指出

存在计算离散对数显然很困难的组。在某些情况下(例如组 ( Z p ) ×的大素数阶子群),不仅没有针对最坏情况的有效算法,而且平均情况的复杂度可以证明与使用随机的最坏情况一样难自还原性。[4]
同时,离散取幂的反问题并不难(例如,可以使用平方求幂来有效计算)。这种不对称类似于整数分解和整数乘法之间的不对称。这两种不对称性(以及其他可能的单向函数)都已在密码系统的构造中得到利用。
离散对数密码学(DLC) 中群G的流行选择是循环群 ( Z p ) ×(例如ElGamal 加密、Diffie–Hellman 密钥交换和数字签名算法)和有限域上的椭圆曲线的循环子群(参见椭圆曲线密码学)。
虽然通常没有解决离散对数问题的公知算法,但数域筛选算法的前三步仅依赖于群G ,而不依赖于G中需要有限对数的特定元素。通过为特定组预先计算这三个步骤,只需要执行最后一步,这比前三个步骤的计算成本要低得多,以获得该组中的特定对数。[5]
事实证明,许多 Internet 流量使用的是少数 1024 位或更少位的组之一,例如,具有 RFC 2409 中指定的 Oakley 素数顺序的循环组。[6] Logjam 攻击利用此漏洞破坏了各种允许使用顺序为 512 位质数的组的 Internet 服务,即所谓的出口等级。[5]
Logjam攻击的作者估计,解决 1024 位素数的离散对数问题所需的更困难的预计算将在美国国家安全局(NSA)等大型国家情报机构的预算范围内。Logjam 的作者推测,针对广泛重复使用的 1024 个 DH 素数的预计算是NSA 泄露的文件声称 NSA 能够破解当前大部分密码学的原因。[5]

TLS 所使用的那些的新的计算方式

那tls又用的啥?ECDH?可tls不是一系列可用加密算法(包括ECC系列)的组合标准吗?

@n0099
Copy link

n0099 commented Feb 27, 2023

攻击者只需要作一次失败的登录尝试就知道盐

为什么?

  • 先对若干用户作失败的登录尝试,此后的某一时机获得服务器数据库。先前的失败登录尝试中即可得知 salt 的值,从而可以(在成功攻破服务器数据库之前)展开穷举并生成彩虹表

盐不是每用户设置的吗?不论是仅服务端知晓(服务端加盐)还是服务端客户端都知晓(客户端加盐)
所以对于客户端加盐(服务端提前将每用户的盐传给客户端,比如在用户输入用户名后)场景,攻击者自然也可以在输入用户名后就得知用户的盐
我想起来MSFT那交互稀烂的企业级SSO系统 https://account.microsoft.com 就是在输入用户名后需要等待网络请求才能输入密码(UX上是第一页对话框输入用户名,等待跳转到第二页时才能输入密码),所以MSFT自己用的这套Active Dictionary是客户端加盐模式?

如果在服务端和客户端都每用户加两种不同值的盐,是否能够同时避免上述两种模式的缺陷?还是反而会同时具有两种模式的缺陷?

challenge-response 杜绝只取得通信内容即可冒充,因而适宜非加密的信道

于是共同造就了以2FA 短信 活体 三件套为代表的challenge-response模式的不同本地化实现特色形态的信安现状:

四叶头子CS硕士PLT理论中级高手仏皇irol神对此早有预言: https://n0099.net/v/d/3408-wei-shi-yao-2faren-zheng-zai-li-hai-guo-wu-fa-pu-ji/47
于是我就被azure的mfa给锁住了: https://www.v2ex.com/t/910403#r_12614766

image
image

@yangbowen
Copy link

yangbowen commented Feb 27, 2023

然而带pm们缓解replay attack大多只是加了个只有客户端能生成的基于当时时间的随机数来保证客户端每个请求是唯一的,我也不知道这是不是掩耳盗铃

通过 TLS 信道进行身份验证的情况下,若下层 TLS 信道未受攻击,则 TLS 已经对重放攻击提供了防御措施,主要是 TLS 会话密钥的产生。我前面说的是当 通过明文信道进行身份验证通过 TLS 信道进行身份验证,但该信道被攻破 的情况。
虽然 TLS 本身是比较安全的,但 服务器证书私钥泄露成功颁发假冒的证书一部分服务端组件的安全漏洞导致了通信内容泄露 这样的情况可能更容易发生。

我不太懂您说的基于当时时间的随机数来保证客户端每个请求是唯一的是怎么一回事。该 nonce 如果在客户端生成那么必须传给服务端才能让服务端有办法完成计算,但如果服务端是从客户端取得的 nonce 那么攻击者也只需要连带着这个 nonce 一起重放;如果在服务端生成那么必须传给客户端才能让客户端有办法完成计算,这种情况实际上就是 challenge-response ,但这意味着服务端和客户端必须掌握同一个共享秘密(明文密码或者密码的 hash ),意味着服务器数据库只要泄露就可以直接利用里面的信息冒充合法客户端。


哪儿两项?保护低熵密码和防止replay attack吗?

  1. 即使您掌握服务器掌握的全部信息(即撞库),也无法利用该信息向服务器冒充您是合法用户,除非完成密码穷举
  2. 即使您掌握合法用户在一次身份验证中与服务器交换的全部信息,也无法利用该信息向服务器冒充您是合法用户,除非完成密码穷举

服务器端 hash 防 1 不防 2 。 challenge-response 防 2 不防 1 。而且您无法同时实现这两者因为 challenge-response 要求验证者(服务器)掌握相同的共享秘密。


那tls又用的啥?ECDH?可tls不是一系列可用加密算法(包括ECC系列)的组合标准吗?

通常的上网冲浪中使用的 TLS (例如你我现在与 https://github.com 通信所使用的 TLS )使用了对称加密(AES-128)、散列(SHA-256)、非对称加密(RSA)、数字签名(RSA或ECDSA)、密钥分发(DH或ECDH)中的若干个。
但它们的组合都不足以达成 PAKE 所达成的安全等级。 PAKE 通过更复杂的方式使用 DH 或 ECDH 下层的数学结构(有限数域或椭圆曲线群)。

事实上, TLS 也有 TLS_SRP 的 ciphersuite ,以及将来也会有 TLS_OPAQUE 。但用于 TLS 的情况下是类似于 TLS 客户端证书那样的用法,我几乎没见过哪个网站用 TLS 客户端证书。想来网站设计者大概也会更多想自己设计用户验证的 UX 而不是交给浏览器。

@yangbowen
Copy link

盐不是每用户设置的吗?不论是仅服务端知晓(服务端加盐)还是服务端客户端都知晓(客户端加盐)

客户端加盐的情况下,客户端必须知道盐才能完成计算;可是在客户端完成计算前验证不可能完成,所以服务端必须向尚未验证其身份的客户端展示盐的值。因此,攻击者只需要作一次失败的登录尝试,就可以知道这个用户的盐是多少,就可以开始计算针对这个用户的彩虹表,并在将来攻破数据库之后快速(早在服务端管理人员反应过来之前)破解该用户的密码。

所以MSFT自己用的这套Active Dictionary是客户端加盐模式?

我不晓得。

如果在服务端和客户端都每用户加两种不同值的盐,是否能够同时避免上述两种模式的缺陷?还是反而会同时具有两种模式的缺陷?

能避免,但仍然达不到 PAKE 的安全等级。不加盐相当于加空的盐,所以不存在加了盐反而更不安全了。


但是您在别人的 repo 上 spam 无关信息,真的好吗?

@yangbowen
Copy link

yangbowen commented Feb 27, 2023

四叶头子CS硕士PLT理论中级高手仏皇irol神对此早有预言: https://n0099.net/v/d/3408-wei-shi-yao-2faren-zheng-zai-li-hai-guo-wu-fa-pu-ji/47

你说得对,但是您访问的页面不存在。


您也不知道贵司收集了您的个人信息后还是否对密码上心,很有可能两者都是无加密/混淆的,简简单单拖个库恶俗狗狂喜户籍满天飞

在目前这个现状当中,安全起见,用户应该假定网站对自己的密码不上心(假定网站就直接明文存储了自己的密码),而网站应该假定用户对自己的密码不上心(假定用户设置了很弱很好猜的密码)。

@n0099
Copy link

n0099 commented Feb 27, 2023

通过 TLS 信道进行身份验证的情况下,若下层 TLS 信道未受攻击,则 TLS 已经对重放攻击提供了防御措施,主要是 TLS 会话密钥的产生。我前面说的是当 通过明文信道进行身份验证通过 TLS 信道进行身份验证,但该信道被攻破 的情况。

tls的确自带防范基于网络层mitm抓包然后重放的replay attack,然而客户端层面可能本就不安全,经典高权限的chrome扩展监听所有请求然后上报给俄罗斯带黑阔(21年鸡血神密友上海贵族 @Juicpt 神被黑事件)
许多网站还懒得折腾https所以作为面向不特定多数人开发的程序(如同本repo)的开发者而言只能按最低要求合理假设用户还在http明文环境中

成功颁发假冒的证书

经典中国特色CNNIA 12306根证书 和360浏览器根证书计划 https://www.zhihu.com/question/306156963
应对:几个月前杨博文阁下于四叶zulip中向我科普的DNSCAA https://www.v2ex.com/t/913113
然而这本质上也只是CA之间的君子协议,(国家级)攻击者要伪造证书并用于被攻击者的tls信道中还需要遵守什么OCSP CT CCA

一部分服务端组件的安全漏洞导致了通信内容泄露

经典老程序用着静态编译嵌入的还受到 https://en.wikipedia.org/wiki/Heartbleed 影响的远古版本openssl 1.0.1a

我不太懂您说的基于当时时间的随机数来保证客户端每个请求是唯一的是怎么一回事。该 nonce 如果在客户端生成那么必须传给服务端才能让服务端有办法完成计算,但如果服务端是从客户端取得的 nonce 那么攻击者也只需要连带着这个 nonce 一起重放;如果在服务端生成那么必须传给客户端才能让客户端有办法完成计算,这种情况实际上就是 challenge-response ,但这意味着服务端和客户端必须掌握同一个共享秘密(明文密码或者密码的 hash ),意味着服务器数据库只要泄露就可以直接利用里面的信息冒充合法客户端。

经典鸡生蛋问题,我说的nonce主要是指为了防范csrf中的replay attack用的csrf token,如百度贴吧的tbs和wordpress的wp-nonce,但很明显他们也只能防范csrf这种场景下的replay attack

  1. 您掌握服务器掌握的全部信息(即撞库),也无法利用该信息向服务器冒充您是合法用户

为什么?如果攻击者知晓了某用户的密码hash和salt,那他不就可以模仿客户端的网络协议传输hmac(hash+salt)从而通过服务端的验证了吗?

  1. 您掌握合法用户在一次身份验证中与服务器交换的全部信息,也无法利用该信息向服务器冒充您是合法用户

这是replay attack的推广?

challenge-response 要求验证者(服务器)掌握相同的共享秘密

这也是为什么事实上

贵司收集了您的个人信息后还是否对密码上心,很有可能两者都是无加密/混淆的,简简单单拖个库恶俗狗狂喜户籍满天飞

带数据巨头都是明文存储着您的手机号身份证三件套的,否则他们不可能对您的challenge结果进行验证
如同传统密码场景中服务端也必须知道您的密码,只不过后来引入了套一层hash来避免明文存密码的拖裤风险
而身份证号或许可以hash,但手机号hash了您怎么发短信?电信运营商又不会提供根据号码hash发短信打电话的服务(尽管很明显技术上运营商完全可以实现这种服务,但您指望全球范围内各个垄断僵化的运营商去改造老旧系统以迎合互联网企业的特定需求?)

通常的上网冲浪中使用的 TLS (例如你我现在与 github.com 通信所使用的 TLS )使用了对称加密(AES-128)、散列(SHA-256)、非对称加密(RSA)、数字签名(RSA或ECDSA)、密钥分发(DH或ECDH)中的若干个

如果我的四叶计网小册子第三章第10节没有背错的话,tls在握手(client/serverhello包)阶段会协商使用什么协议-密钥的排列组合(即ciphersuite)然后通过dh分发rsa的密钥,第二轮roundtrip中再对rsa公私钥进行验证(因为第一轮hello是明文的所以可能有mitm),通过后后续通信都用aes加密(如果所有后续包传输都继续用rsa太吃cpu,所以退化到使用rsa握手时产生的密钥来算aes以兼顾安全和性能)

但它们的组合都不足以达成 PAKE 所达成的安全等级。 PAKE 通过更复杂的方式使用 DH 或 ECDH 下层的数学结构(有限数域或椭圆曲线群)。

pake在数学上使用什么工具作为构造他的安全性基础的形式化论证跟这个工具能实现什么没有必然联系,不然为什么用于密钥分发的dh就不能实现pake呢?
所以到底何谓pake?enwiki条目只是复制粘贴了一堆学术八股文堆砌密码学术语

事实上, TLS 也有 TLS_SRP 的 ciphersuite ,以及将来也会有 TLS_OPAQUE 。但用于 TLS 的情况下是类似于 TLS 客户端证书那样的用法,我几乎没见过哪个网站用 TLS 客户端证书。

tls的密码学武器库中给用户提供了什么工具和用户能否在浏览器环境中使用他们也没有联系,那几个浏览器垄断寡头们真的实现了这些吗?建议检查 https://chromestatus.com 并前往 https://crbug.com 提issue
即便实现了对用户而言有合理的UX来进行操作吗?就像http basic auth的那个经典对话框
image
image
有多难看且完全无法自定义(浏览器厂商爱弄成什么样什么样),这也说明了您的

想来网站设计者大概也会更多想自己设计用户验证的 UX 而不是交给浏览器。

@n0099
Copy link

n0099 commented Feb 27, 2023

客户端加盐的情况下,客户端必须知道盐才能完成计算;可是在客户端完成计算前验证不可能完成,所以服务端必须向尚未验证其身份的客户端展示盐的值。因此,攻击者只需要作一次失败的登录尝试,就可以知道这个用户的盐是多少

也就是我所举的例子

对于客户端加盐(服务端提前将每用户的盐传给客户端,比如在用户输入用户名后)场景,攻击者自然也可以在输入用户名后就得知用户的盐

本质上还是鸡生蛋问题

能避免,但仍然达不到 PAKE 的安全等级

避免哪些?所有杨博文阁下于 #21 (comment) 中所提到5大诉求吗?

您在别人的 repo 上 spam 无关信息

那杨博文阁下也可以选择立即自愿加入充斥着

的邪恶组织v2ex与各路泰国第几的计网信安中级高手们进行全自动抬杠: https://www.v2ex.com/t/909154?p=1#r_12582291
然后被纯路人当做是早期天网原型机的chatgpt bot举报给站长livid进行一个永的封
https://www.v2ex.com/t/919272#r_12745806
https://www.v2ex.com/t/909074#r_12583842
https://www.v2ex.com/t/908431#r_12573532
https://www.v2ex.com/t/908083#r_12566551

看你回复的语言格式,好奇问一下你是把 chatgpt 对接到了 V2EX 吗,然后用 V2EX api 进行自动回帖,因为你文风看起来挺像 chatgpt 的,你的回复里出现了大量的“您”,感觉一般网友不会这么说话。

四叶头子CS硕士PLT理论中级高手仏皇irol阁下 @kokoro-aya 对此现状早有预言: https://www.v2ex.com/t/919112#r_12743337 https://twitter.com/alicenychto/status/1629827793126031360

@n0099
Copy link

n0099 commented Feb 27, 2023

四叶头子CS硕士PLT理论中级高手仏皇irol神对此早有预言: n0099.net/v/d/3408-wei-shi-yao-2faren-zheng-zai-li-hai-guo-wu-fa-pu-ji/47

你说得对,但是您访问的页面不存在。

来丶音游圈垃圾话:

你说的对,但是《你说的对》是由你说的对自主你说的对的一你说的对的全新你说的对。你说的对发生在你说的对个被你说的对「你说的对」的你说的对,在你说的对,被你说的对选中的你说的对将被你说的对「你说的对」,你说的对你说的对。你说的对将你说的对一位你说的对的为「你说的对」的你说的对,在你说的对的你说的对中你说的对你说的对、你说的对的你说的对们,和你说的对一起你说的对,找回你说的对——同时,逐步你说的对「你说的对」的你说的对。

你说的对 但是《Linux》是由​Linu​s自主研发的一款全新开放源代码操作系统内核。使用该内核的系统运行在一个被称作「ext4」的文件系统,在这里被Kernel选中的人将被授予「Terminal simulator」,引导Shell的力量。你将扮演一位名为「Root」的神秘用户,在自由的使用中邂逅不同开源协议、各有千秋独特的桌面环境和各种软件们,和它们一起服务器运维,找回丢失的软件包的同时,逐步发掘「/dev/null」的真相。

你说得对,但 #21 (comment) 中对此登录可见的讨论串的长截图中就有着数月前杨博文阁下的身影
想必阁下早已采取与于2022年11月自愿退出邪恶组织四叶重工的 https://n0099.zulipchat.com 实例时销毁自己登录凭证(改随机密码并忘记)的相同方式彻底废弃了 https://n0099.net/v 的flarum用户账号

您也不知道贵司收集了您的个人信息后还是否对密码上心,很有可能两者都是无加密/混淆的,简简单单拖个库恶俗狗狂喜户籍满天飞

在目前这个现状当中,安全起见,用户应该假定网站对自己的密码不上心(假定网站就直接明文存储了自己的密码),而网站应该假定用户对自己的密码不上心(假定用户设置了很弱很好猜的密码)。

而当下流行的0信任模型 https://en.wikipedia.org/wiki/Zero_trust_security_model 也就是对这种恶俗互联网信安现状的无米线推广

@yangbowen
Copy link

yangbowen commented Feb 27, 2023

为什么?如果攻击者知晓了某用户的密码hash和salt,那他不就可以模仿客户端的网络协议传输hmac(hash+salt)从而通过服务端的验证了吗?

不能。在 hash(hash(password, salt)) 这种方案当中,服务器数据库存储 hash(hash(password, salt)) ,但客户端必须传输 hash(password, salt) ,所以攻击者知晓了 hash(hash(password, salt)) 也必须做一轮穷举才能冒充用户。

这是replay attack的推广?

是的。在上面说的方案当中,如果攻击者取得了客户端传输的 hash(password, salt) 那么重放这个值就可以冒充了。

而身份证号或许可以hash,但手机号hash了您怎么发短信?电信运营商又不会提供根据号码hash发短信打电话的服务(尽管很明显技术上运营商完全可以实现这种服务,但您指望全球范围内各个垄断僵化的运营商去改造老旧系统以迎合互联网企业的特定需求?)

是的。身份证系统和 PLMN 完全可以实现得好得多,并杜绝相当一部分现实中的攻击,假如他们不是那么垄断僵化的话。
所以直到近几年还能听说所谓“伪基站盗取短信验证码”这种事,只能说落后得令人发指。

如果我的四叶计网小册子第三章第10节没有背错的话,tls在握手(client/serverhello包)阶段会协商使用什么协议-密钥的排列组合(即ciphersuite)然后通过dh分发rsa的密钥,第二轮roundtrip中再对rsa公私钥进行验证(因为第一轮hello是明文的所以可能有mitm),通过后后续通信都用aes加密(如果所有后续包传输都继续用rsa太吃cpu,所以退化到使用rsa握手时产生的密钥来算aes以兼顾安全和性能)

建议您立即单击 F12 找到当前连接使用的 ciphersuite 信息
image
并参见
https://security.stackexchange.com/questions/65622/client-server-encryption-technique-explanation-tls-ecdhe-rsa-with-aes-128-gcm-s
这个协议很复杂,这种复杂性不但导致更多的 round-trip 数(甚至先为 TCP 三次握手消耗 1.5RTT 再为 TLS 握手消耗更多 RTT ),也产生更多可以有漏洞的空间。比方说第一轮握手没有受到加密保护,于是在以前的版本当中攻击者可以让双方误以为对方只支持较弱的 ciphersuite
DH 和 ECDH 还有 x25519 用起来差不多,只是基于不同的群。上图使用 NIST P-256 群进行 ECDH 。分发的不是rsa的密钥,分发的是一个为本会话产生的临时秘密。双方各自产生一个随机数贡献到这个临时秘密当中,且不会(即便加密地)向对方告知自己的随机数,但双方能得到相同的临时秘密。后续通信使用的对称密钥由这个临时秘密 HKDF 得到。这样有一个好处就是所谓 前向安全
顺带一提,为了省 CPU 后续通信不但避免 RSA 这样的非对称操作,而且可以连 SHA-256 都不做,采用只在 AES 基础上增加相对较快的有限域操作GCM。除了 AES-128-GCM 以外,在移动端较常见的 ChaCha20/Poly1305 也是类似的原理。

pake在数学上使用什么工具作为构造他的安全性基础的形式化论证跟这个工具能实现什么没有必然联系,不然为什么用于密钥分发的dh就不能实现pake呢?
所以到底何谓pake?enwiki条目只是复制粘贴了一堆学术八股文堆砌密码学术语

建议阅读 https://en.wikipedia.org/wiki/Secure_Remote_Password_protocol#Protocol 这部分。
既不同于 hash(hash(password, salt), salt2) 也不同于 challenge-response 。简单来说,在 PAKE 中,服务器掌握的信息可以用于验证客户端确实知道密码,但本身无法倒推出客户端在验证中需要传给服务器的信息
它里面最核心的是这个部分:
image
客户端知道x,服务端知道v。服务端用v验证客户端确实知道x,但v以及他们交换的信息都并不能倒推x
不知道b的情况下,客户端凭借x才能消掉B中的kg^x项,然后计算a+ux才能得到S;不知道a的情况下,服务端用v才能代替x算出跟客户端一样的值。所以如果双方算出了相同的S,那么双方都验证了彼此的身份(服务端知道客户端知道x,客户端知道服务端知道v,而通过信道中传输的信息既算不出x也算不出v也算不出S)。

@yangbowen
Copy link

yangbowen commented Feb 27, 2023

能避免,但仍然达不到 PAKE 的安全等级

避免哪些?所有杨博文阁下于 #21 (comment) 中所提到5大诉求吗?

能避免凭借服务端数据无需穷举即可冒充,也能避免凭借通信内容太容易(指使用通用的彩虹表)穷举到用户的明文密码。不能避免凭借通信内容即可冒充。
challenge-response 可以避免凭借通信内容即可冒充,但不能避免凭借通信内容即可展开穷举,也不能避免凭借服务端数据无需穷举即可冒充。


看你回复的语言格式,好奇问一下你是把 chatgpt 对接到了 V2EX 吗,然后用 V2EX api 进行自动回帖,因为你文风看起来挺像 chatgpt 的,你的回复里出现了大量的“您”,感觉一般网友不会这么说话。

顺便咱觉得就语言交流来讲您的智能程度以及类人程度并比不上 ChatGPT ,更像一个智能程度不高但并不会经常错误理解人类语言的 chatbot 。
我自己也做不到像 ChatGPT 一样像人就是了。


那杨博文阁下也可以选择立即自愿加入充斥着

* 刚转golang的phper现代前端娱乐圈 https://www.v2ex.com/t/919163#r_12742969

* 润学头子皮条客移民偷渡急先锋 https://www.v2ex.com/t/919339#r_12745853

* 焦虑35危机的阿里外包javaer https://www.v2ex.com/t/918657#r_12736833

* chatgpt novelai带革命大潮下的矩阵异常引路人[neo](https://matrix.fandom.com/wiki/Neo) https://www.v2ex.com/t/919198#r_12744596

的邪恶组织v2ex与各路泰国第几的计网信安中级高手们进行全自动抬杠: https://www.v2ex.com/t/909154?p=1#r_12582291 然后被纯路人当做是早期天网原型机的chatgpt bot举报给站长livid进行一个永的封 https://www.v2ex.com/t/919272#r_12745806 https://www.v2ex.com/t/909074#r_12583842 https://www.v2ex.com/t/908431#r_12573532 https://www.v2ex.com/t/908083#r_12566551

看你回复的语言格式,好奇问一下你是把 chatgpt 对接到了 V2EX 吗,然后用 V2EX api 进行自动回帖,因为你文风看起来挺像 chatgpt 的,你的回复里出现了大量的“您”,感觉一般网友不会这么说话。

这个咱倒是暂时没有这样的打算。

@n0099
Copy link

n0099 commented Feb 28, 2023

不能。在 hash(hash(password, salt)) 这种方案当中,服务器数据库存储 hash(hash(password, salt))

您举的例子是服务端客户端分别两层hash,这是十分常见的场景(如同本pr的md5(md5())
我想说的是服务端没有第二层hash因此直接存储了客户端传来的hash(password, salt),所以对此场景在拖服务端裤mitm监听客户端后仍然可以replay attack
因此服务端不二次hash的安全性跟直接明文密码实际上差不多的不安全,在这里由于salt的存在使得攻击者无法在 https://cmd5.com 这样的预计算彩虹表中找出用户的原始明文密码,然而攻击者也并不需要知道明文密码就能伪装身份通过服务端鉴权造成危害了,除非攻击者知道用户全网都用统一密码所以想要拿去套别的网站撞库

#21 (comment) 对此也有阐述

  • 只有高价值用户(例如已知是其它网站的管理员的用户)才会受到这种昂贵的攻击。

近几年还能听说所谓“伪基站盗取短信验证码”这种事

然而利用2G 3G设计缺陷的伪基站降级攻击都算是有技术含量的了(攻击者至少需要采购硬件并在受害者附近部署)
21年潜入喷系头子反二雅士妖照实名/张钦瑞背后的贴吧盗号团队时的 @creeper9 曾向我阐述了夜蝶们是如何在纯软件层面就做到想害谁就害谁的恶俗罪恶行径:

  1. 查绑用户的手机号,然后去开户获得身份证号
  2. 如果用户的绑定手机号是某些省份的某些运营商(涵盖了大多数人口),合理假设用户没有前往营业厅修改过手机号的服务密码,便可使用身份证号末尾6位数作为默认服务密码登录运营商的网上营业厅
  3. 在网上营业厅中开启呼叫转移和短信转发服务,设置目标为攻击者控制的号码
  4. 在需要盗取的网络平台中使用短信验证码登录(大多数国产互联网带巨头都提供了免密验证码登录,并宣传这是为了用户安全的2FA)

用户由于短信和呼叫都被静默转发走因此他完完全全不知道验证码和异地登录(攻击者也可以使用用户所在省市(现在网络平台主动开示用户ip归属地后更容易知道了)的ip代理(灰产大量出售的家宽代理)登录以避免触发异地登录的额外验证和警告)的通知

只能说落后得令人发指

建议您立即单击 F12 找到当前连接使用的 ciphersuite 信息

建议直接curl或是wireshark抓十万甚至九万包进行深度包检测

$ curl -v https://github.com -o /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 20.200.245.247:443...
* Connected to github.com (20.200.245.247) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.2 (IN), TLS header, Certificate Status (22):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.2 (IN), TLS header, Finished (20):
{ [5 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [19 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [2459 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [78 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.2 (OUT), TLS header, Finished (20):
} [5 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=US; ST=California; L=San Francisco; O=GitHub, Inc.; CN=github.com
*  start date: Feb 14 00:00:00 2023 GMT
*  expire date: Mar 14 23:59:59 2024 GMT
*  subjectAltName: host "github.com" matched cert's "github.com"
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert TLS Hybrid ECC SHA384 2020 CA1
*  SSL certificate verify ok.
* Using HTTP2, server supports multiplexing
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
} [5 bytes data]
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
} [5 bytes data]
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
} [5 bytes data]
* Using Stream ID: 1 (easy handle 0x55eee275e550)
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
} [5 bytes data]
> GET / HTTP/2
> Host: github.com
> user-agent: curl/7.81.0
> accept: */*
>
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [57 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [57 bytes data]
* old SSL session ID is stale, removing
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
} [5 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
< HTTP/2 200
< server: GitHub.com

复杂性不但导致更多的 round-trip 数(甚至先为 TCP 三次握手消耗 1.5RTT 再为 TLS 握手消耗更多 RTT )

所以造成了十几年来的刻板印象之https比http更慢,事实上对于HTTP/1.1也的确是如此
于是以google为代表的浏览器垄断寡头们在15年推广 基于google内部研发的SPDY 的HTTP/2时人为施加了浏览器只能在https环境下升级到http/2而不是使用默认的http/1.1,造成了又一种刻板印象之http/2必须用于https,但事实上ietf rfc中完完全全没有将这两者进行捆绑,诸如curl的不受bigtech控制的http客户端们也都支持明文http中使用http/2(即h2c):
https://stackoverflow.com/questions/34076231/why-do-browser-implementations-of-http-2-require-tls
https://stackoverflow.com/questions/46788904/why-do-web-browsers-not-support-h2c-http-2-without-tls
https://security.stackexchange.com/questions/72295/why-wouldnt-it-be-great-if-http-2-would-only-allow-communication-via-tls
上述curl中有一句* ALPN, server accepted to use h2,这也是试图减少TCP-TLS-HTTP/2握手和协商全链路的RTT的一个方式: https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation
而反观目前计网界又迎来了仍然是由bigtech之google推动的http/3 udp化大潮

第一轮握手没有受到加密保护,于是在以前的版本当中攻击者可以让双方误以为对方只支持较弱的 ciphersuite

所以现在最新的tls1.3如何根本上避免了这种在tls握手阶段mitm拦截并重发伪造的握手包以要求双方使用已知不安全的ciphersuite的降级攻击?
我只知道在以前防范这种降级只能由https客户端(又是浏览器寡头们)在定期滚动更新中逐步废弃已知不安全的ciphersuite如经典RC4-MD5,然而这本身就要求了end user必须始终保持up-to-date,并对无法更新的用户(如我等win81遗民)造成了歧视:
image
进一步的,https客户端们逐步削减用户可能从密码学军火库中自由选择使用的排列组合本身就导致了目前绝大多数互联网https流量都是在用着那几个有限的ciphersuite,这种将过去和未来的安全性孤注一投于少数几个经过NSA钦点的密码学KOL们推崇的加密方式导致了如果未来某个常用ciphersuite被证明不安全后又要让https客户端推动服务端和用户们更换ciphersuite(如同千禧年后RC4-MD5被证明不安全,而当时https还只是少数企业级网站(经典EV证书image)的昂贵玩具),还造成了分析互联网流量的mitm可以通过分析统计明文tls握手包中的那些常见ciphersuite来假定https客户端具体是个什么(什么版本chrome/firefox/safari/curl,在什么系统上用着什么版本openssl)以构建庞大的特征数据库如 https://tlsfingerprint.io 并给以鸡血神密友上海贵族 @Juicpt 神位代表的高强度爪巴受到cloudflare等企业级WAF保护的网站带来困扰(然而反过来说如果每个https客户端都用着不同的ciphersuite虽然会导致难以通过tlsfingerprint裤子来假定https客户端的大类是什么,但却反而有助于利用更加庞大的特征裤子精确遥测跨域跟踪每一个独立的用户因为他们都在不同的环境中用着不同的ciphersuite,完全可以合理假设以google analytics和阿里友盟+为代表的带数据巨头们早已独立于WAF拦截非人类流量的用途建立了这样一种tracing方案去追踪人类流量)

后续通信使用的对称密钥由这个临时秘密 HKDF 得到。这样有一个好处就是所谓 前向安全

截止2023年3月,我仍未能完全理解早在21年就由 奥利金德c#头子 @CFPABot 作者osu!std中级高手 @Cyl18 所完全剖析了的tls forward secrecy

在 PAKE 中,服务器掌握的信息可以用于验证客户端确实知道密码,但本身无法倒推出客户端在验证中需要传给服务器的信息

因此即便服务端被拖裤后攻击者也无法从静态的数据库中得知客户端登录时的网络请求是什么样,除非他又去做爬在网线上的mitm监听服务端<->客户端流量
然而这里的无法倒推是何种程度上的(建议群论论证)?即便在最常见的服务端客户端两次hash方案中服务端被拖裤后攻击者同样无法得知客户端传输的那一层hash的结果是多少,除非他针对每用户salt计算彩虹表:

#21 (comment)

  • 由于每个用户的 salt 是不同的,所以这种攻击意味着对每个用户要分别展开预计算。应当只有高价值用户(例如已知是其它网站的管理员的用户)才会受到这种昂贵的攻击。

@n0099
Copy link

n0099 commented Feb 28, 2023

(服务端客户端加两次盐)能避免凭借服务端数据无需穷举即可冒充,也能避免凭借通信内容太容易(指使用通用的彩虹表)穷举到用户的明文密码。不能避免凭借通信内容即可冒充。
challenge-response 可以避免凭借通信内容即可冒充,但不能避免凭借通信内容即可展开穷举,也不能避免凭借服务端数据无需穷举即可冒充。

那么从杨博文阁下指明的这5大诉求来看,实际上对用户而言比较透明(用户仍然只需要使用传统的账密模式登录)的 服务端客户端都加两次盐 方案反而比时下流行的各种迫真challenge-response实现之2FA TOTP 短信验证码 生物识别 身份证号等特色贵物能够抵御更多的攻击场景
更别说杨博文阁下早已道明的:
#21 (comment)

这种情况实际上就是 challenge-response ,但这意味着服务端和客户端必须掌握同一个共享秘密(明文密码或者密码的 hash )

#21 (comment)

challenge-response 要求验证者(服务器)掌握相同的共享秘密

这也是为什么事实上

贵司收集了您的个人信息后还是否对密码上心,很有可能两者都是无加密/混淆的,简简单单拖个库恶俗狗狂喜户籍满天飞

带数据巨头都是明文存储着您的手机号身份证三件套的,否则他们不可能对您的challenge结果进行验证 如同传统密码场景中服务端也必须知道您的密码,只不过后来引入了套一层hash来避免明文存密码的拖裤风险

#21 (comment)

然而基于 hash 的 challenge-response (信道不传输凭据等价物)跟上面提到的服务器端包一层 hash (服务器不存储凭据等价物)并不相容(想一想为什么!)

现实中的challenge:2FA 短信验证码 人脸识别 手持三件套,然后服务端还是存着您的明文密码(您也不知道贵司收集了您的个人信息后还是否对密码上心,很有可能两者都是无加密/混淆的,简简单单拖个库恶俗狗狂喜户籍满天飞) 四叶头子CS硕士PLT理论中级高手仏皇irol神对此早有预言: n0099.net/v/d/3408-wei-shi-yao-2faren-zheng-zai-li-hai-guo-wu-fa-pu-ji/47 于是我就被azure的mfa给锁住了: v2ex.com/t/910403#r_12614766


您的智能程度以及类人程度并比不上 ChatGPT ,更像一个智能程度不高但并不会经常错误理解人类语言的 chatbot 。

mc+v圈皇帝梨木利亚 @limuness 于20年提出四叶是以他人反应为食的机器后又一泛银河系格雷科技分部陈意志第三帝国炼铜本部邪恶组织四叶重工本质ai说论断:

https://t.me/s/n0099official/1763

您上次说,您是以他人反应为食的。然而他人反应也分不同种类的吧?从您的行为当中,我估计您想看到的是我对您转发的别人的话气得跳脚,气急败坏地去对峙,那样比较有节目效果和观赏价值。但那是不会发生的。我首先是要满足自己。总之,我会作出的反应,对您来说可能没什么营养价值也并不美味。建议您不要浪费时间了。

https://t.me/s/n0099official/1683
image
image

https://t.me/s/n0099official/1715
image
image
image

https://t.me/s/n0099official/1727
image
image

https://t.me/s/n0099official/1738

杨博文阁下走后不必时时刻刻怀念他,维也纳阁下就是他,杨博文万岁!

然而杨博文以及杨博文阁下本身就只是个名字罢了。我显然不要求独占这一标识符,也不会介意您或者随便谁试图用这一标识符指向其它事物。我是杨博文是不依赖于我的名字叫“杨博文”的。

image
image

https://t.me/s/n0099official/1746
image
image
image
image


我自己也做不到像 ChatGPT 一样像人就是了

ChatGPT:变人——抖音百家号营销号文风配合VALL-E TTS服务读稿车轱辘话: https://www.v2ex.com/t/919096

这个咱倒是暂时没有这样的打算。

进一步的,杨博文阁下也可以选择借自musk收购twitter数月来的数字难民大潮自愿加入由奥利金德成员带数理学家可计算性理论中级高手当代图灵dc神的密友cj神于上周所自托管的基于activitypub协议fediverse概念之类mastodon日本本地化实现之misskey实例: https://m.chariri.moe/timeline

Repository owner locked as off-topic and limited conversation to collaborators Feb 28, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants