Herkos

Herkos 隐私政策

最后更新:2026 年 10 月 29 日。规范网址:https://herkos.app/privacy

翻译说明。 这是出于便利提供的译文。如有出入,以英文版为准。

Herkos Mail、Herkos Calendar、Herkos Notes 和 Herkos Local Relay 是面向 Nostr 网络的自由开源应用,由 Herkos 项目(“我们”)发布。Herkos Calendar、Herkos Notes 和 Herkos Local Relay 仍在开发中。本文说明这些应用和我们的网站处理哪些数据、这些数据流向何处,以及谁能看到它们。我们希望它被认真阅读,而不是一扫而过:如果其中有任何内容让你感到意外,请写信到 privacy@herkos.email 告诉我们。

简要版本

留在你设备上的数据

浏览器里没有这样的安全存储。 密钥保存在站点的本地存储中,每次签名都会经过 JavaScript,因此能访问所有页面的扩展、XSS 漏洞或被篡改的部署都可能读到它;而且与已安装的应用不同,网页每次访问都会下发新的代码。使用网页版时,请使用远程签名器,或使用一个丢了也无所谓的身份。 - 你的邮箱:解密后的邮件、附件、标签、文件夹和联系人会缓存在本地数据库中, 以便应用离线可用。除操作系统提供的保护外,该数据库本身并未加密;应用锁 (PIN 或生物识别)是便利性的屏障,而非静态加密。在 Android 上,本应用已排除在 云备份和设备间备份之外。 - 应用锁的 PIN:以加盐并经过拉伸的哈希形式存储(PBKDF2),绝不以明文保存。 Herkos Calendar 和 Herkos Notes 各有自己的 PIN,以同样的方式存储。 - 你的日历(Herkos Calendar):你能读取的日程、列表、查看密钥和提醒会缓存在设备上, 并用保存在操作系统安全存储中的密钥逐条记录加密。在浏览器中,日历只保存在内存里, 每次都重新从中继获取。提醒由设备自己响起:Calendar 不使用任何推送服务器。如果你选择 在提醒中隐藏标题,提醒只会显示“日程”和开始时间。你的 Calendar 密钥与 Herkos Mail 的 分开保存(见 Calendar 一节中的“你的账户”)。 - 你的笔记(Herkos Notes):笔记、笔记的历史、笔记本和搜索索引会缓存在设备上,并用保存在操作系统安全存储中的密钥逐条记录加密。 在浏览器中,它们以同样的方式保存在浏览器为本网站提供的存储(IndexedDB)里,但密钥也在浏览器中:在别人也会使用的电脑上,这种保护作用有限。 如果浏览器不为本网站保存任何数据(隐私窗口,或网站数据被阻止),它们只保存在内存里,没有网络连接时无法写入。 你锁定的笔记会有自己的密码;没有这个密码,任何人都无法打开那条笔记,包括我们。 你的笔记备份是一个文件,只写入你保存它的位置,并用专属密码加密。 自动备份除非你关闭,否则每周生成一次,是设备上一个文件夹(你的“文档”中的 Herkos Notes/backups)里的文件,用你账户的密钥加密;保留最近五份,不会发送到任何地方(浏览器中没有自动备份)。 其他账户与你分享的笔记会在“收到的笔记”中等待,保存在设备上,与其他内容一样加密,直到你保存或丢弃它们。

你可以在设置 → 更多 → 重置应用中清除全部内容,或者通过移除某个账户来清除。

离开你设备的数据,以及去向

此表针对 Herkos Mail。Herkos Calendar、Herkos Notes 和 Herkos Local Relay 在下文各有单独的一节。

