# 设备互信认è¯<a name="ZH-CN_TOPIC_0000001150002727"></a> - [简介](#section11660541593) - [目录](#section161941989596) - [说明](#section1312121216216) - [接å£è¯´æ˜Ž](#section1551164914237) - [相关仓](#section1371113476307) ## 简介<a name="section11660541593"></a> 在OpenHarmonyä¸ï¼Œè®¾å¤‡äº’ä¿¡è®¤è¯æ¨¡å—作为安全åç³»ç»Ÿçš„åæ¨¡å—,负责设备间å¯ä¿¡å…³ç³»çš„建立ã€ç»´æŠ¤ã€ä½¿ç”¨ã€æ’¤é”€ç‰å…¨ç”Ÿå‘½å‘¨æœŸçš„管ç†ï¼Œå®žçްå¯ä¿¡è®¾å¤‡é—´çš„互信认è¯å’Œå®‰å…¨ä¼šè¯å¯†é’¥å商,是æè½½OpenHarmony的设备进行å¯ä¿¡äº’è”的基础平å°èƒ½åŠ›ã€‚ è®¾å¤‡äº’ä¿¡è®¤è¯æ¨¡å—å½“å‰æä¾›å¦‚ä¸‹åŠŸèƒ½ï¼š - 设备互信关系管ç†åŠŸèƒ½ï¼šç»Ÿä¸€ç®¡ç†è®¾å¤‡äº’信关系的建立ã€ç»´æŠ¤ã€æ’¤é”€è¿‡ç¨‹ï¼›æ”¯æŒå„ä¸ªä¸šåŠ¡åˆ›å»ºçš„è®¾å¤‡äº’ä¿¡å…³ç³»çš„éš”ç¦»å’Œå¯æŽ§å…±äº«ã€‚ - 设备互信关系认è¯åŠŸèƒ½ï¼šæä¾›è®¤è¯è®¾å¤‡é—´äº’信关系ã€è¿›è¡Œå®‰å…¨ä¼šè¯å¯†é’¥å商的能力,支æŒåˆ†å¸ƒå¼è½¯æ€»çº¿å®žçŽ°äº’ä¿¡è®¾å¤‡é—´çš„ç»„ç½‘ã€‚ ä¸ºå®žçŽ°ä¸Šè¿°åŠŸèƒ½ï¼Œè®¾å¤‡äº’ä¿¡è®¤è¯æ¨¡å—当å‰åŒ…å«è®¾å¤‡ç¾¤ç»„管ç†ã€è®¾å¤‡ç¾¤ç»„认è¯å’Œå¸å·æ— 关点对点认è¯ä¸‰ä¸ªå模å—,其部署逻辑如下图: **图 1** å系统架构图<a name="fig4460722185514"></a>  å…¶ä¸ï¼Œ - è®¾å¤‡ç¾¤ç»„ç®¡ç†æœåŠ¡ï¼šç»Ÿä¸€ç®¡ç†ä¸åŒä¸šåŠ¡å»ºç«‹çš„æœ¬è®¾å¤‡ä¸Žå…¶ä»–è®¾å¤‡é—´çš„äº’ä¿¡å…³ç³»ï¼Œå¹¶å¯¹å¤–æä¾›è®¾å¤‡äº’ä¿¡å…³ç³»çš„åˆ›å»ºå…¥å£ ï¼Œå®Œæˆä¿¡ä»»å»ºç«‹åŽåˆ›å»ºå¸å·æ— å…³è®¾å¤‡ç¾¤ç»„ï¼Œå¹¶å°†ä¿¡ä»»å¯¹è±¡è®¾å¤‡æ·»åŠ è¿›ç¾¤ç»„ï¼›OpenHarmony上å„业务å¯ç‹¬ç«‹åˆ›å»ºç›¸äº’隔离的设备间å¯ä¿¡å…³ç³»ã€‚ - è®¾å¤‡ç¾¤ç»„è®¤è¯æœåŠ¡ï¼šæ”¯æŒå·²å»ºç«‹å¯ä¿¡å…³ç³»çš„设备间完æˆäº’信关系的认è¯åŠä¼šè¯å¯†é’¥çš„å商。 - å¸å·æ— 关点对点设备互信认è¯ï¼šæä¾›è®¾å¤‡é—´åŸºäºŽå…±äº«ç§˜å¯†å»ºç«‹ä¸€å¯¹ä¸€äº’信关系的功能,并支æŒåŸºäºŽè¿™ç§äº’信关系的认è¯å¯†é’¥å商。 - 认è¯å议库:统一å°è£…ä¸åŒç±»åž‹çš„认è¯å议,支æŒå¤šç§è½»é‡çº§ä»¥åŠæ ‡å‡†è®¤è¯å议实现。 å…±äº«ç§˜å¯†çš„ä½¿ç”¨è¦æ±‚和约æŸï¼š ä¸šåŠ¡åœ¨è®¾å¤‡é—´å»ºç«‹è´¦å·æ— 关点对点信任关系时,需è¦ä½¿ç”¨å¸¦å¤–共享的秘密信æ¯ï¼Œè¯¥ç§˜å¯†ä¿¡æ¯åœ¨å…±äº«æ–¹å¼ã€é•¿åº¦ã€å¤æ‚åº¦ä»¥åŠæ—¶æ•ˆæ€§ä¸Šå‡éœ€ç¬¦åˆå®‰å…¨è¦æ±‚。系统会对共享秘密的长度åšçº¦æŸï¼Œå¦‚䏿»¡è¶³ï¼Œåˆ™æ— æ³•è¿›è¡Œè´¦å·æ— 关点对点信任关系的建立,规则如下: | åè®® | 共享秘密(PINç )长度 | | -------- | --------------------- | | EC-SPEKE | >=6bit | | DL-SPEKE | >=6bit | | ISO | >=128bit | ## 目录<a name="section161941989596"></a> ``` /base/security/device_auth ├── default_config # 编译é…置文件 ├── frameworks # 设备互信认è¯IPC代ç ├── interfaces # 对外接å£ç›®å½• ├── test # 设备互信认è¯çš„æŽ¥å£æµ‹è¯•用例 ├── common_lib # Cè¯è¨€å…¬å…±åŸºç¡€åº“ ├── deps_adapter # ä¾èµ–组件适é…器代ç │ ├── key_management_adapter # 密钥åŠç®—法适é…层 │ └── os_adapter # 系统能力适é…层 └── services # è®¾å¤‡äº’ä¿¡è®¤è¯æœåС层代ç ├── frameworks # è®¾å¤‡äº’ä¿¡è®¤è¯æ¡†æž¶å±‚代ç ├── data_manager # 设备互信群组信æ¯ç®¡ç†æ¨¡å— ├── identity_manager # 认è¯å‡æ®ç®¡ç†æ¨¡å— ├── legacy │ ├── authenticators # è®¤è¯æ‰§è¡Œæ¨¡å— │ ├── group_auth # è®¾å¤‡ç¾¤ç»„è®¤è¯æœåŠ¡ │ ├── group_manager # è®¾å¤‡ç¾¤ç»„ç®¡ç†æœåŠ¡ ├── creds_manager # 凿®ç®¡ç†æ¨¡å— ├── mk_agree # 设备级主密钥å商 ├── cred_manager # è´¦å·å‡æ®æ’ä»¶ç®¡ç†æ¨¡å— ├── key_agree_sdk # 密钥å商sdk ├── privacy_enhancement # éšç§å¢žå¼ºæ¨¡å— ├── session_manager # 会è¯ç®¡ç†æ¨¡å— └── protocol # 认è¯å议库 ``` ## 说明<a name="section1312121216216"></a> ### 接å£è¯´æ˜Ž<a name="section1551164914237"></a> 设备互信认è¯ç»„ä»¶ä¸ï¼Œè®¾å¤‡ç¾¤ç»„ç®¡ç†æœåŠ¡è´Ÿè´£å°†ä¸åŒä¸šåŠ¡å»ºç«‹çš„è®¾å¤‡é—´å¯ä¿¡å…³ç³»æŠ½è±¡æˆä¸€ä¸ªä¸ªå¯ä¿¡ç¾¤ç»„,对外æä¾›ç»Ÿä¸€çš„æŽ¥å£ï¼ŒåŒ…å«ç¾¤ç»„创建ã€åˆ é™¤ã€æŸ¥è¯¢ç‰åŠŸèƒ½ï¼›è®¾å¤‡ç¾¤ç»„è®¤è¯æœåŠ¡åŸºäºŽå·²ç»å»ºç«‹è¿‡å¯ä¿¡å…³ç³»çš„设备群组,æä¾›è®¾å¤‡å¯ä¿¡è®¤è¯ä¸Žç«¯åˆ°ç«¯ä¼šè¯å¯†é’¥åå•†åŠŸèƒ½ï¼›åŒæ—¶æä¾›ç¾¤ç»„æ— å…³ï¼ŒåŸºäºŽè®¤è¯å‡æ®çš„设备互信认è¯èƒ½åŠ›ã€‚ **表 1** è®¾å¤‡ç¾¤ç»„ç®¡ç†æœåŠ¡æä¾›çš„API接å£\(DeviceGroupManager\)åŠŸèƒ½ä»‹ç» <a name="table1731550155318"></a> <table><thead align="left"><tr id="row4419501537"><th class="cellrowborder" valign="top" width="57.38999999999999%" id="mcps1.2.3.1.1"><p id="p54150165315"><a name="p54150165315"></a><a name="p54150165315"></a>接å£å</p> </th> <th class="cellrowborder" valign="top" width="42.61%" id="mcps1.2.3.1.2"><p id="p941150145313"><a name="p941150145313"></a><a name="p941150145313"></a>æè¿°</p> </th> </tr> </thead> <tbody><tr id="row34145016535"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p1487722894416"><a name="p1487722894416"></a><a name="p1487722894416"></a>const DeviceGroupManager *GetGmInstance()</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p13562171015712"><a name="p13562171015712"></a><a name="p13562171015712"></a>获å–设备群组管ç†çš„实例。</p> </td> </tr> <tr id="row1027292610453"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p1227312634518"><a name="p1227312634518"></a><a name="p1227312634518"></a>int32_t RegCallback(const char *appId, const DeviceAuthCallback *callback)</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p7488141134613"><a name="p7488141134613"></a><a name="p7488141134613"></a>注册业务的监å¬å›žè°ƒã€‚</p> </td> </tr> <tr id="row1746172917474"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p9758144610285"><a name="p9758144610285"></a><a name="p9758144610285"></a>int32_t CreateGroup(int32_t osAccountId, int64_t requestId, const char *appId, const char *createParams)</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p2431455765"><a name="p2431455765"></a><a name="p2431455765"></a>创建一个å¯ä¿¡è®¾å¤‡ç¾¤ç»„。</p> </td> </tr> <tr id="row10992232154714"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p1310363994713"><a name="p1310363994713"></a><a name="p1310363994713"></a>int32_t DeleteGroup(int32_t osAccountId, int64_t requestId, const char *appId, const char *disbandParams)</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p126575774517"><a name="p126575774517"></a><a name="p126575774517"></a>åˆ é™¤ä¸€ä¸ªå¯ä¿¡è®¾å¤‡ç¾¤ç»„。</p> </td> </tr> <tr id="row1440154863415"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p19702122715481"><a name="p19702122715481"></a><a name="p19702122715481"></a>int32_t AddMemberToGroup(int32_t osAccountId, int64_t requestId, const char *appId, const char *addParams)</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p240224817343"><a name="p240224817343"></a><a name="p240224817343"></a>æ·»åŠ æˆå‘˜åˆ°æŒ‡å®šç¾¤ç»„IDçš„å¯ä¿¡è®¾å¤‡ç¾¤ç»„。</p> </td> </tr> <tr id="row495164812345"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p1872417515488"><a name="p1872417515488"></a><a name="p1872417515488"></a>int32_t DeleteMemberFromGroup(int32_t osAccountId, int64_t requestId, const char *appId, const char *deleteParams);</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p1995144893411"><a name="p1995144893411"></a><a name="p1995144893411"></a>从指定å¯ä¿¡è®¾å¤‡ç¾¤ç»„é‡Œåˆ é™¤å¯ä¿¡æˆå‘˜ã€‚</p> </td> </tr> <tr id="row4107114933418"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p794617473016"><a name="p794617473016"></a><a name="p794617473016"></a>int32_t ProcessData(int64_t requestId, const uint8_t *data, uint32_t dataLen)</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p11107849113418"><a name="p11107849113418"></a><a name="p11107849113418"></a>处ç†ç»‘定或者解绑的数æ®ã€‚</p> </td> </tr> <tr id="row3270349193419"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p179130216514"><a name="p179130216514"></a><a name="p179130216514"></a>int32_t GetGroupInfo(int32_t osAccountId, const char *appId, const char *queryParams, char **returnGroupVec, uint32_t *groupNum)</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p12701049183411"><a name="p12701049183411"></a><a name="p12701049183411"></a>查询å¯ä¿¡è®¾å¤‡ç¾¤ç»„ä¿¡æ¯ã€‚</p> </td> </tr> </tbody> </table> **表 2** è®¾å¤‡ç¾¤ç»„è®¤è¯æ¨¡å—æä¾›çš„API接å£\(GroupAuthManager\)åŠŸèƒ½ä»‹ç» <a name="table12330133114308"></a> <table><thead align="left"><tr id="row15330631193013"><th class="cellrowborder" valign="top" width="57.38999999999999%" id="mcps1.2.3.1.1"><p id="p73319319302"><a name="p73319319302"></a><a name="p73319319302"></a>接å£å</p> </th> <th class="cellrowborder" valign="top" width="42.61%" id="mcps1.2.3.1.2"><p id="p133312317305"><a name="p133312317305"></a><a name="p133312317305"></a>æè¿°</p> </th> </tr> </thead> <tbody><tr id="row15331183193010"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p19743328133620"><a name="p19743328133620"></a><a name="p19743328133620"></a>const GroupAuthManager *GetGaInstance()</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p16742028153611"><a name="p16742028153611"></a><a name="p16742028153611"></a>获å–设备群组认è¯çš„实例。</p> </td> </tr> <tr id="row7331133163017"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p118111117133514"><a name="p118111117133514"></a><a name="p118111117133514"></a>int32_t AuthDevice(int32_t osAccountId, int64_t authReqId, const char *authParams, const DeviceAuthCallback *gaCallback)</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p151481335193817"><a name="p151481335193817"></a><a name="p151481335193817"></a>认è¯å¯ä¿¡è®¾å¤‡ã€‚</p> </td> </tr> <tr id="row633283153012"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p12534111115352"><a name="p12534111115352"></a><a name="p12534111115352"></a>int32_t ProcessData(int64_t authReqId, const uint8_t *data, uint32_t dataLen, const DeviceAuthCallback *gaCallback)</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p1633173173012"><a name="p1633173173012"></a><a name="p1633173173012"></a>处ç†è®¤è¯çš„æ•°æ®ã€‚</p> </td> </tr> </tbody> </table> **表 3** 基于认è¯å‡æ®çš„设备互信认è¯èƒ½åŠ›ç›¸å…³API接å£åŠŸèƒ½ä»‹ç» <a name="table12330133114309"></a> <table><thead align="left"><tr id="row15330631193013"><th class="cellrowborder" valign="top" width="57.38999999999999%" id="mcps1.2.3.1.1"><p id="p73319319303"><a name="p73319319303"></a><a name="p73319319303"></a>接å£å</p> </th> <th class="cellrowborder" valign="top" width="42.61%" id="mcps1.2.3.1.2"><p id="p133312317306"><a name="p133312317306"></a><a name="p133312317306"></a>æè¿°</p> </th> </tr> </thead> <tbody><tr id="row15331183193011"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p19743328133621"><a name="p19743328133621"></a><a name="p19743328133621"></a>int32_t StartAuthDevice(int64_t requestId, const char* authParams, const DeviceAuthCallback* callbak)</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p16742028153612"><a name="p16742028153612"></a><a name="p16742028153612"></a>指定认è¯å‡æ®ï¼Œè§¦å‘设备互信认è¯ã€‚</p> </td> </tr> <tr id="row7331133163018"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p118111117133515"><a name="p118111117133515"></a><a name="p118111117133515"></a>int32_t ProcessAuthDevice(int64_t requestId, const char* authParams, const DeviceAuthCallback* callbak)</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p151481335193818"><a name="p151481335193818"></a><a name="p151481335193818"></a>å“应认è¯è¯·æ±‚,处ç†è®¤è¯æ•°æ®ã€‚</p> </td> </tr> <tr id="row633283153013"><td class="cellrowborder" valign="top" width="57.38999999999999%" headers="mcps1.2.3.1.1 "><p id="p12534111115353"><a name="p12534111115353"></a><a name="p12534111115353"></a> int32_t CancelAuthRequest(int64_t requestId, const char* authParams)</p> </td> <td class="cellrowborder" valign="top" width="42.61%" headers="mcps1.2.3.1.2 "><p id="p1633173173013"><a name="p1633173173013"></a><a name="p1633173173013"></a>å–æ¶ˆè®¤è¯è¯·æ±‚。</p> </td> </tr> </tbody> </table> ## 相关仓<a name="section1371113476307"></a> **安全å系统** [security\_device\_auth](https://gitee.com/openharmony/security_device_auth)