---
# System prepended metadata

title: Matter學習筆記 - Certification
tags: [Matter]

---


# WiSecKey取得DAC
## 流程圖
![](https://hackmd.io/_uploads/ryWuoWdga.png)
1. call api https://inesapi.certifyiddemo.com/v2/auth 取得token
    (1). https://ines.certifyiddemo.com/admin/application 取得API Access Keys
    (2). 再利用app_cert.pem、app_key.pem，當作認證取得token
    
2. 使用得到的token進行其它操作
    * API:Issue certificate (新增cert)
    * API:Get certificate details by ID(查找cert)

3. 透過API取得的資訊再經過pkcs12 解密即可取得Private Key
Step example:
    (1) openssl base64 -A -in 20230926.txt -d -out pkcs12.bin
    (2) openssl pkcs12 -in pkcs12.bin -password pass:12345678 -nocerts -out privkey.pem -nodes
    (3) openssl ec -in privkey.pem -text
    
4. 得到資料，完成

5. 參考資料
    * https://ines.certifyiddemo.com/
    * https://inesdev.certifyiddemo.com/

# BL602
## 概述
* Matter裝置加入Matter網路具DAC(Device Attestation Certificate)證書及私鑰，產生DAC則需要PAA(Product Attestation Authority)、PAI(Product Attestation Intermediate Certificate)等2把金鑰，由PAA產生PAI，再由PAI產生DAC。
* PAA存於DCL(the Distributed Compliance Ledger);PAI証書與DAC証書及私鑰存於Matter裝置中。

![](https://hackmd.io/_uploads/ryS-M6Plp.png)

* 另外，Matter裝置在CSA(Connectivity Standards Alliance)認證通過後會發放CD(Certificate Declaration)證書，生產時存於Matter裝置內，藉以將CD上傳至DCL確認PAI為合法金鑰與否。

## Matter裝置認証流程
![](https://hackmd.io/_uploads/S16G3nDl6.png)
* Device discovery
透過BLE、WiFi搜尋Matter裝置

* Connect to device (PASE)
    PASE(Passcode Authenticated Session Establishment ) 是基於SPAKE2+的簽章和金鑰交換，即發起Commissioning的設備(Commissioner)通過Passcode對Matter裝置(Commissionee)進行認証，基於該交握雙方完成認證和金鑰確認。

    而Commissioner發現Commissionee後，即開始PASE的加密通道建立。

* Get Commissionee information
當建立上PASE加密通道，Commissioner 將從Commissionee 讀取一些基本訊息，例如Basic Information Cluster 中的VID、PID、產品名稱設備序號等。

* Regulatory config
同時，Commissioner 會對Commissionee 進行一些常規資訊配置，例如地點（室內、室外）或地區資訊。

* Commissionee attestation
之後Commissioner 會完成對Commissionee 的設備認證，該流程主要是驗證這是是否為合法的Matter裝置。主要步驟是從裝置取得Device Attestation Certificate (DAC) 和Product Attestation Intermediate (PAI) ，之後完成憑證鏈的驗證，即透過DCL 取得的根憑證完成PAI 憑證的驗證，然後透過PAI 完成DAC 憑證驗簽。然後使用DAC 中公鑰用以同裝置進行簽章/驗簽挑戰。當然過程中也會對VID 、PID 資訊就行驗證。

* Certificate Signing Request (CSR)
再後面Commissioner 會發送憑證簽章請求給Commissionee 讓其準備金鑰對，用以完成後續的NOC憑證簽發，這裡NOC即後續Fabric 內單播通訊Certificate Authenticated Session Establishment (CASE) 的重要憑證。

* Add Node Operational Certificate (NOC)
Commissioner 一旦完成NOC憑證簽發會通過AddNOC進行安裝。

* Network provisioning
對於WiFi 設備或Thread 設備，這裡通過ScanNetworks，AddOrUpdateWifiNetwork 和ConnectNetwork 完成網路的存取。乙太網路設備（網路線）不需要該步驟。

* Operational discovery
一旦Commissionee 完成如上的網路設定和Commissioner 在同一個網路（區域網路/Thread 網路）。Commissioner 開始透過DNS-SD 開始尋找剛加入的Commissionee 裝置。這裡的發現主要就是發現IPv6 位址，一旦知道了IPv6 位址，就可以開始後續的CASE安全會話建立。

* CASE session establishment
Commissioner 一旦發現了新設備，開始透過CASE 進行安全會話的建立，PASE 和CASE 安全機制類似，主要是透過如上步驟安裝的NOC憑證進行雙向認證，然後透過ECDH 協商會話金鑰。

* Commissioning complete
完成所有Commissioning 步驟。

## 套用WiSecKey金鑰

### 1. 從WiSecKey下載PAA\PAI\DAC
### 2. 修改程式碼
* 自有VID、PID
若已有特定的VID及PID的話，則修改"src/platform/bouffalolab/common/FactoryDataProvider.cpp"與"src/platform/bouffalolab/common/FactoryDataProvider.h"

| 金鑰\證書       | 程式碼                     |
|:--------------- | -------------------------- |
| PAI證書         | Pai_Cert_Array             |
| DAC證書         | Dac_Cert_Array             |
| DAC私鑰 | Dac_PrivateKey_Array       |
| CD              | Chip_Test_CD_130D_f001_der |


* 使用Matter測試VID
本次測試WiSecKey測試使用Matter測試用VID，所以修改的地方與自有VID及PID不同，分別於:

src/credentials/examples/ExamplePAI.cpp
| 金鑰\證書   | 程式碼                         |
| ------- | ------------------------------ |
| PAI証書 | kDevelopmentPAI_Cert_FFF1      |
| PAI公鑰 | kDevelopmentPAI_PublicKey_FFF1 |

src/credentials/examples/ExampleDACs.cpp
| 金鑰\證書    | 程式碼                              |
| ------- | ----------------------------------- |
| DAC證書 | kDevelopmentDAC_Cert_FFF1_801F      |
| DAC公鑰 | kDevelopmentDAC_PublicKey_FFF1_801F |
| DAC私鑰 | DevelopmentDAC_PrivateKey_FFF1_801F |

* 使用Matter測試VID時，若是裝置認証須加入CD驗証加須再修改如下:

src/credentials/examples/DeviceAttestationCredsExample.cpp
| 金鑰   | 程式碼            |
| ------ | ----------------- |
| CD證書 | kCdForAllExamples |

src/credentials/tests/CHIPAttCert_test_vectors.cpp
| 金鑰    | 程式碼                             |
| ------- | ---------------------------------- |
| PAA證書 | sTestCert_PAA_FFF1_Cert_Array      |
| PAA公鑰 | sTestCert_PAA_FFF1_PublicKey_Array |
        
* 使用Matter測試VID時，若只驗DAC而不驗CD時，chip-tool須加入"--bypass-attestation-verifier true"跳過CD認証。 
* 使用Matter測試VID時，由於裝置與chip-tool的CD和PAA程式碼會共用，所以要驗CD時，裝置與chip-tool都要編譯。

## 自我練習
請參考[Create Matter device test certificates](https://developers.home.google.com/matter/test/certificates)作法，產生PAA \ PAI \ DAC \ CD。

## 參考資料
* [Connectivity Standards Alliance
Distributed Compliance Ledger and the IoT](https://csa-iot.org/wp-content/uploads/2022/09/DCL_Whitepaper.pdf)
* [Working with the CHIP Tool](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/matter/chip_tool_guide.html)
* [Attestation](https://developers.home.google.com/matter/primer/attestation)
* [Matter Device Attestation](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/protocols/matter/end_product/attestation.html)
* [Matter 系列之 Device Attestation](https://notes.leconiot.com/device_attestation.html)
* [Commissioning](https://developers.home.google.com/matter/primer/commissioning)
* [Matter 系列之 Commissioning](https://notes.leconiot.com/commissioning.html)
* [Matter network commissioning](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/protocols/matter/overview/commissioning.html#ug-matter-network-topologies-commissioning)
* [IP commissioning](https://github.com/project-chip/connectedhomeip/blob/master/docs/guides/ip_commissioning.md)
* [CHIP Certificate Tool](https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/matter/README.html)
* [Create Matter device test certificates](https://developers.home.google.com/matter/test/certificates)
* [Enable Matter in smart home solutions using EdgeLock
SE05x/A5000](https://www.nxp.com/docs/en/application-note/AN13445.pdf)
* [PEM, DER, CRT, and CER: X.509 Encodings and Conversions](https://www.ssl.com/guide/pem-der-crt-and-cer-x-509-encodings-and-conversions/)
* [Base64 to Hex](https://base64.guru/converter/decode/hex)