接收方 他们能看到什么 何时
Nostr 中继(默认列表见设置 → 网络,可编辑) 你的 IP 地址、公钥、你发布的事件(个人资料、中继列表、Blossom 服务器列表、NIP-32 标签、加密的设置),以及发给你的加密“gift wrap”及其时间。中继无法读取 gift wrap 的内容。 要求 NIP-42 认证的中继,即使你只是在读取,也会知道你的公钥。 应用同步期间始终如此。 在 Android 上,当后台检查代替推送服务器时,应用关闭时也会大约每 15 分钟询问一次。
Blossom 服务器(可编辑) 你的 IP 地址和公钥,以及大于 32 KB 的邮件及其附件的加密数据块。解密数据块的密钥只在加密邮件内部传递。 当你发送或打开大邮件时。
桥接服务(默认为 uid.ovh,可编辑) 你发送到传统地址(Gmail、Outlook 等)或从中收到的任何邮件的完整内容,以及你注册的别名 name@bridge。桥接服务是独立运营者,有各自的隐私条款;Herkos 不运营它们。 当你使用 @bridge 身份或写信到非 Nostr 地址时。
NIP-05 服务器(你输入的地址所属域名) 有人询问过 name@domain 是否为 Nostr 用户。 当你添加 user@domain 收件人时。
推送服务器(api.nmail.li,默认,由上游 Nostr Mail 项目运营;可在 设置 → 通知 中更换,也可以完全关闭) 你的公钥、设备推送令牌(UnifiedPush 端点)、通知语言,以及——因为它代你监视中继——你何时收到邮件(而非邮件内容)。 仅当你为某个账户开启通知时。关闭通知会请求服务器删除订阅。 更换服务器时,也会请求旧服务器删除订阅。
定时 DVM(由第三方运营的 Nostr 服务,参见 NostrConfig.schedulerDvm) 你的公钥、待发布的已加密邮件、其目标中继和计划时间。 仅当你使用“稍后发送”时。
远程签名器 / NIP-46 中继(relay.nsec.app 及备用) 你的公钥和加密的签名请求。 仅当你使用 bunker 或签名应用登录时。
图片服务器(个人资料或邮件所指向的任何服务器) 你的 IP 地址以及获取图片的时间。头像仅在你开启加载头像时,才会从其所有者在个人资料中填写的地址下载(你自己账户的头像始终会加载),此时运营该服务器的人可以知道你何时查看了对方的消息或联系人信息。邮件中的图片默认被拦截;一旦你加载它们(加载图片,或始终加载图片设置),它们的服务器(通常是发件人的服务器)就会知道你打开了该邮件以及打开的时间。你通过地址添加的背景图片会从该服务器下载。 头像:仅当你开启时(你自己的始终加载)。邮件图片:仅当你加载它们时。

Herkos 本身不会收到上述任何内容。没有崩溃报告,也没有遥测。

Herkos Calendar:中继能看到什么

Calendar 与 Nostr 中继通信:你账户的中继(你的 NIP-65 列表和收件箱列表)、设置 → 中继 中的中继(可编辑),以及在你邀请某人或回复邀请时,对方的收件箱中继。 除了你自己查询的内容(见下文),不与其他任何地方通信:也不与公开的中继索引通信。 下文的“你的账户”说明了每一类中继的用途。 没有 Herkos 服务器,没有推送服务器,也没有遥测。 每个中继都能看到你的 IP 地址和每次连接的时间。

