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选取建议方式:
从 IMEI/MAC地址/CPU序列号等信息中择一作为设备的UUID。使用此类设备信息请确保每次读取不会发生变化,若有偶现无法读取成功的情况,会导致设备有概率无法上线。
带有持久化存储器件的设备,可在首次开机时创建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);