国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

OpenHarmony藍牙自動配對流程分析

系統 OpenHarmony
本文介紹了藍牙協議中SSP認證配對過程及OpenHarmony中相關實現流程,藍牙配對時是否會出現用戶確認提示信息依賴兩端設備能力,同時也依賴業務對安全性的要求;如果業務本身有其它傳輸加密能力,可以指定不認證方式進行連接,避免用戶多次認證導致降低使用體驗,如OpenHarmony軟總線就是采用這種方式建立藍牙連接。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

前言

大家在實際使用藍牙時會發現,有些藍牙設備配對需要輸入配對碼,有些藍牙設備則會自動配對;那這些設備有什么區別,OpenHarmony的藍牙協議棧又是怎么實現的呢?本文對此進行分析和解讀。

藍牙協議分析

SSP(SECURE SIMPLE PAIRING)時當前藍牙協議中最推薦采用的認證配對方案;在SSP配對模式下,認證配對總體分為兩步:IO Capability信息交換和用戶確認。

IO Capability

藍牙設備按照輸入輸出能力分為四類,以設備A作Initiator組合后認證配置方式如下表:

設備B\設備A

DisplayOnly

DisplayYesNo

KeyboardOnly

NoInputNoOutput

DisplayOnly

自動配對

A用戶確認,B自動配對

B顯示數字,A輸入

自動配對

DisplayYesNo

A自動配對,B用戶確認

用戶確認

B顯示數字,A輸入

A自動配對,B用戶確認

KeyboardOnly

A顯示數字,B輸入

A顯示數字,B輸入

輸入passkey

自動配對

NoInputNoOutput

自動配對

B自動配對,A用戶確認

自動配對

自動配對

交換設備IO Capability信息流程如下圖:

MITM Protection

參考藍牙core specification Version 5.4 | Vol 4, Part E, 7.1.29,可以發現IO Capability消息中除了IO_Capability字段還包括Authentication_Requirements字段,該字段同樣影響設備配對流程。

man-in-the-middle(MITM) ,中間人攻擊是一種常見的攻擊手法,藍牙SSP機制在用戶確認模式時可以有效防止中間人攻擊。

協議規定:如果兩臺設備都明確指定不需要進行MITM攻擊保護,設備應該按照自動匹配流程處理。

用戶確認

host收到User_Confirmation_Request消息后需要按照上表中的IO Capability要求用戶確認或自動回復確認信息。

OpenHarmony實現流程

IO Capability信息交換

void GapOnIOCapabilityResponseEvent(const HciIoCapabilityResponseEventParam *eventParam)
{
    LOG_DEBUG("%{public}s:" BT_ADDR_FMT "", __FUNCTION__, BT_ADDR_FMT_OUTPUT(eventParam->bdAddr.raw));
    BtAddr addr = BT_ADDR_NULL;

    GapChangeHCIAddr(&addr, &eventParam->bdAddr, BT_PUBLIC_DEVICE_ADDRESS);

    DeviceInfo *devInfo = NULL;
    devInfo = ListForEachData(GapGetConnectionInfoBlock()->devicelist, GapFindConnectionDeviceByAddr, (void *)&addr);
    if (devInfo != NULL) {
        devInfo->remoteAuthReq = eventParam->authenticationRequirements;
    }

    if (g_authenticationCallback.callback.IOCapabilityRsp) {
        g_authenticationCallback.callback.IOCapabilityRsp(
            &addr, eventParam->IOCapability, g_authenticationCallback.context);
    }
}

GapOnIOCapabilityResponseEvent函數處理對端設備的IOCapability信息,remoteAuthReq保存對端設備的認證要求;同時在ClassicAdapter模塊保存對端設備IOCapability能力;這里比較奇怪的是IOCapability和remoteAuthReq分在兩個模塊保存。

void ClassicAdapter::SaveRemoteIoCapability(const BtAddr &addr, uint8_t ioCapability)
{
    HILOGI("enter");
    RawAddress device = RawAddress::ConvertToString(addr.addr);
    std::shared_ptr<ClassicRemoteDevice> remoteDevice = FindRemoteDevice(device);
    remoteDevice->SetIoCapability(ioCapability);
}

