Link Visual安全机制说明

LinkVisual提供了完善的全链路安全保护机制,您可以根据业务的安全需求,选择开通防串号、视频加密等安全机制。

概述

业务场景

安全机制

安全等级

使用方式

设备身份认证

一机一密

较高

云端控制台配置

一型一密

云端控制台配置

防串号

较高

需要设备端做少量开发

APP身份认证

安全登录

Android/iOS/PC默认支持

API安全

较高

默认支持身份及权限管控,HTTPS可选

视频播放

播放数据加密

较高

1.x版本播放器版本加密可选,2.x版本播放器强制加密

设备推流数据加密

较高

需要设备端做少量开发

安全机制说明

设备身份认证

设备接入生活物联网平台之前,需通过身份认证。目前平台支持的多种认证方式对比以及相关的风险说明,请参考量产设备文档。

对于一机一密设备,平台针对设备证书(即三元组,ProductKey、DeviceName、DeviceSecret)重复烧录的情况提供了防串号方案(需要在设备端做少量开发)。不同APP分享方式下重复烧录的具体表现列举如下:

分享方式

设备不支持防串号

设备支持防串号

抢占式

当A用户绑定A设备后,B用户仍可绑定成功、且A用户自动解绑。当A设备上线后,B用户可看到A设备的画面。

B设备无法上线,B用户无法绑定B设备,A用户正常使用A设备。

授权式

当A用户绑定A设备后,B用户无法再绑定设备,但B设备配网成功仍可正常上线。A用户可看到B设备的画面。

B设备无法上线,B用户无法绑定B设备,A用户正常使用A设备。

共享式

A用户绑定A设备成为管理员,B用户绑定B设备成为子成员。当A、B设备同时在线时,A和B用户能随机看到A、B设备的画面。

B设备无法上线,B用户无法绑定B设备,A用户正常使用A设备。

防串号方案机制

开启防串号功能后,设备使用唯一UUID标识进行连云上线。设备成功上线后,该设备证书将绑定此唯一UUID,后续当同样设备证书的其他设备(UUID不同)上线时,云端会禁止该设备上线,从而避免隐私泄露。

UUID选取建议方式:

  1. 从 IMEI/MAC地址/CPU序列号等信息中择一作为设备的UUID。使用此类设备信息请确保每次读取不会发生变化,若有偶现无法读取成功的情况,会导致设备有概率无法上线。

  2. 带有持久化存储器件的设备,可在首次开机时创建UUID,并将其固化到存储器件中。

设备端开发方法

请开发者实现生活物联网SDK的HAL_GetUUID函数,在如下路径文件有相关注释说明:

ali-smartliving-device-sdk-c/include/imports/iot_import_product.h
ali-smartliving-device-sdk-c/src/ref-impl/hal/os/ubuntu/HAL_OS_linux.c

请开发者注意,对于设备而言,每个设备都要求有唯一的UUID。并且在任何场景下,通过HAL_GetUUID获取的UUID都需要保持一致。

说明

2.4.5及后续版本SDK默认开启防串号功能,若您在评估串号的安全风险后仍希望关闭此功能,可在HAL_GetUUID方法中返回-1:

int HAL_GetUUID(uint8_t *buf, int len) {
    return -1;
}

设备禁用处理

  • 当设备出现禁用情况时,用户联系售后进行更换设备证书处理即可。(相同UUID对应不同设备证书,上线不受影响)

  • 若修改UUID后仍希望使用原有的设备证书,可联系技术支持处理。

APP身份认证

平台提供了稳定、安全的登录组件,采用HTTPS协议和多重防护措施,保障用户账号和隐私安全。对于Android、iOS、PC版本组件您需要额外对AppSecret密钥做加密保护:

请使用AppKeyEncode库提供的加密接口对AppSecret做加密,不要将AppSecret做明文存储。

APP用户需要经过登录后,通过平台开放的API使用设备控制、视频播放等功能。平台使用HTTPS对API请求进行加密,请确保您未关闭此功能:

请在APIClient SDK提供的网络请求中设置Request的Scheme为HTTPS而不是HTTP。

  • Android:

    IoTRequest request = new IoTRequestBuilder().setScheme(Scheme.HTTPS).build();
    
  • iOS:

    IMSIoTRequestBuilder *builder = [[IMSIoTRequestBuilder alloc] initWithPath:path
                                                                        apiVersion:version
                                                                            params:params];
    [builder setAuthenticationType:IMSAuthenticationTypeIoT];
    [builder setScheme:@"https://"];
    IMSRequest *request = [builder build];

视频播放

LinkVisual提供了视频播放全链路传输加密机制,即使网络传输中的数据包遭到拦截,也能有效防止视频画面被非法获取。请按照如下方法对视频播放和设备推流分别做加密,否则存在用户隐私泄露风险。

播放端

使用LinkVisual提供的安全加密播放器,可自动解密视频数据,实现安全播放。建议升级到2.x最新版本使用,仍使用1.x版本的请默认开启加密。加密开启方法:

  • Android:

     /**
     * 设置IPC直播数据源.
     *
     * @param iotId             设备的iotId
     * @param streamType        流的类型,若有多路码流请关注该参数,C.STREAM_TYPE_MAJOR表示主码流;C.STREAM_TYPE_MINOR表示辅码流
     * @param relayEncrypted    云转是否加密,建议开启
     * @param relayEncryptType  云转加密类型
     * @param forceIFrame       是否需要强制I帧,建议开启
     * @param cacheDurationInMs 云端缓存的视频长度,若有数据,该数据将会被加速快放,单位ms,该值建议不超过1个GOP
     */
    void setIPCLiveDataSource(String iotId, int streamType, boolean relayEncrypted, int relayEncryptType, boolean forceIFrame, int cacheDurationInMs)
    
  • iOS:

    //设置参数 rtmpPath rtmp地址
    //needEncrypt true 需要加密
    [player setDataSource_Live:rtmpPath
                   needEncrypt:needEncrypt
                            iv:iv
                           key:key];

设备端

  • 对于v2.4.5及之前版本,加密配置方法如下:

    设备启动时,需要上报物模型EncryptSwitch的值为1,示例代码如下:

    unsigned char *entrypt_switch = "{\"EncryptSwitch\":1}";
    IOT_Linkkit_Report(0, ITM_MSG_POST_PROPERTY, entrypt_switch, strlen(value));
  • 对于v2.5.0及后续版本,设备SDK视频推流数据默认加密传输。若您在评估设备推流视频数据泄露的风险后仍希望关闭加密开关,可做如下设置进行关闭:

    lv_init_config_s config;
    config.stream_auto_encrypt_disable = 1;
    lv_init(&config, &callback, &system);