From f92dcf0f5be295447ba1b8e5c01f7cee385cb663 Mon Sep 17 00:00:00 2001 From: "atul.jha" Date: Wed, 13 Jan 2021 14:32:48 +0100 Subject: [PATCH] Alias and session keys --- trial4/ROMprotocol.c | 6 ++-- trial4/defines.h | 2 +- trial4/main.c | 79 ++++++++++++++++++++++++++++++++++++++++++- trial4/out/main | Bin 23064 -> 23064 bytes 4 files changed, 82 insertions(+), 5 deletions(-) diff --git a/trial4/ROMprotocol.c b/trial4/ROMprotocol.c index eb31ad4..0a9a8e4 100644 --- a/trial4/ROMprotocol.c +++ b/trial4/ROMprotocol.c @@ -156,9 +156,9 @@ if(DEBUG) 0xbe,0x67,0x0a,0xf8,0xf3,0x92,0x0e,0xba, 0x68,0xd1,0x56,0xea,0x34,0x3f,0xbc,0x4f }; - uint8_t * CDIKEY = calloc(1, sizeof(uint8_t)*CDI_KEY_SIZE); + uint8_t * CDIKEY = calloc(1, sizeof(uint8_t)*HKDF_KEY_SIZE); ret = mbedtls_hkdf(md_info, salt, sizeof(salt), CDI, SHA256_DGST_SIZE, - IDENTITY, sizeof(IDENTITY), CDIKEY, CDI_KEY_SIZE); + IDENTITY, sizeof(IDENTITY), CDIKEY, HKDF_KEY_SIZE); if(ret < DIMASUCCESS) { @@ -172,7 +172,7 @@ if(DEBUG) if(DEBUG) { - for(int i = 0; i < CDI_KEY_SIZE; i++) + for(int i = 0; i < HKDF_KEY_SIZE; i++) printf("%hhx",CDIKEY[i]); printf(" : CDIKEY\n"); } diff --git a/trial4/defines.h b/trial4/defines.h index f100963..f4b1ada 100644 --- a/trial4/defines.h +++ b/trial4/defines.h @@ -26,7 +26,7 @@ /* CONSTANTS TO BE USED IN DIMA */ #define SHA256_DGST_SIZE 32 //bytes #define UDS_SIZE 8 -#define CDI_KEY_SIZE 32 +#define HKDF_KEY_SIZE 32 #define HKDF_ALG MBEDTLS_MD_SHA256 #define ECC_CURVE MBEDTLS_ECP_DP_SECP256R1 //mbedtls_ecp_group_id #define RSA_HASH_ID MBEDTLS_MD_SHA256 diff --git a/trial4/main.c b/trial4/main.c index 4c1e1c0..f6e78c4 100644 --- a/trial4/main.c +++ b/trial4/main.c @@ -10,7 +10,84 @@ void main() ret = ROMprotocol(); /*release resources*/ - //alias and session keys, firmware execution + //ALIAS and session keys, firmware execution + + //measure firmware.bin + //measure firmware.conf + //measure .... + //calculate FW_ID - composite hash of all above measurements + //create ALIAS KD_ctx + //keygen + //publish keys + + + //placeholder FW_ID + uint8_t FW_ID[SHA256_DGST_SIZE] = { 0xf3,0x92,0x0e,0x4f,0xbe,0x67,0x0a,0xf8, + 0xf1,0xd9,0x30,0xe2,0x33,0xcc,0x28,0xc5, + 0xba,0x68,0xd1,0x56,0xea,0x34,0x3f,0xbc, + 0xe6,0x66,0xbb,0x1e,0x7b,0xbb,0x38,0x7d }; + + const mbedtls_md_info_t * md_info; + if(!(md_info = mbedtls_md_info_from_type(HKDF_ALG))) + { + perror("DIMAHKDFFAILURE: MD alg type def failed\n"); + exit(DIMAHKDFFAILURE); + } + + uint8_t salt[32] = { 0x68, 0x5e, 0x4e, 0xbe, 0xf2, 0xbe, 0xb9, 0xd5, 0x13, + 0x7c, 0x14, 0x71, 0x20, 0xfb, 0x42, 0x32, 0x54, 0x12, + 0x3e, 0x31, 0xa6, 0x89, 0x4c, 0xe0, 0x58, 0x51, 0x0e, + 0x26, 0xb0, 0xdd, 0x78, 0x55 }; + + uint8_t * FWKEY = calloc(1, sizeof(uint8_t)*HKDF_KEY_SIZE); + ret = mbedtls_hkdf(md_info, salt, sizeof(salt), FW_ID, SHA256_DGST_SIZE, + ALIAS, sizeof(ALIAS), FWKEY, HKDF_KEY_SIZE); + + if(ret < DIMASUCCESS) + { + perror("DIMAHKDFFAILURE\n"); + exit(DIMAHKDFFAILURE); + } + + KeyDrv_context ALIAS_ctx; + ALIAS_ctx.ENT_MODE = DFL_ENT; + ALIAS_ctx.PKC_MODE = DFL_PKC; + ALIAS_ctx.seed = FWKEY; + ALIAS_ctx.phrase = ALIAS; + ALIAS_ctx.KEY_FORM = DFL_FORM; + + printf("Generating Alias keys\n"); + + ret = AsymmKeyGen(&ALIAS_ctx); + if(ret < DIMASUCCESS) + { + perror("DIMAFAILURE : ALIAS key gen failed\n"); + exit(DIMAFAILURE); + } + + + + //Session key creation + //receive session nonce from verifier? + //placeholder + char * nonce = "session1"; + + KeyDrv_context SSN_ctx; + SSN_ctx.ENT_MODE = SW_PRNG; + SSN_ctx.PKC_MODE = DFL_PKC; + SSN_ctx.seed = FWKEY; + SSN_ctx.phrase = nonce; + SSN_ctx.KEY_FORM = DFL_FORM; + + printf("Generating Session keys\n"); + + ret = AsymmKeyGen(&SSN_ctx); + if(ret < DIMASUCCESS) + { + perror("DIMAFAILURE : SESSION key gen failed\n"); + exit(DIMAFAILURE); + } + printf("Successful exit\n"); return; diff --git a/trial4/out/main b/trial4/out/main index 12124116308a6361aee72f0d4eae2183a03751d5..e73f4e2ff5caaac4b3349c8ed206f678f9d21e2a 100755 GIT binary patch delta 4471 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