確認處理

void GapOnUserConfirmationRequestEvent(const HciUserConfirmationRequestEventParam *eventParam)
{
    /* ... */
    int localMitmRequired = GAP_MITM_REQUIRED;
    int remoteMitmRequired = GAP_MITM_REQUIRED;
    DeviceInfo *devInfo =
        ListForEachData(GapGetConnectionInfoBlock()->devicelist, GapFindConnectionDeviceByAddr, (void*)&addr);

    if (devInfo != NULL) {
        remoteMitmRequired = devInfo->remoteAuthReq & GAP_MITM_REQUIRED;
        if (devInfo->actionReq != NULL) {
            if (!devInfo->actionReq->needAuthentication && devInfo->actionReq->needUnauthentication) {
                localMitmRequired = GAP_MITM_NOT_REQUIRED;
            }
        } else {
            localMitmRequired = remoteMitmRequired;
        }
    }
    
    if (g_authenticationCallback.callback.userConfirmReq) {
        g_authenticationCallback.callback.userConfirmReq(
            &addr, eventParam->numericValue,localMitmRequired, remoteMitmRequired, g_authenticationCallback.context);
    } else {
        GapUserConfirmationRequestNegativeReply(&addr);
    }
}

GapOnUserConfirmationRequestEvent函數獲取到IO Capability交換流程中保存認證要求,并獲取本設備最近一次連接的認證設置,作為參數傳遞到ClassicAdapter::SSPConfirmReq函數進行處理。

void ClassicAdapter::SSPConfirmReq(const BtAddr &addr, int reqType, int number, 
    int localMitmRequired, int remoteMitmRequired)
{
    HILOGI("reqTyep: %{public}d", reqType);

    RawAddress device = RawAddress::ConvertToString(addr.addr);
    std::shared_ptr<ClassicRemoteDevice> remoteDevice = FindRemoteDevice(device);
    remoteDevice->SetPairConfirmState(PAIR_CONFIRM_STATE_USER_CONFIRM);
    remoteDevice->SetPairConfirmType(reqType);
    int remoteIo = remoteDevice->GetIoCapability();
    if (remoteDevice->GetPairedStatus() == PAIR_CANCELING) {
        UserConfirmAutoReply(device, reqType, false);
    } else if (CheckAutoReply(remoteIo, localMitmRequired, remoteMitmRequired) == true) {
        UserConfirmAutoReply(device, reqType, true);
    } else {
        reqType = CheckSspConfirmType(remoteIo, reqType);
        SendPairConfirmed(device, reqType, number);
    }

}

ClassicAdapter::SSPConfirmReq函數取出本設備及對端設備的IOCapability,調用CheckAutoReply函數結合認證信息進行最終的綜合判斷:如果是自動配對,則由ClassicAdapter::SSPConfirmReq調用UserConfirmAutoReply直接確認;否則向用戶顯示確認信息,要求用戶確認。

bool ClassicAdapter::CheckAutoReply(int remoteIo, int localMitmRequired, int remoteMitmRequired) const
{
    HILOGI("enter");

    bool autoReply = false;
    int localIo = adapterProperties_.GetIoCapability();
    HILOGI("local io capability = %{public}d <==> remote io capability = %{public}d"
        "local mitm = %{public}d <==> remote mitm = %{public}d", localIo, remoteIo, 
        localMitmRequired, remoteMitmRequired);
    
    if (localMitmRequired == GAP_MITM_NOT_REQUIRED && remoteMitmRequired == GAP_MITM_NOT_REQUIRED) {
        return true;
    }

    switch (localIo) {
        case GAP_IO_DISPLAYONLY:
            autoReply = (remoteIo != GAP_IO_KEYBOARDONLY) ? true : false;
            break;
        case GAP_IO_KEYBOARDONLY:
            autoReply = (remoteIo == GAP_IO_NOINPUTNOOUTPUT) ? true : false;
            break;
        case GAP_IO_NOINPUTNOOUTPUT:
            autoReply = true;
            break;
        default:
            break;
    }
    return autoReply;
}

