Hi all TFM experts, 近期我在移植psa-arch-tests到我们的板子上,想看下functional api的测试结果。 TFM用的是1.1的版本,psa-arch-tests 用的是master分支,代码取到 1f96094734897674fa907fba2050bc52e1b3d0fe 这个commit. mbedtls使用的分支是2.23.0。
在测试crypto 的 c021 ,即psa_key_derivation_output_key的测试时,看结果是FAIL的,看了下c021下的test_data.h,check1数组前面两项的信息如下, static const test_data check1[] = { {"Test psa_key_derivation_output_key - Key\n", PSA_KEY_TYPE_DERIVE, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, 0x5F, 0xC9, 0x77}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), PSA_KEY_DERIVATION_INPUT_SECRET, 32, {0}, 0, PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_SUCCESS },
{"Test psa_key_derivation_output_key - Info\n", PSA_KEY_TYPE_DERIVE, {0x49, 0x8E, 0xC7, 0x7D, 0x01, 0x95, 0x0D, 0x94, 0x2C, 0x16, 0xA5, 0x3E, 0x99, 0x5F, 0xC9, 0x77}, AES_16B_KEY_SIZE, PSA_KEY_USAGE_DERIVE, PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(PSA_ALG_SHA_256)), PSA_KEY_DERIVATION_INPUT_INFO, 32, "This is the info", 16, PSA_KEY_TYPE_AES, BYTES_TO_BITS(AES_32B_KEY_SIZE), PSA_KEY_USAGE_EXPORT, PSA_ALG_CTR, PSA_SUCCESS },
秘钥派生的算法使用的是PSA_ALG_HKDF(PSA_ALG_SHA_256),在mbedtls库中,使用HKDF算法时,在读取输出即调用 psa_key_derivation_output_bytes或者psa_key_derivation_output_key时,内部调用到 psa_key_derivation_hkdf_read时会检查两个必要的条件,一个是是否已输入key,一个是是否已输入info,如果只输入一个,就返回BAD_STATE。
但是上面 check1的前两项都是只输入一个项, check1的第一项是只输入key, 第二项是只输入info,所以应该返回 BAD_STATE,不应该是 PSA_SUCCESS。
在psa arch tests crypto的 c020测试中早期的版本也有类似的问题,不过最新的代码已变化为输入key和info 这两个量后才去读取派生的结果。
在网上也了解了下HKDF的介绍,也提到了key和info这两个必要的输入:
如果使用TFM默认的 mbedtls库,crypto的这个测试应该是通不过的,因为mbedtls最新的版本,在读取派生结果时,依然要检测key和info是否都已输入。请帮check下,是我理解的不对,还是crypto 的 c021 这个case不适合mbedtls软算法库。
以上信息,感谢TFM的各位专家,期盼你们的回复
谢谢!
tf-m@lists.trustedfirmware.org