内容 存储它的中继能看到什么 它们看不到什么
私密日程(kind 32678) 你的公钥、它是一个日历日程(其 kind)、一个随机标识符、你创建或最后修改它的时间,以及它的大致大小。它只存储在你的中继上,受邀者会到那里查找;从不存储在他们的中继上。 标题、日期和时间、时区、重复规则、地点、描述、受邀者、提醒。
你的日历列表(kind 32123)和提醒设置(kind 30078,d=calendar-alarms) 你的公钥、它们存在,以及它们何时变化。 它们包含哪些日程、它们的名称、查看密钥、你的提醒。
邀请(一个 gift wrap,kind 1059) 受邀者的公钥,以及一个表明信封里装的是日历邀请的 k=1052 标签(日历应用——包括 Formstr 的——正是靠它在不打开你邮件的情况下找到邀请)。它只发送到受邀者自己的收件箱中继,使用一次性密钥,带有各自随机化的时间戳;同一日程的各份邀请以随机顺序发出,每一份都比前一份晚 5 到 90 秒(第一份晚于日程本身)。信封还带有一个过期日期,在发送后 60 到 90 天之间随机选定,以便中继可以丢弃它:它不透露该日程的时间。 谁发送的、是哪个日程,以及还邀请了哪些人。
对邀请的私密回复(礼物包装,kind 1059,标签 k=1925) 接收者(组织者,或你自己副本中的你)的公钥,以及信封里装的是日历回复。它只发送到接收者的收件箱中继,使用一次性密钥、随机日期和过期日期,与邀请相同。 谁回复、回复哪个日程、回复了什么。
删除(kind 5) 你的公钥和你所删除内容的标识符。 —

要求 NIP-42 认证的中继会知道你的公钥;Calendar 只在涉及你自己中继上你自己的日程,以及读取你 自己的收件箱时,才响应此类请求。在 Nostr 上删除只是一个请求:中继可能保留其副本,仍为加密 状态。

日程里的任何内容都无法隐藏的是:每份邀请都从你的 IP 地址发出,而每位受邀者都从他们自己的 IP 地址到你的中继获取该日程。同时存放你多位受邀者收件箱的中继,可以看出他们的邀请来自同一个 地址。只有 Tor 或 VPN 能隐藏这一点。

你的账户

Calendar 不创建账户:你用已有的 Nostr 身份登录,方式有以下几种。

你的中继。 登录时,Calendar 会在 设置 → 中继 中的中继上查找你的列表(NIP-65,kind 10002,以及你的收件箱列表,kind 10050),使用一个不表明你身份的单独连接:要求认证的中继得到的是一次性密钥,而不是你的密钥。 此后:

受邀者的中继(2026 年 10 月 21 日决定)。要邀请某人,应用需要知道对方在哪里接收。 Calendar 只在 设置 → 中继 中的中继上查找对方的列表(10002 和 10050),从不在第三方的公开索引(例如 purplepag.es)上查找:那项服务会看到你发出询问的地址以及你在询问谁,也就是你邀请了谁。 每位受邀者都单独查找,顺序随机,各用一个带一次性密钥的独立连接,因此这些中继无法得知谁和谁一起被邀请。 它们能看到的是你的 IP 地址以及你查找的每个人的公钥。 如果某人的列表不在这些中继上,应用会在发送前将其标为“没有已知的收件箱”,邀请也不会送达对方。 要找到他们,请把他们发布列表的中继添加到 设置 → 中继 中。

在你的设备之间同步的内容,始终加密给你,存放在你的写入中继上:你的日历列表(及其日程的密钥)、提醒设置(d=calendar-alarms)、你关注的日历(d=calendar-subscriptions),以及你忽略的邀请或你从日历中移除的他人日程(kind 30078,d=calendar-declined:只有是哪个日程和何时,绝不包含其标题)。 中继能看到它们存在以及何时变化,但看不到其内容。 设备响起的提醒属于你当前登录的账户,绝不属于之前的账户。

你的密钥副本。 Calendar 会提议保存一份副本:一个包含你的日历列表及其日程密钥的文件,用你为它选择的密码加密(NIP-49 的加密方式)。 它只写入你保存它的位置,不会发送到任何中继或服务器。文件名带有日期,绝不带有账户。 为了提醒你备份,设备只记住两个日期:上一次保存副本的日期和上一次选择“以后再说”的日期。

退出登录时,会先向你显示将会丢失的内容,并提议保存副本。 然后从此设备上删除你的密钥(或 bunker 连接)和存储的日历。 已发布的内容仍以加密形式留在中继上。 你在签名应用中授予的权限,需要在该应用中撤销。

由你选择公开的内容

在你开启之前它们都是关闭的,并且在你开启之前,应用会显示每一项会透露什么:

