Secure的做法

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
YaTr_3516311
Level 5
Level 5
25 sign-ins First solution authored 100 replies posted

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和文档,能介绍一下这部分内容是如何应用的吗

0 点赞
1 解答
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

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

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

在原帖中查看解决方案

0 点赞
14 回复数
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

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

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

0 点赞

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

0 点赞
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

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

0 点赞

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

0 点赞
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

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

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

0 点赞

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


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

0 点赞

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

0 点赞
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

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

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

0 点赞

Hi Owen,

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

0 点赞

Hi Owen,

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

0 点赞
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

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

#define N_ROW                   4

#define N_COL                   4

#define N_BLOCK   (N_ROW * N_COL)

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

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

0 点赞

Hi owen,

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

pastedImage_0.png

pastedImage_1.png

测试结果如下:

pastedImage_2.png

问一下,是

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吗?

0 点赞

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};的,应该没有问题吧?

0 点赞
Owen_Zhang123
Moderator
Moderator
Moderator
5 questions asked 500 solutions authored 250 sign-ins

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

0 点赞