總結

本文介紹了藍牙協議中SSP認證配對過程及OpenHarmony中相關實現流程,藍牙配對時是否會出現用戶確認提示信息依賴兩端設備能力,同時也依賴業務對安全性的要求;如果業務本身有其它傳輸加密能力,可以指定不認證方式進行連接,避免用戶多次認證導致降低使用體驗,如OpenHarmony軟總線就是采用這種方式建立藍牙連接。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2022-06-07 10:40:05

藍牙鴻蒙

2023-04-17 16:10:14

鴻蒙藍牙

2022-11-17 15:26:06

低功耗藍牙鴻蒙

2022-08-29 17:34:05

鴻蒙操作系統

2022-06-07 10:33:29

Camera組件鴻蒙

2014-05-13 13:42:54

工程師流程管理

2021-12-02 10:05:01

鴻蒙HarmonyOS應用

2023-04-26 15:29:35

NAPI模塊鴻蒙

2022-03-18 15:29:02

Harmony鴻蒙架構

2022-01-26 15:07:04

bytrace工具OpenHarmon

2022-05-10 11:02:02

電話子系統鴻蒙

2021-06-28 09:38:50

鴻蒙HarmonyOS應用

2023-10-17 14:02:16

網絡接入鴻蒙

2022-08-19 10:54:47

操作系統鴻蒙

2023-06-01 15:37:14

鴻蒙社區新流程

2017-11-24 08:00:15

Windows 10RS4藍牙設備

2023-08-17 15:01:08

ArkUI布局渲染

2023-02-22 15:11:51

鴻蒙應用簽名

2022-03-21 15:02:05

Harmonyhiperf鴻蒙

2015-08-26 10:14:29

點贊
收藏

51CTO技術棧公眾號

