跳到主要内容
公开规范 · 互认草案 v0.1 · 未冻结

心也互认协议 v0

让一个心理人的「我是谁、我做过什么」能在不同机构、不同工具之间被验证,而不必把人和数据锁进任何一家平台。公开规范:不需要注册、不需要付费、不需要接入心也。

编号
HY-OPEN-009
版本
HIP-0.1
日期
2026-10-27
状态
草案 · 公开征求意见中
本文目录15 节
  1. 一句话与边界
  2. 五条不变量
  3. 两种主体,两种根
  4. 凭证与八类声明
  5. 签名与规范化
  6. 密钥发现
  7. 吊销
  8. 验证结果:四种结论,一种拒绝
  9. 最小数据格式
  10. 督导台账与硬规则
  11. 治理与版本
  12. 一致性测试(T1–T11)
  13. 实现状态(诚实律)
  14. 未决问题
  15. 变更记录

§ 0一句话与边界

让一个心理人的「我是谁、我做过什么」能在不同机构、不同工具之间被验证,而不必把人和数据锁进任何一家平台。

本协议只搬运「职业身份与经历」,不搬运「来访者」。明确不做:案源分配、咨询师排名、竞价、流量售卖;支付、结算、佣金、抽成;个案记录、案例原文、诊断细节的存储与交换;来访者身份、联系方式、对话内容的任何字段;咨询质量评价、疗效评分、「好评率」;中心化账号体系(不要求任何人向心也注册);区块链、代币、积分或任何可交易资产。

§ 1五条不变量

任何后续修改如果破坏其中一条,就不是 v0 的演进,是另一个协议。

编号不变量含义
I1可离线验证验证一张凭证,不需要访问心也的任何服务器,不需要联网。只需要:凭证本身 + 签发者公钥 + 一份吊销列表快照。
I2吊销可近似,但不可假装离线时无法得知最新吊销状态,结论只能是 UNKNOWN,不允许输出 VALID。把「没查到吊销」当成「有效」是最常见的伪安全。
I3最小披露一条声明一张凭证。要证明「我有 120 小时督导」,就只出示这一张,不出示资质、出生年份、隶属机构。
I4不依附签发与验证必须能被任何一方独立实现。心也消失、停止服务、改主意,已签发的凭证仍然可验。
I5人是主体,机构只是签发者凭证属于个人,可随人迁移到任何机构。机构只能吊销自己签发的那部分,不能吊销别人给的,也不能扣住一个人的全部历史。

§ 2两种主体,两种根

个人:did:hy:pk:<base32(sha256(公钥))>。由个人自持的密钥派生;换机构、换工具、换手机号,标识不变。私钥在个人手里,心也不持有、不代管、不能代替本人签署。丢失私钥等于丢失该标识的控制权——恢复靠社交恢复(3 个已知主体联署声明新公钥接管旧标识,v0 不强制实现)。

机构:did:hy:org:<域名>。以机构自己的域名作为身份根;有域名、有备案,就能有身份,不需要向任何人申请。域名转让时原 did 作废,新主体需重新签发凭证,不提供域名继承。

为什么不用统一 ID:统一 ID 意味着发号的人拥有否决权,可以让你「不存在」。本协议的身份是自证的——验证方验的是密钥与域名,不是一张来自中心的名单。

§ 3凭证与八类声明

一条可验证的声明就是一张凭证。v0 的最小结构包含:版本、类型、凭证 id、签发者、主体、claim(kind / value / unit / period / scope)、签发时间、有效期、证据引用、吊销列表地址与索引,以及签名段。

数字必须带口径。没有 period 与 scope 的时长是假数据,验证方应判 INVALID。

不合并:不同签发者的督导时长不自动相加,加总属于应用层,不属于协议层。

不推断:有 supervision.provided 不意味着有资质;有资质不意味着在执业。每条声明独立成立。

一条声明一张凭证:要出示 120 小时督导,就只出示那张 supervision.received,其余留在本人手里。v0 不做零知识证明,拆开签已经满足最小披露。

kind含义unit备注
identity.practitioner本人在执业—最低门槛,任何心理人都可自签或机构签
qualification.registration注册资质—scope 写清资质名称与发证机关
training.hours培训学时hour必须带 period 与课程 scope
supervision.received接受督导时长hourscope 区分个体 / 团体
supervision.provided提供督导时长hour同上
practice.hours个案时数hour不带任何来访者信息
affiliation.org机构隶属—expires_at 必填,隶属有时效
attestation.peer同行评审 / 带教—scope 写清评审形式

§ 4签名与规范化

  • 规范化:RFC 8785 (JCS)。签名前把除 sig 外的全部字段按 JCS 序列化。
  • 算法:Ed25519,v0 只此一种,不接受算法协商——协商是攻击面。
  • 编码:base64url,无填充。覆盖范围:sig 之外的所有字段,包括 revocation。
  • kid 指向签发者公钥文档里的具体密钥;时间一律 UTC,Z 结尾,秒级,不接受本地时区与相对时间。
  • 验证方必须先验签名,再读内容。顺序反了,等于信任未验证的输入。

