14 Replies Latest reply on Aug 27, 2020 11:35 PM by XinghaoZ_26

    Secure的做法

    YaTr_3516311

      Hi,

       

      两个蓝牙产品。A是master,用来scan B并且connect B后获取B的数据;B是slaver,主要是advertising. 我想做sercure的功能。

      关于这个secure的功能

      1. 是不是可以对 connect的部分或者是数据通信的部分做secure?分别有什么example吗

      2. 之前有介绍过while list的功能,是针对 connect部分的,但是前提是要知道对端地址,这个方法可能不适合我们。

      3. 我再wiced_security.h的文档里有发现关于AES的API,但没有这部分的example和文档,能介绍一下这部分内容是如何应用的吗

        • 1. Re: Secure的做法
          XinghaoZ_26

          请问你们设备的IO Capability是怎样的?连接的部分如果要做加密,可以采用passkey的方式,对端必须输入密码才可以建立连接。

           

          数据通信部分,只要在连接的过程中需要进行配对和authentication的,底层都会对通信数据进行加密。

          • 2. Re: Secure的做法
            YaTr_3516311

            有相关的文档和例子进行介绍吗?我们这边研究一下

            • 3. Re: Secure的做法
              XinghaoZ_26

              这一部分内容都是蓝牙spec上规定好的,请参考spec vol 3, part H, 2.3。IO Capability和连接方式的对应关系,位于spec vol 3, part H, 2.3.5.1 Table 2.8.

              • 4. Re: Secure的做法
                YaTr_3516311

                因为我们客户提到了AES,然后我发现wiced_security.h的文档里有发现关于AES的API,但没有例子。所以想问一下这个AES的应用是?

                • 5. Re: Secure的做法
                  XinghaoZ_26

                  蓝牙在底层通讯的时候,通过IO Capability中的配置,会使用AES的加密方式。

                  你看到的API是供应用层使用的,可以在应用层对数据进行加密,然后到对端再使用同样的算法解密,之前有客户用过,但是我们这边没有例程。

                  • 6. Re: Secure的做法
                    YaTr_3516311

                    你看到的API是供应用层使用的,可以在应用层对数据进行加密,然后到对端再使用同样的算法解密,之前有客户用过,但是我们这边没有例程。


                    我们客户也想用这个,在发送数据的过程中,对这个数据进行加密。能不能提供点文档或者例程啊。给点方向

                    • 7. Re: Secure的做法
                      YaTr_3516311

                      另外一个问题, AES API 是否能用于20706,我在网页上看到这个API只能用于 20737 ?

                      • 8. Re: Secure的做法
                        XinghaoZ_26

                        这些API在20706上不可用,我查了下底层,没有这些API的定义,如果要用加密功能,需要自己定义对应的API。

                        请参考apps\snip\mesh\peerapps\Android\src\MeshApp\meshcore\src\main\jni\mesh_libs\aes.cpp文件中的应用,里面有对应的例子,你可以将里面的code复制到自己的工程里,实现加解密的过程。

                        • 9. Re: Secure的做法
                          YaTr_3516311

                          Hi Owen,

                           

                          基于客户的时间要求,以上的应用对于我们来说(包括自己理解,写API和测试)很困难。能否基于hci_audio_gateway的工程,写一下简单的示例。万分感谢

                          • 10. Re: Secure的做法
                            YaTr_3516311

                            Hi Owen,

                             

                            感谢你的demo。我想问一下加密的数据长度一定是16的倍数吗?还是可以是任何长度

                            • 11. Re: Secure的做法
                              XinghaoZ_26

                              默认是16个字节,是由下面的宏定义决定的

                              #define N_ROW                   4

                              #define N_COL                   4

                              #define N_BLOCK   (N_ROW * N_COL)

                               

                              你可以修改一下这个参数看看。

                              如果你的数据不足16个,建议通过补齐的方式增加到16个字节。

                              • 12. Re: Secure的做法
                                YaTr_3516311

                                Hi owen,

                                 

                                我想做多个block的加密和解密。参考您建议的代码后,写了如下代码,测试后,发现decode出来的数据好像不对。请指导一下

                                 

                                 

                                测试结果如下:

                                 

                                问一下,是

                                return_type aes_cbc_decrypt( const unsigned char *in, unsigned char *out,

                                                         int n_block, unsigned char iv[N_BLOCK], const aes_context ctx[1] )的函数的iv是要给一个16byte的数组temp吗?

                                • 13. Re: Secure的做法
                                  YaTr_3516311

                                  Hi Owen,

                                   

                                  是我没有把iv[N_BLOCK]这个参数理解好。这个是初始化向量,应该是一个固定值,我现在把这个值写成固定值后,就可以了。感谢你的支持。

                                   

                                      unsigned char encryption_message_buffer[16]={0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};

                                      unsigned char decryption_message_buffer[16]={0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};

                                   

                                   

                                  但我还有一个问题想跟你确认一下,iv[N_BLOCK]这个固定值,我是自定义成{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};的,应该没有问题吧?

                                  • 14. Re: Secure的做法
                                    XinghaoZ_26

                                    可以写成固定值的,也可以在加密的时候进行修改,在解密的时候使用同样的值就可以了。