Skip to content

密钥保密要求

接入 TiRTC 时,你需要重点保护两个值:SecretKeyIddevice_secret_key

它们都不能下发到客户端,也不要出现在日志、截图、工单或聊天记录里。区别在于:SecretKeyId 是应用级密钥,通常放在服务端;device_secret_key 是设备级密钥,通常还会写进设备端。后者一旦泄露,处理起来更麻烦,不能简单地在服务端换一个新值就结束。

放在哪里

密钥是什么可以出现在哪里不应出现在哪里
SecretKeyId应用级密钥,用于服务端签名和鉴权你的业务服务端客户端源码、客户端安装包、前端页面脚本、日志、截图、工单
device_secret_key设备级密钥,和 device_id 一起证明设备身份设备端受控存储位置;服务端必要的签名或校验流程客户端、普通配置文件、日志、群聊、邮件、截图、工单

不要这样做

这些做法都容易把密钥泄露出去:

  • SecretKeyId 写进客户端代码或示例工程
  • device_secret_key 当成普通字符串打印到日志
  • 在群聊、邮件、工单、截图里直接发送完整密钥
  • 把完整的 device_id + device_secret_key 组合字符串(某些 API、CLI 或配置项里写作 license)当成一个可以随手分享的整体字符串
  • 为了排查方便,把密钥写入本地配置文件并提交到仓库

有些 API、CLI 或配置项会把 device_id + device_secret_key 的组合写作 license。不要被这个名字误导。只要里面包含 device_secret_key,就按设备级密钥处理。

推荐做法

日志里只放定位信息

排查设备问题时,日志里通常只需要这些信息:

不要打印:

  • SecretKeyId
  • device_secret_key
  • 完整的 device_id + device_secret_key 组合字符串
  • 可直接复用的完整 token

发给别人前先脱敏

如果排查时必须展示相关字段,只展示足够定位问题的最小信息:

  • 只展示 device_id,不展示 device_secret_key
  • 只说明“签名失败”或“凭证不匹配”,不要把原始密钥贴出来

不要把所有值都塞给所有端

每一端只拿自己真正需要的值:

  • 客户端主要接触 remote_idtoken
  • 设备端只在初始化或上线等必要场景接触 device_secret_key
  • 服务端只在签名、鉴权或校验等必要流程接触 SecretKeyIddevice_secret_key

如果已经泄露了怎么办

先不要继续转发相关内容,然后确认泄露范围:代码仓库、日志、聊天记录、截图、工单、示例工程和排查脚本。

接下来要看泄露的是哪个值。

SecretKeyId 泄露

SecretKeyId 通常只保存在服务端。泄露后,应停止继续使用已经泄露的值,并按你的平台配置或交付流程申请、配置新的应用级密钥;同时清理已经泄露出去的副本。

device_secret_key 泄露

device_secret_key 绑定的是具体设备身份,通常已经写入设备端。对已经出厂、部署或交付的设备来说,它很难像服务端密钥一样直接替换。

处理时先确认受影响的 device_id 范围,再联系 TiRTC 平台侧同步更换方案。如果确实需要更换,通常要通过类似 OTA 的方式把新 device_secret_key 下发到设备端,同时在平台侧同步更新对应设备的密钥。

设备端和平台侧没有同步完成前,设备上线、Token 签发或连接校验都可能不正常。

相关文档

TiRTC 开发文档