LPCXpresso55S69-EVK - PUF to generate consistent output if input is consistent?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

LPCXpresso55S69-EVK - PUF to generate consistent output if input is consistent?

913 Views
hmo058
Contributor I

Hello!

Is it possible to use the PUF functionality to generate a consistent input given a consistent input?

The closest I have come to a solution is to use SetKey with a provided key and use the output keycode as a consistent input to retrieve the initially provided key acting as the consistent response.

I tried using SetKey multiple times with a consistent user key, but every time it would give me a different keycode. Any way to satisfy my request? I realize it's not really the intended usage, but I have a niche requirement.

Regards, Henrik

0 Kudos
Reply
2 Replies

845 Views
hmo058
Contributor I

Yeah, I attempted to make two calls in a sequential manner like this with the exact same inputs and it still produces different key codes. I am assuming there is some intended random element included? PUF_Setup_Start is simply a wrapper function I made.

@Alice_Yang Mentioning since I managed to reply to my own topic...

 

 

PRINTF("Received SETKEY message with key:\r\n");

for(int i = MESSAGE_HEADER_LENGTH; i < 40; i++)
{
	PRINTF("%d", g_rxBuffer[i]);
	PRINTF(" - ");
}
PRINTF("\r\n");

// Want to LOAD the activation code from the 3rd last page of flash memory.
destAdrss = flash_properties.pflashBlockBase + (flash_properties.pflashTotalSize - (PAGE_INDEX_FROM_END * flash_properties.PflashPageSize));

// LOAD AC
FLASH_Read(&flashInstance, destAdrss, activationCode, sizeof(activationCode));

PUF_Setup_Start(PUF, activationCode, sizeof(activationCode));

result = PUF_SetUserKey(PUF, kPUF_KeyIndex_01, &g_rxBuffer[MESSAGE_HEADER_LENGTH], 32, keyCode0, sizeof(keyCode0));
if (result != kStatus_Success)
{
	PRINTF("Error setting user key!\r\n");
	exit(1);
}

PRINTF("Sending KEYCODE0 (result of set key in index 1):\r\n");

for(int i = 0; i < 52; i++)
{
	PRINTF("%d", keyCode0[i]);
	PRINTF(" - ");
}
PRINTF("\r\n");

PRINTF("SECOND CALL BELOW:\r\n");
result = PUF_SetUserKey(PUF, kPUF_KeyIndex_01, &g_rxBuffer[MESSAGE_HEADER_LENGTH], 32, keyCode0, sizeof(keyCode0));
if (result != kStatus_Success)
{
	PRINTF("Error setting user key!\r\n");
	exit(1);
}

PRINTF("Sending KEYCODE0 (result of set key in index 1):\r\n");

for(int i = 0; i < 52; i++)
{
	PRINTF("%d", keyCode0[i]);
	PRINTF(" - ");
}
PRINTF("\r\n");

 

 

 

 

 Output:

 

 

 

Received SETKEY message with key:
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 
Sending KEYCODE0 (result of set key in index 1):
0 - 1 - 0 - 4 - 97 - 14 - 185 - 139 - 138 - 60 - 42 - 103 - 80 - 124 - 27 - 179 - 65 - 216 - 246 - 17 - 62 - 184 - 135 - 134 - 219 - 59 - 85 - 247 - 254 - 11 - 135 - 220 - 36 - 95 - 126 - 175 - 11 - 171 - 175 - 194 - 57 - 201 - 6 - 160 - 175 - 76 - 224 - 164 - 205 - 127 - 234 - 17 - 
SECOND CALL BELOW:
Sending KEYCODE0 (result of set key in index 1):
0 - 1 - 0 - 4 - 138 - 64 - 181 - 222 - 23 - 219 - 3 - 35 - 177 - 98 - 99 - 131 - 196 - 8 - 110 - 233 - 143 - 30 - 124 - 20 - 165 - 91 - 248 - 64 - 54 - 168 - 165 - 160 - 93 - 75 - 166 - 36 - 60 - 113 - 252 - 43 - 157 - 121 - 109 - 156 - 250 - 0 - 172 - 175 - 184 - 90 - 203 - 77 - 

 

 

 

0 Kudos
Reply

861 Views
Alice_Yang
NXP TechSupport
NXP TechSupport

Hello @hmo058 

"I tried using SetKey multiple times with a consistent user key, but every time it would give me a different keycode."

->> Do you enroll only one time or enroll every time. If only one time, and other parameters all the same, the output should the same.

 

BR

Alice

0 Kudos
Reply