模特精品在线| 日韩一级理论片| 福利视频一二区| 一区二区日韩精品| 99亚偷拍自图区亚洲| 国产亚洲成av人在线观看导航 | 精品久久福利| 欧美熟乱第一页| 在线免费看h| 亚洲久久视频| 久久久久久久久一区| 亚洲一二av| 亚洲精品欧美激情| 成人做爰www免费看视频网站| 成人eeuss影院在线观看| 国产一区二区三区亚洲综合| 久久―日本道色综合久久| 欧美亚洲国产视频| 日韩欧美二区| 国产l精品国产亚洲区久久| 91黄色8090| 亚洲免费伊人电影| 宅男网站在线免费观看| 色综合久久天天综合网| 成人av在线播放观看| 亚洲免费大片| 91传媒在线免费观看| 欧美一级高清大全免费观看| 91精品国产色综合久久不卡98口| 在线免费观看黄色片| 成人av在线资源网站| 精品一区久久久| 在线中文字幕亚洲| 91成人在线视频| 日韩精品一二区| 116极品美女视频在线观看| 久久99在线观看| 日韩视频在线免费播放| 日韩一级淫片| 欧美精品v国产精品v日韩精品| 96久久久久久| 欧美日韩精品国产| 一区二区精品视频| 欧美激情啪啪| 欧美色图在线观看| 亚洲一区日韩精品| 色综合欧美在线视频区| 中文字幕电影在线| 精品美女一区二区| 在线日本制服中文欧美| 亚洲狠狠婷婷综合久久久| 青青草国产精品亚洲专区无| 女人天堂av手机在线| 国产清纯白嫩初高生在线观看91| 黑巨人与欧美精品一区| 国产精品国产精品国产专区不蜜 | 久久精品亚洲国产| 久久看片网站| 亚洲性xxxx| 成年男女免费视频网站不卡| 精品福利av导航| 国产精品迅雷| 国产美女久久精品香蕉69| 亚洲一二三区在线观看| 福利在线一区| 国产精品亚洲αv天堂无码| 亚洲成人www| ga∨成人网| 亚洲欧美色一区| 在线观看一级片| 色婷婷综合激情| 三级在线播放| 国产视频自拍一区| 毛片无码国产| 欧美猛少妇色xxxxx| 天堂成人娱乐在线视频免费播放网站 | 国产日韩在线一区| 午夜影院在线观看国产主播| 亚洲素人一区二区| 国产欧美久久久久久久久| 日本三级久久久| 亚洲精品**不卡在线播he| 里番在线播放| 国产国产精品人在线视| 国产综合色视频| 黄色小说在线播放| 亚洲欧洲精品一区二区| 亚洲欧美日韩第一区| 日本一区免费视频| 国产日韩一区二区三区在线| 嗯~啊~轻一点视频日本在线观看| 性欧美办公室18xxxxhd| 午夜亚洲福利| 午夜电影福利网| 亚洲综合免费观看高清完整版 | 高清一区在线观看| 樱花草国产18久久久久| mm1313亚洲国产精品美女| 亚洲欧美日韩国产中文| 女厕嘘嘘一区二区在线播放 | 日本不卡二区| 91小视频在线观看| 伊人国产在线| 欧美激情aaaa| 久久久加勒比| 国产一区玩具在线观看| av在线一区二区三区| 黄网站免费在线播放| 欧美亚洲成人网| 99久久久久久| 中文字幕在线三区| 亚洲欧美一区二区三区极速播放| 自拍偷拍21p| 亚洲丝袜精品丝袜在线| 嫩草嫩草嫩草嫩草| 欧美劲爆第一页| 在线观看视频一区二区欧美日韩| 99re这里只有精品视频首页| 999精品嫩草久久久久久99| 日韩资源av在线| 欧美色男人天堂| 久久精品高清| 久热av在线| av免费观看久久| 欧美精品色一区二区三区| 日韩香蕉视频| 性感av在线播放| 国产一区二区三区高清| 在线一区二区三区四区| 五月天综合网站| 97看剧电视剧大全| 38少妇精品导航| 日本一区二区免费在线| 亚洲美女炮图| 日韩av综合在线观看| 日韩一区二区精品在线观看| 99精品综合| 伊人在我在线看导航| 一区二区三区我不卡| 91成人免费在线| 综合久久综合| 在线免费观看污| caopor在线视频| 亚洲成人精品影院| japanese色系久久精品| 国产精品免费成人| 欧美成人剧情片在线观看| 国产精品久久久久9999赢消| 欧美一区二区三区在线播放 | hitomi一区二区三区精品| 亚洲精品少妇| 欧美日韩大片免费观看| 天堂视频中文在线| 国产精品激情av在线播放| 99热这里只有精品在线播放| 国产女人水真多18毛片18精品视频| 少妇精品导航| 欧美婷婷精品激情| 精品国产一区二区三区四区精华 | 日韩一区二区三区电影在线观看| 樱桃国产成人精品视频| 亚洲综合另类小说| 亚洲五月六月丁香激情| 欧美丝袜美女中出在线| 欧洲av在线精品| 免费在线黄网| 日韩中文字幕视频在线| 亚洲图片激情小说| 欧美精品一线| **爰片久久毛片| 在线免费观看h| 懂色av影视一区二区三区| 777精品久无码人妻蜜桃| 国产精品嫩草影院久久久| 中文字幕久热精品在线视频| 日韩精品在线私人| 精品国产一区久久| 日韩欧美在线一区二区三区| 精品国产一区二区三区四区四| 亚洲日本青草视频在线怡红院| 盗摄精品av一区二区三区| 蜜桃视频在线一区| a级精品国产片在线观看| 91视频一区二区三区| 黄色永久免费网站| 亚洲精美视频| 欧美第一页在线| 91精品国产乱码久久久久久久久| 亚洲第一av网| 欧美三级免费观看| 91小视频免费看| 一区二区日韩电影| 午夜成人免费视频| 国产麻豆91精品| 希岛爱理av一区二区三区| 日韩影院二区| 国产精品一区二区免费不卡| 国产一二精品视频| 中文字幕+乱码+中文字幕一区| 亚洲一区二区在线观看视频|