US 12,450,042 B2
Input driven execution randomisation
Nicholas Gildea, London (GB)
Assigned to Verimatrix UK LTD, London (GB)
Appl. No. 18/282,762
Filed by Verimatrix, Meyreuil (FR)
PCT Filed Jun. 21, 2021, PCT No. PCT/EP2021/066829
§ 371(c)(1), (2) Date Sep. 18, 2023,
PCT Pub. No. WO2022/199864, PCT Pub. Date Sep. 29, 2022.
Claims priority of provisional application 63/166,738, filed on Mar. 26, 2021.
Claims priority of provisional application 63/172,579, filed on Apr. 8, 2021.
Prior Publication US 2024/0168740 A1, May 23, 2024
Int. Cl. G06F 8/41 (2018.01); G06F 21/60 (2013.01); H04L 9/06 (2006.01)
CPC G06F 8/447 (2013.01) [G06F 8/433 (2013.01); G06F 21/602 (2013.01); H04L 9/0662 (2013.01)] 16 Claims
OG exemplary drawing
 
1. A method of protecting a computer program against side-channel attacks, the method comprising:
receiving input source code of the computer program, the source code comprising code instructions of the computer program;
generating a graph structure representative of the code instructions, the graph structure comprising nodes representative of portions of the code instructions and links representative of dependencies between the portions of the code instructions, wherein the nodes can be traversed in a plurality of orders without invalidating the dependencies between the portions of the code instructions;
constructing a plurality of function definitions based on the graph structure, each function definition is configured to execute one or more nodes of the graph structure and each node of the graph structure is executable by one or more function definitions;
transforming the input source code into transformed source code based on combining the graph structure and the plurality of function; and
wherein the method further comprising:
identifying portions of the code instructions and constructing the nodes based on the identified portions of the code instructions;
for each code instruction, identifying dependencies between a respective portion of the code instructions based on inputs into and outputs from the respective portion of the code instructions;
generating the links based on the identified dependencies;
merging subsets of the nodes based on the dependencies between each subset of the nodes;
appending the portions of the code instructions represented by at least a first node of the subset to the code instructions represented by at least a second node of the subset;
removing the at least the second node from the graph structure; and
updating the graph structure based on the merge.