免费工具

给消息签名

加密回答的是“谁能读”。签名回答的是另一个问题:“这真的是他写的吗”。用你的密钥给文字签名——任何拿到你公钥的人都能确认这条消息出自你,而且没有被改动。密钥不会离开标签页。

公钥可以给任何人,私钥永远不给任何人。

没有密钥?在“密钥”标签里生成一对——那里也能从口令推导出密钥。

密钥、文字和签名都不会发往任何地方:全部在这个标签页里计算。

在聊天里是什么样

签过名的消息就是你的文字,底下多了一行这样的东西: --404SIG1 密钥.签名。文字依然可读:签名什么都不藏,它只证明作者身份。收件人把整块复制下来,打开本页的“验证”标签,贴进去。

要复制的是整块,而不是单独的文字。签名是逐字节计算的:多一个空格、换行符不同、引号被自动替换——验证就对不上,尽管看上去完全一样。

签名不能证明什么

它证明文字出自某个密钥的主人,并且此后没有改动。它 不能 证明这个密钥属于自称的那个人:这要靠别的途径得知——网站、频道的置顶消息、名片。如果密钥和签名是同一条消息里发来的,验证就毫无意义:两样可以一起伪造。

相关工具: 用密码加密文字, 加密文件把秘密拆成几份.

密钥和文字我们都不保存

就像 VPN 本身不保存访问日志一样:真要交,也没有什么可交。

原理 →

常见问题

guest@404vpn:~$ cat sign-faq.md
[01] $ 签名和加密有什么不同?
> 加密把内容藏起来:只有拿到密钥的人能读。签名什么都不藏——文字仍然是公开的——但它一次证明两件事:写的人确实是密钥的主人,而且签名之后文字一个字符都没变。这是两件不同的事,而常常需要的正是后者。
[02] $ 发件人的公钥从哪里拿?
> 从已经用别的方式得到过确认的地方拿:公司网站、频道的置顶消息、名片。签名证明的是文字出自某个密钥的主人——至于这个密钥属不属于你要找的那个人,不是从签名里得知的。如果公钥和签名是同一条消息里一起发来的,验证就毫无意义。
[03] $ 文字明明一样,为什么签名对不上?
> 那就说明文字其实不一样。签名是逐字节计算的:末尾多一个空格、换行符不同、聊天软件自动替换了引号——验证就会老老实实地失败。所以要连签名行一起整块复制,而不是只复制文字。
[04] $ 可以不保存私钥吗?
> 可以从一段口令推导出来——这样就没什么需要保存的,记住口令就行。但那样盐对所有人都是一样的,否则密钥就无法重现:也就是说,弱口令直接等于可伪造的签名。用一段由互不相干的词组成的长口令——或者保存一个随机密钥,别依赖记忆。
[05] $ 你们会保存密钥吗?
> 不会。密钥、文字、签名都不保存:页面工作时不发任何网络请求。丢失的私钥我们也无法找回——它从来没在我们这里。