某天你打开 HomeAssistant,它突然"开口"提醒你:你的某个密码出现在泄露库里了。大部分人的第一反应不是改密码,而是一句——我什么时候同意让你查我密码的?
这个问题在 GitHub 上炸成了一场公共事件。

一切从一条 issue 开始。UTC 时间 10 月 16 日晚(北京时间凌晨),用户 Viss 在 HA 文档仓开了 issue #49314:我从未授权任何集成扫描我的秘密并外发,哪怕发出去的是哈希。他甩出两个问题:怎么关?为什么不改成 opt-in?GitHub
维护者的第一轮答案是关闭。核心成员 frenck 回复:这不是侵犯隐私,1Password 也这么干,密码原文从不出本机。issue 关闭,时间戳 19:15。用户不服,19:56 等来的是七个字:"won’t fix,抱歉。"20:14 二次关闭,措辞更硬:威胁没有用,卸载 fork 请便,反正是开源。GitHub
然后 116 分钟,剧情反转。这条 issue 被转上 Hacker News(目前 251 分、236 条评论),21:11,frenck 回来换了个人:道歉——“我此前的回复比这件事应得的更轻慢”;交出关闭命令 `ha security options --pwned=false`;并第一次完整披露机制。第一轮就想知道的答案,第四轮才给——他只是先选择了关门。GitHub
技术层面单说,这事真的不算偷听。检查在 Supervisor 里存在多年:把 add-on 配置中标记为密码的字段在本地算 SHA-1 哈希,只取前 5 个十六进制字符去泄露库 Have I Been Pwned 查前缀,拉回候选哈希在本机比对。服务器只见到一个 20 比特的前缀,反推不出密码,更反推不出是哪台设备——这叫 K-匿名性,Chrome、Firefox 用的是同款方案。争议不在数学,在程序:功能是真的,但没经同意就开着;开关也是真的,但文档里查无此事。这次炸锅,是因为近期版本把警告显性化了,用户第一次意识到"我的秘密在被扫描"。知乎GitHubHome Assistant 官网

给用户的三个动作。第一,不想被查,直接跑上面那条命令(仅适用于带 Supervisor 的安装)。第二,真收到泄露警告,先去改密码——出现在公开泄露库,意味着攻击者离你只差一步字典;换密码比骂维护者实惠。第三,盯两个后续:官方文档已经把关闭 pwned 检查单独成节写进了文档页。而功能是否按 Viss 的要求改成 opt-in,至今没有答复。Home Assistant 官网
比技术对错更值得咂摸的,是评论区。有白帽当场盖楼:"是的,它就是侵犯隐私。“有老用户说"我替他感到被冒犯”,要求重开 issue。也有正要下单 Home Assistant Green 的玩家停在事件面前,说自己犹豫的不是把哈希发给 HIBP,而是 GitHub 上这 116 分钟的回应。当然也有反驳声:有评论认为开发者已经克制、反倒是用户无礼。两边都有人,共识没打出来。GitHubHacker News

边界也要划清:Viss 的红队身份系自述、未经独立核实。“渗透进 HA 仓库就能滥用这套机制"是 issue 作者的理论担忧,不是已证实漏洞;GDPR 违法论出自评论区猜测,同楼就有多人反驳"哈希前缀不构成个人信息”。证据到这里,结论只能到这里:功能清白,治理翻车。知乎Hacker News
对把整个家交给开源项目的人来说,这次事件最实用的遗产是:去翻一翻一个项目关闭 issue 的方式和措辞——那里藏着的治理文化,比 README 诚实。