• 简体中文
  • 端到端加密 API

    密钥上传

    POST /_matrix/client/v3/keys/upload

    上传设备密钥和一次性密钥(OTK):

    {
      "device_keys": {
        "user_id": "@alice:localhost",
        "device_id": "ABCDEF",
        "algorithms": [
          "m.olm.v1.curve25519-aes-sha2",
          "m.megolm.v1.aes-sha2"
        ],
        "keys": {
          "curve25519:ABCDEF": "...",
          "ed25519:ABCDEF": "..."
        }
      },
      "one_time_keys": {
        "signed_curve25519:AAAAAA": { ... },
        "signed_curve25519:AAAAAB": { ... }
      }
    }

    响应:

    {
      "one_time_key_counts": {
        "signed_curve25519": 50
      }
    }

    密钥查询

    POST /_matrix/client/v3/keys/query
    {
      "device_keys": {
        "@bob:localhost": ["DEVICE1", "DEVICE2"]
      },
      "timeout": 10000
    }

    返回指定用户/设备的设备密钥。

    密钥领取

    POST /_matrix/client/v3/keys/claim
    {
      "one_time_keys": {
        "@bob:localhost": {
          "DEVICE1": "signed_curve25519"
        }
      },
      "timeout": 10000
    }

    领取一次性密钥用于 Olm 会话建立。

    密钥变更

    GET /_matrix/client/v3/changes

    返回自给定令牌以来设备密钥已变更的用户列表。

    交叉签名密钥

    上传主密钥

    POST /_matrix/client/v3/keys/device_signing/upload

    上传交叉签名密钥(主密钥、自签名密钥、用户签名密钥):

    {
      "master_keys": {
        "@alice:localhost": {
          "algorithms": ["ed25519"],
          "keys": { "ed25519:MASTER_KEY_ID": "..." }
        }
      },
      "self_signing_keys": { ... },
      "user_signing_keys": { ... }
    }

    设备管理

    列出设备

    GET /_matrix/client/v3/devices

    获取设备

    GET /_matrix/client/v3/devices/{deviceId}

    更新设备

    PUT /_matrix/client/v3/devices/{deviceId}
    { "display_name": "Element Web" }

    删除设备

    POST /_matrix/client/v3/delete_devices
    {
      "auth": {
        "type": "m.login.password",
        "identifier": { "type": "m.id.user", "user": "alice" },
        "password": "secret123"
      }
    }

    设备间消息

    PUT /_matrix/client/v3/sendToDevice/{eventType}/{txnId}
    {
      "messages": {
        "@bob:localhost": {
          "DEVICE1": { ... }
        }
      }
    }

    设备间消息通过 /syncto_device 部分投递。每条消息必须包含 event_id 字段,以便 Cinny 等端到端加密客户端正确处理房间密钥交换。

    设备列表可见性

    当用户加入、退出或被封禁时,RoomEventService.upsertMembership() 会在 /sync 响应中触发 device_lists.changed / device_lists.left 通知。这允许客户端跟踪需要更新加密密钥的设备。