§ 5密钥发现

托管商默认不给跨域响应头,等于默认把「可离线验证」打折。这不是部署细节,是协议义务——一致性测试 T11 就是它的测试向量。

项目v0 规定
机构公钥https://<domain>/.well-known/heartye-keys.json,包含 issuer、keys(kid / alg / public_key / not_before / not_after)
草案期锚定首次发布尚无上一把钥匙,以 fingerprint 字段对外公布(base32(sha256(公钥原始字节))),由验证方带外比对;DNS TXT 锚定是 1.0 的硬要求
跨域读取公钥文档与吊销列表必须允许跨域读取;2026-10-27 实测:网关型静态托管默认不返回 Access-Control-Allow-Origin,需在自定义域名路由层注入
个人公钥随凭证出示(subject 即公钥哈希),不需要另行发布
离线缓存验证方缓存公钥文档、吊销列表与 fetched_at;缓存过期不改变签名有效性,但会改变吊销结论

§ 6吊销

签发者发布 https://<domain>/.well-known/heartye-revoked.json,包含版本、签发者、发布时间、ttl(秒)、条目(index / cred_id / reason / revoked_at),以及签名。

reason含义
issuer_error签发错误
fraud伪造材料
superseded被新凭证替代
withdrawn本人要求撤回
  • 列表本身必须签名。验不过签名,或根本没签名,验证方一律按 UNKNOWN 处理——否则谁都能伪造一份「什么也没吊销」的列表,吊销机制等于不存在。
  • ttl 是签发者的承诺:超过 ttl 未刷新,验证方必须降级为 UNKNOWN。
  • 吊销列表按 index 增量拉取,允许只同步新增部分。
  • 没有「永久有效」的凭证——expires_at 为 null 的凭证仍受吊销约束。

§ 7验证结果:四种结论,一种拒绝

铁律:UNKNOWN 不得显示为绿色,不得显示为「有效」,不得用「✓」图标。界面上必须写出「吊销状态同步于 YYYY-MM-DD HH:mm」。写不出时间,就是 UNKNOWN。

这条不是为了严谨好看。一旦允许「查不到就当有效」,整套互认就变成了盖章生意。

结论条件能否对第三方声称
VALID签名正确 + 未过期 + 吊销列表在 ttl 内且未命中可以
EXPIRED签名正确 + 已过期不可以(可展示历史)
REVOKED吊销列表命中不可以
UNKNOWN签名正确,但吊销状态无法确认(离线 / 缓存超 ttl / 列表拉取失败)不可以
INVALID签名错、字段缺、口径不全、issuer 与密钥不匹配不可以

§ 8最小数据格式

两套台账:hy.appointment(预约)与 hy.supervision(督导)。只规定字段与口径,不规定软件。

hy.appointment 字段类型必填说明
idstring✓稳定标识,不随导出变化
dateYYYY-MM-DD✓本地日期
start / endHH:mm✓本地时间
tzIANA✓如 Asia/Shanghai
modeonline | offline✓线上 / 线下
placestring仅线下,写城市 / 区,不写门牌
statusrequested | booked | completed | cancelled✓预约状态
notestring不得含来访者身份与对话内容

§ 8.1督导台账与硬规则

hy.supervision 字段类型必填说明
dateYYYY-MM-DD✓发生日期
hoursnumber✓0.25 粒度
formindividual | group | peer✓个体 / 团体 / 同侪
rolereceived | provided✓接受 / 提供
supervisee_refstring代号,非真名
case_refstring代号,非编号,非姓名
topicstring主题词,不含个案细节
supervisordid:hy:*有则可互认,无则仅本人留存
  • 导出格式:CSV (UTF-8 with BOM) / .xlsx / JSON,三种至少实现一种完整的。
  • 时间一律带时区;跨时区不换算,保留原始 tz。
  • 不得包含:来访者姓名、手机号、微信、住址、身份证、诊断编码、对话原文。
  • 导出文件由客户端本地生成,不经过任何服务器中转。
  • 台账可整份带走。迁移不需要申请、不需要审批、不需要对方同意。

§ 9治理与版本

版本:<major>.<minor>。0.x 草案期允许破坏性修改;1.0 起 minor 只增不改,破坏性变更必须 major。验证方声明支持的版本区间,不支持的凭证判 INVALID 并注明原因。

变更提案(HYP):任何机构、任何个人都可以提,必须包含动机、兼容性影响、参考实现、迁移方式。1.0 之后,任何两个独立实现的机构同意,提案即可进入候选——心也不是唯一的批准者。

谁能签发:v0 不规定谁有权签发资质,只规定两件事——签发者身份可验证;签发者必须公开自己的签署标准(签了什么、依据什么、有效期多久)。心也不做发证垄断,也不做白名单——白名单一旦存在,就变成了「只有被承认的人才算人」。

