a904guy/ZeroName
GitHub: a904guy/ZeroName
利用不可见 Unicode 字符将域名隐藏在可见名称中,通过解码即可追踪名称泄露来源的纯前端追踪工具。
Stars: 1 | Forks: 0
# ZeroName
[](https://a904guy.github.io/ZeroName/)
[](https://github.com/a904guy/ZeroName/stargazers)
[](LICENSE)
不可见的域名归属标签。
[](https://a904guy.github.io/ZeroName/)
ZeroName 使用不可见的 Unicode 码位,将网站的域名隐藏在一个可见的名称中。
你输入你的名字以及你要提供给它的网站,它会返回一个在屏幕上看起来一样,但包含
由密码短语生成密钥的隐藏 payload 的名称。如果该名称随后出现在垃圾邮件或泄露数据中,
将其粘贴到解码器中即可查看是哪个网站泄露了它。域名存储在标签中,因此无需维护
任何数据库或查找表。
它是一个单一的 `index.html` 文件:包含 HTML、CSS 和原生 JavaScript,没有框架、
构建步骤或外部请求。在浏览器中打开该文件即可运行。
## 使用说明
- 托管版本:https://a904guy.github.io/ZeroName/
- 本地版本:克隆此代码库并打开 `index.html`,或直接下载该文件。
## 编码原理
1. 将域名以 UTF-8 编码为字节。
2. 追加一个校验和字节,即所有域名字节的异或 (XOR)。
3. 从 `SHA-256(passphrase)` (通过 `crypto.subtle.digest`)派生一个密钥流,并在
整个 payload 中循环使用。
4. 将每个 payload 字节与对应的密钥流字节进行 XOR 运算。
5. 将每个字节映射到一个不可见的码位:`0–15` 映射到 `U+FE00…U+FE0F`(变体
选择符),`16–255` 映射到 `U+E0100 + (byte − 16)`(变体选择符补充)。
不可见字符被放置在可见字母之间的间隙中,从不在第一个字母之前,也绝不在
最后一个字母之后。它们均匀分布在这些间隙中,因此隐藏字符 `k` 会附加到
`floor(k × gaps ÷ payload)` 处的字母上。将 `linkedin` 编码进 `Noah` 会在
每个间隙放置三个不可见字节,从而得到 `N•••o•••a•••h`。
这种放置是单调的,因此隐藏字符会保持在 payload 中的顺序。解码过程按码位
读取字符串,按顺序收集这两段不可见范围,并解码该序列,因此字节在名称中的
具体位置并不重要。一个名称至少需要两个可见字符才能产生间隙;如果只有
一个字符,payload 会附加在其后。
由于 payload 仅保留单个副本,如果任何隐藏字符丢失,校验和就会验证失败。
密码短语是可选的。空白的密码短语会生成一个经过混淆但无密钥的标签。
## 注意事项
ZeroName 是一个归属追踪工具。它不提供加密或安全性保证。其加密方式是
重复密钥流 XOR,且该方案是公开的。这种标签仅在文本被原样保留的情况下才能存活,
例如电子邮件的问候语行、CRM 备注和数据泄露存档。NFKC 规范化、严格的输入
验证、OCR 以及重新录入都会破坏它。应将解码出的域名视为可能泄露来源的线索,
而非确凿证据。
## License
MIT。详见 [LICENSE](LICENSE)。
## 致谢
由 Andy Hawkins ([Hawkins.Tech](https://hawkins.tech)) 创建
标签:信息隐写术, 前端工具, 后端开发, 多模态安全, 密码学, 手动系统调用, 数据可视化, 数据防泄露, 纯前端, 网络安全, 隐私保护