Herkos Calendar 会读取其他应用针对你的公开日程写下的公开回复(RSVP,kind 31925,以及撤回, kind 84);这两种它都不写。

你自己查询的内容

这些连接只在你要求时发生:

Herkos Notes:中继能看到什么

Notes 只与 Nostr 中继通信,不与其他任何地方通信。 没有 Herkos 服务器,没有推送服务器,也没有遥测。 每个中继都能看到你的 IP 地址和每次连接的时间。

使用哪些中继。 如果你的账户有私密中继列表(kind 10013,即 NIP-37 所描述的列表),Notes 会按原样使用其中的中继,且从不覆盖它;它会在其设置中的中继以及你发布内容的中继(你的 NIP-65 列表)上查找这个列表。 否则,它使用其设置中的中继:默认为 relay.formstr.app、nos.lol 和 relay.primal.net,最多八个,全部可编辑。设置中还提供一份已知中继列表,点按一下即可添加;除非你添加,否则不会连接其中任何一个。 只有当中继位于本设备或家庭网络中(localhost、私有地址、.local 名称)时,它才可以使用 ws://,即不加密的连接:笔记仍以加密形式传输,但该网络上的任何人都能看到中继所能看到的内容(见下表)。 Notes 不发布自己的中继列表,除非你要求(中继 → 保存为我的私密中继列表)。 此时,它会把这些中继作为你的 10013 发布,用你的密钥加密,发布到它查找列表的同一批中继上,并随你在 Notes 中所做的更改保持更新:中继能看到你的公钥、这个列表存在以及它何时变化,但看不到其中的中继。 其他应用写入的列表从不会被覆盖:Notes 按原样使用它。 如果这些中继中有一个运行在此设备上(地址为 ws://127.0.0.1 或 ws://localhost,例如 Citrine 应用),Notes 也会在那里留下你的笔记、笔记本和删除请求的副本,保持签名时的原样,并且仍然是加密的。为此没有任何东西离开设备;Notes 从不从该中继读取,只有它保存的笔记不算已上传。设备上读取该中继的其他应用看到的,与任何中继看到的相同。

内容 存储它的中继能看到什么 它们看不到什么
笔记(kind 31234,NIP-37) 你的公钥;一个随机标识符(d),由随机数生成,绝不取自标题;标签 k=30023,每条笔记都相同,因此不透露你写了什么;你最后修改它的时间;以及它的大致大小。 标题、正文、标签、笔记本、是否置顶、是否收藏或是否在回收站中,以及你创建它的时间。
检查点(kind 1234),即笔记的历史 你的公钥、它属于哪条笔记(其标签 a 指向笔记的标识符),以及它的创建时间。 笔记当时的内容。
你的笔记本(kind 30078) 你的公钥、该列表存在,以及它何时变化。它的标识符由你的公钥派生,因此在你所有设备上都相同。 你的笔记本的名称、有多少个,以及每个笔记本里有哪些笔记。
删除(kind 5) 你的公钥和你所删除内容的标识符:笔记及其检查点。 —
你分享的笔记(kind 1059,一个 NIP-59 gift wrap) 它的接收账户的公钥(p);标签 k=30023;一个随机往前最多两天的日期;以及它的大致大小。它由一个专门为它生成、只用一次的密钥签名,而不是你的密钥。 谁发送的、何时发送的、它的标题和正文。里面是经过密封(kind 13)、只为那个账户加密的你的公钥和笔记:只有那个账户能打开它们,并会知道是谁发送的。

无法隐藏的内容。 笔记的 d 和 k 以及检查点的 a 必须可读:中继需要它们来用较新的版本替换笔记,并找到其历史。 因此,中继可以数出你有多少条笔记,并看到你何时编辑每一条以及编辑的频率。 Notes 让这些信息变得更粗略,但并非不可见:每条笔记在每个小时的编辑中最多保存一个检查点,关闭一条有改动的笔记时保存一个,解决冲突时双方各保存一个,绝不每次保存都生成一个,因此你的写作节奏不会被逐分钟公开。