§ 10一致性测试(T1–T11)

编号输入期望
T1合法凭证 + 新鲜公钥 + 新鲜吊销列表VALID
T2同上,但改动 claim.value 一位INVALID
T3合法但已过期EXPIRED
T4在吊销列表中REVOKED
T5吊销列表超过 ttlUNKNOWN
T6吊销列表拉取失败(离线)UNKNOWN
T7缺 period 或 scope 的时长声明INVALID
T8issuer 域名与公钥文档域名不一致INVALID
T9台账含疑似手机号字段导出应被拒绝并提示
T10吊销列表未签名 / 签名为伪造UNKNOWN
T11在别的域名页面里跨域 fetch 公钥文档 / 吊销列表应能读到(响应含 Access-Control-Allow-Origin);读不到即不满足 §5

§ 11实现状态(诚实律)

诚实交代:以上「已上线」只说明工具可用,不说明互认已经在机构之间发生。真正的闭环需要第二家机构用自己的实现签发、验证,并跑通 T1–T11;在那之前,我们不宣称闭环完成。

组件状态
lib/hip.js(JCS / Ed25519 / 四态判定)✅ 已实现,T1–T10 自测通过
T11 跨域可读✅ 2026-10-27 在 www.heartye.cn 自定义域实测通过
公开验签页 /verify/credential/✅ 已上线:不登录、浏览器本地验签
成员控制台「互认身份」✅ 已上线:本机生成密钥、DID、凭证夹、导出与备份
机构签发台 /issue/credential/✅ 已上线:浏览器内生成机构密钥、签发凭证、重签吊销列表;私钥不上传
DNS TXT 锚定⏳ 1.0 才要求;v0 用 fingerprint 带外比对
外部机构独立实现⏳ 尚无第二家实现者——闭环未完成,不以「已闭环」对外表述

§ 12未决问题

不装完整。这些还没想清楚,写出来比假装想清楚了更有用。

  • 私钥丢了怎么办——社交恢复的具体阈值与争议处理(3 人联署够不够?联署人串通怎么办)。
  • 团体督导的时长怎么算——2 小时团体、8 个人,每人算 2 小时还是 0.25 小时。行业没有统一口径,协议不替行业决定,但必须要求签发者写明。
  • 跨机构隶属冲突——一个人同时属于两家机构,且两家都签了 affiliation.org。当前允许并存,是否需要显式声明主属,待议。
  • 机构域名失效——域名到期 / 被查封,历史凭证是否随之失效。当前结论:签名仍有效,但密钥文档不可达,判 UNKNOWN。这可能过于严格。
  • 中文姓名与重名——凭证里是否放姓名。倾向:不放,放代号;姓名属于应用层。
  • 监管对接——若未来主管部门要求报送,用哪一层实现、是否破坏最小披露。倾向:单列报送适配层,不进核心协议。

§ 13变更记录

版本日期变更
0.12026-10-27首版草案。确立五条不变量、两种主体、八类声明、四种验证结论、两套台账格式;补入 2026-10-27 跨域实测(T11)。
0.1.12026-10-27增补 §11 实现状态:成员凭证夹与机构签发台上线;仍不宣称闭环完成。
REFERENCES · 来源与依据
  1. RFC 8785 · JSON Canonicalization Scheme (JCS)。
  2. RFC 8032 · EdDSA(Ed25519)。
  3. W3C DID Core 1.0(did 语法参考,不采用其区块链绑定)。
  4. 协议原件:仓库 docs/心也互认协议-v0.md(变更逐条记录)。

合规声明:本页为公开技术规范草案,不构成任何资质认定、医疗建议或执业许可。协议只搬运职业身份与经历,不搬运来访者数据;协议文本未冻结,修订以新版本公示。

心也图书馆 · HY-OPEN-009 · 心也互认协议 v0 · 转载请署名并附本页链接。全文草案,修订以新版本公示。

引用本文CITE

引用本文CITE THIS DOCUMENT

APA 7
心也. (2026). 心也互认协议 v0 (HY-OPEN-009, HIP-0.1). 心也图书馆. https://lib.heartye.cn/doc/heartye-hip-v0/
BibTeX
@techreport{heartye:HY-OPEN-009,
  title       = {心也互认协议 v0},
  author      = {心也},
  institution = {心也图书馆},
  type        = {公开文书},
  number      = {HY-OPEN-009},
  year        = {2026},
  month       = {10},
  note        = {草案 · 公开征求意见中},
  url         = {https://lib.heartye.cn/doc/heartye-hip-v0/},
  language    = {zh-CN}
}

格式为纯文本,可直接粘贴。引用时请保留文号与版本号——它们是这份文书唯一的身份。

同一主题的另一层文书。公开文书讲执行,治理文书讲规则——两份都要看才算读完。

原件在 GitHub:本页是阅读版。排版前的 markdown 原件放在开源仓库里, 可直接下载、引用,也能看到这份文书改过几次、每次改了什么。

← 返回公开文书