为什么你的笔记永不过期。 NIP-37 草稿可以带有 expiration 标签(其示例使用 90 天),遵守该标签的中继会在那一天删除该事件。 对笔记本来说,这意味着丢失没有人要求删除的笔记,因此 Notes 从不写入该标签。 另一面是:你的笔记会以加密形式留在中继上,直到你删除它们,而在 Nostr 上删除只是一个请求:中继可能保留其副本。

分享笔记。 Notes 把副本发送到对方账户声明自己读取的中继(它的 NIP-17 中继,kind 10050,否则是其 NIP-65 列表中的读取中继;Notes 会在你的中继上查找它们),以及你自己的中继,最多八个。 发送的是笔记的内容(标题、正文和标签),不包括你的笔记本、标记或回收站;你之后的修改不会发送。 对方账户会保留它的副本:Notes 无法收回,删除你的笔记也不会删除它。 为了接收,Notes 会向你的中继请求发给你的密钥、带有 k=30023 的 gift wrap,并在设备上打开它们。 丢弃一份只会把它从设备上移除:gift wrap 由一个没有人保留的密钥签名,所以你们双方都无法请求中继删除它,它会留在那里,但除了你没有人能读取。

搜索在本地进行。 一切都是加密的,因此没有中继能替你搜索。 Notes 下载并解密你的笔记,并在设备上建立索引;你搜索的词语永远不会被发送到任何地方。

要求 NIP-42 认证的中继会知道你的公钥;Notes 会用你的账户响应它。 Notes 还会向你的中继请求其他应用用你的密钥写下的草稿(kinds 31234 和较旧的 30024),以只读方式显示,这样做时不发布任何内容。 如果你通过远程签名器(bunker 或 Nostr Connect)登录,其中继会传递你加密的签名请求,并且 Notes 只请求它签署上述 kinds(包括分享笔记的密封,kind 13;它的 gift wrap 在设备上用只用一次的密钥签名)。使用你 Android 手机上的签名应用(NIP-55,如 Amber)时,Notes 直接在手机上与它通信,中间没有任何中继,向它请求的内容相同,并在使用前检查每个返回的已签名事件。

Herkos Local Relay:它保存什么,与谁通信

Herkos Local Relay 是一个运行在你自己设备上的 Nostr 中继,供 Herkos 应用和任何其他 Nostr 客户端使用。 它背后没有我们的任何服务器,它也不向我们发送任何内容。

它在设备上保存什么。 你的应用写入它的事件,以及它从你的中继取回的事件,保存在一个数据库中,该数据库用保存在操作系统安全存储中的密钥加密。 与之并存的有:你配对的应用以及每个应用可以做什么;它的设置(settings.json:端口、配额、清理、会话日志是否开启);以及备份的设置(backups.json:多久一次、文件夹、备份加密所针对的公钥及其盐值、上一份备份的生成时间)。 这些都不是机密,备份的密码也从不保存。 在 Windows 和 Linux 上,它运行期间,应用文件夹中的 relay.json 会说明它在哪个端口监听,以便 Herkos 应用找到它。 卸载应用会删除该数据库,数据库的密钥也随之失去作用。

谁可以连接。 它只在 127.0.0.1 上监听(除非你更改,否则端口为 4873):设备之外的任何东西都无法访问它。 设备上的任何应用都能访问这个地址,因此应用或网页必须先经过配对、由你在屏幕上批准,才能写入;未配对的网页会被拒绝。 撤销某个应用会立即断开它的连接。 私密事件(草稿、私密列表、提醒、你收到的密封信封)只交给能通过 NIP-42 证明自己持有其所属密钥的一方。 本地网络和 Tor 目前尚不可用;它们推出后,在你开启之前都会保持关闭,并且需要 TLS 或 onion 服务、认证以及一份允许的密钥列表。

对象 他们能看到什么 何时
你的中继(你的 NIP-65 列表中的中继) 你的 IP 地址;当中继要求 NIP-42 认证时,你的公钥;你通过它发布的公开事件;以及为了同步,它询问的是你的哪些事件。 你发布时,以及它同步时(如果中继支持,使用 negentropy,NIP-77)。
你写信对象的收件箱中继(对方的 NIP-17 列表,kind 10050,否则是其 NIP-65 列表中的读取中继) 你的 IP 地址,以及发给对方的密封信封(NIP-59),在随机等待之后发出。它从不发送到你自己的中继。 当某个应用通过它发送私密消息或邀请时。

为了查找某人在哪里接收,它会询问你的中继。你的私密事件(草稿、私密列表、提醒)永远不会离开设备。 它从不公布自己的地址(它不在任何人的 NIP-65 列表中),它的 NIP-11 文档不会透露你是谁,也没有分析统计、遥测或崩溃报告。 在 Android 上,它作为一项服务运行,带有一条通知及其停止按钮;10 分钟没有连接后它会休眠,Herkos 应用会在设备本身上唤醒它,不需要任何推送服务器。

会话日志默认关闭。如果你开启它,它只保存在内存中,只保留最近 500 行,并在中继停止时清除:内容包括连接、NIP-42 认证、被接受或被拒绝的事件以及所请求的 kind,按 kind 和其 id 的开头记录,绝不记录其内容。

备份。 整个存储的加密备份只写入你选择的位置:设备上或外部磁盘上的文件夹。 云客户端的文件夹(OneDrive、Google Drive、Dropbox、iCloud、Nextcloud、Herkos Drive 等)会被拒绝。 备份用你自己的密码加密(scrypt 和 XChaCha20-Poly1305);定时备份则针对该密码所生成的公钥加密,因此无需密码即可生成。 保留最近七份。 没有密码,任何人都无法打开备份,包括我们;如果你丢失了密码,备份也就丢失了。 JSONL 导出不加密:它以明文包含你的私密事件,应用在写入之前会告诉你这一点。

清理只删除其他人的事件:绝不删除你的事件、发给你的信封,或你的应用保护的 kind;按配额清理只在有最近一天内的备份之后进行。 而且与 Nostr 中的任何地方一样,删除只是一个请求:已经发送到其他中继的内容可能会留在那里。

我们的网站与 Cloudflare

herkos.app(包括 herkos.app/e/)、app.herkos.app(Mail 的网页版)、calendar.herkos.app、notes.herkos.app (Calendar 和 Notes 的网页版,发布后)和 fdroid.herkos.app(我们的 F-Droid 仓库)都是由 Cloudflare (Cloudflare Pages 和 R2)提供服务的静态文件。与任何网站托管商一样,Cloudflare 会收到你的 IP 地址、浏览器的用户代理、你请求的地址(不含 # 之后的部分)和时间,并可能依据 其自身的隐私政策将其保存在日志中。

我们不设置 Cookie,也不做任何分析统计;页面和网页应用自身的文件只来自这些域名(之后网页应用会 连接上文所述的中继和服务器),我们也不查看按访问者区分的日志。从 Releases 下载的文件来自 GitHub,它依据自己的政策会看到同类数据。

设计上即为公开

Nostr 是一个公开网络。以下内容对任何查询你所用中继的人都是可见的,并与你的公钥 相关联:

你的选择与权利

变更

当应用的行为发生变化时,我们会修改本文件,并在顶部记录日期。事实来源是代码仓库中 的 PRIVACY.md;已发布的页面是它的副本。

联系方式:privacy@herkos.email · https://herkos.app

其他语言

English · Español · Bahasa Indonesia · Català · Čeština · Deutsch · Français · Italiano · Magyar · Nederlands · Polski · Português (Portugal) · Português (Brasil) · Română · Slovenčina · Suomi · Svenska · Türkçe · 中文 · Ελληνικά · हिन्दी · 日本語 · 한국어 · Русский · Українська