# US 2001/0025344 A1 · Non-deterministic method for secured data transfer

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 2001/0025344 A1
- Document ID: US20010025344A1
- Status: Published application
- Kind: A1
- Application number: 09/738,548
- Filed: 2000-12-15
- Published: 2001-09-27
- Earliest claimed: 1999-12-15
- Assignees: STMicroelectronics S.r.l.
- Inventors: Yannick Teglia
- Web page: https://patentgrep.com/patent/US20010025344A1

## CPC

- G06F 21/6218: {to a system of files or objects, e.g. local or distributed file system or database}
- G06F 21/755: {with measures against power attack}
- G06F 2207/7219: Countermeasures against side channel or fault attacks
- G06F 2221/2123: Dummy operation
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

A method is provided for secured transfer of data from a first memory containing the data element to a second memory through a data bus that is connected between the first memory and the second memory. According to the method, a secret N-byte data element is transferred byte-by-byte through the data bus, with each byte transiting at least once on the data bus. Before each transfer of a byte of the secret data element, a current index ranging from 0 to N−1 is randomly chosen, with the current index corresponding to a place value of the byte to be transferred. At each transfer of a byte of the secret data element with a place value equal to the current index, a corresponding bit of an N-byte loading indicator is modified as a function of a loading mode, with the loading mode being an integer ranging from 0 to a first constant. The transfer of the secret data element is ended when the loading indicator takes a predetermined value.

## Claims

### Claim 1

A method for secured transfer of data from a first memory containing the data element to a second memory through a data bus that is connected between the first memory and the second memory, said method comprising the steps of:
transferring a secret N-byte data element byte-by-byte through the data bus, with each byte transiting at least once on the data bus;
wherein the transferring step includes the sub-steps of:
before each transfer of a byte of the secret data element, randomly choosing a current index ranging from 0 to N−1, the current index corresponding to a place value of the byte to be transferred;
at each transfer of a byte of the secret data element with a place value equal to the current index, modifying a corresponding bit of an N-byte loading indicator as a function of a loading mode, the loading mode being an integer ranging from 0 to a first constant; and
ending the transfer of the secret data element when the loading indicator takes a predetermined value.

### Claim 2 (depends on 1)

The method as defined in claim 1, wherein the transferring step further includes the sub-step of randomly choosing the loading mode before each transfer of a byte of the secret data element.

### Claim 3 (depends on 1)

The method as defined in claim 1,
wherein in the sub-step of modifying a corresponding bit of an N-byte loading indicator, the bit of the loading indicator with a place value equal to the current index takes a first value if the loading mode is equal to a second constant and, if not, takes a second value, and
the second constant is less than or equal to the first constant.

### Claim 4 (depends on 3)

The method as defined in claim 3, wherein the first and second constants are chosen randomly during initialization.

### Claim 5 (depends on 3)

The method as defined in claim 3, wherein the first and second constants are read from one of the memories.

### Claim 6 (depends on 3)

The method as defined in claim 3, wherein the first and second constants are equal.

### Claim 7 (depends on 1)

The method as defined in claim 1, wherein the transferring step further includes the sub-steps of:
transferring the byte of the secret data element with a place value equal to the current index if the loading mode is equal to a second constant; and
transferring a byte of a false data element with a place value equal to the current index if the loading mode is not equal to the second constant.

### Claim 8 (depends on 7)

The method as defined in claim 7, wherein the first and second constants are chosen randomly during initialization.

### Claim 9 (depends on 7)

The method as defined in claim 7, wherein the first and second constants are read from one of the memories.

### Claim 10 (depends on 7)

The method as defined in claim 7, wherein the first and second constants are equal.

### Claim 11

A method for secured transfer of data from a first memory containing the data element to a second memory through a data bus that is connected between the first memory and the second memory, so as to transfer a secret N-byte data element byte-by-byte through the data bus, with each byte transiting at least once on the data bus, said method comprising the steps of:
randomly choosing a current index ranging from 0 to N−1;
choosing a loading mode ranging from 0 to a first constant;
loading the byte of the secret data element that has a place value equal to the current index in the second memory, and modifying a bit of a loading indicator that has a place value equal to the current index as a function of the loading mode;
performing a first test to compare the value of the loading indicator with a predetermined value; and
based on the result of the first test, either repeating the previous steps or ending the transfer.

### Claim 12 (depends on 11)

The method as defined in claim 11, wherein the loading step includes the sub-steps of:
performing a second test to compare the value of the loading mode with a second constant;
if the second test is positive, performing the following steps:
reading the byte of the secret data element with a place value equal to the current index from the first memory, and storing the byte in a register;
writing the byte in the register to the second memory; and
setting at “1” the bit of the loading indicator with a place value equal to the current index; and
if the second test is negative, performing the following steps:
reading the byte of the secret data element with a place value equal to the current index from the first memory, and storing the byte in a register;
writing the byte in the register to the second memory; and
setting at “0” the bit of the loading indicator with a place value equal to the current index.

### Claim 13 (depends on 11)

The method as defined in claim 11, wherein the loading step includes the sub-steps of:
performing a second test to compare the value of the loading mode with a second constant;
if the second test is positive, performing the following steps:
reading the byte of the secret data element with a place value equal to the current index from the first memory, and storing the byte in a register;
writing the byte in the register to the second memory; and
setting at “1” the bit of the loading indicator with a place value equal to the current index; and
if the second test is negative, performing the following steps:
testing the bit of the loading indicator with a place value equal to the current index;
if the bit is equal to a predetermined value, performing the following steps:
reading the byte of the secret data element with a place value equal to the current index from the first memory, and storing the byte in a register;
writing the byte in the register to the second memory; and
setting at “0” the bit of the loading indicator with a place value equal to the current index; and
if the bit is not equal to the predetermined value, ending the loading step.

### Claim 14 (depends on 11)

The method as defined in claim 11 wherein the loading step includes the sub-steps of:
performing a second test to compare the value of the loading mode with a second constant;
if the second test is positive, performing the following steps:
reading the byte of the secret data element with a place value equal to the current index from the first memory, and storing the byte in a register;
writing the byte in the register to the second memory; and
setting at “1” the bit of the loading indicator with a place value equal to the current index; and
if the second test is negative, performing the following steps:
reading a byte of a false data element with a place value equal to the current index from the first memory, and storing the byte in a register;
writing the byte in the register to the second memory; and
setting at “0” the bit of the loading indicator with a place value equal to the current index.

### Claim 15 (depends on 11)

The method as defined in claim 11, wherein the loading step includes the sub-steps of:
performing a second test to compare the value of the loading mode with a second constant;
if the second test is positive, performing the following steps:
reading the byte of the secret data element with a place value equal to the current index from the first memory, and storing the byte in a register;
writing the byte in the register to the second memory; and
setting at “1” the bit of the loading indicator with a place value equal to the current index; and
if the second test is negative, performing the following steps:
testing the bit of the loading indicator with a place value equal to the current index;
if the bit is equal to a predetermined value, performing the following steps:
reading a byte of a false data element with a place value equal to the current index from the first memory, and storing the byte in a register;
writing the byte in the register to the second memory; and
setting at “0” the bit of the loading indicator with a place value equal to the current index; and
if the bit is not equal to the predetermined value, ending the loading step.

### Claim 16

A programmable circuit comprising:
a data bus;
a read-only memory containing an N-byte data element to be transferred, the read-only memory being coupled to the data bus;
a writable memory coupled to the data bus;
at least one control unit coupled to the read-only memory and the writable memory; and
a random number generator coupled to the control unit, the random number generator supplying at least one random number to the control unit during a transfer of the N-byte data element,
wherein the control unit controls the data bus such that bytes of the data element transit byte-by-byte through the data bus, with each byte transiting at least once through the data bus,
before each transfer of a byte of the secret data element, the control unit randomly chooses a current index ranging from 0 to N−1, the current index corresponding to a place value of the byte to be transferred,
at each transfer of a byte of the secret data element with a place value equal to the current index, the control unit modifies a corresponding bit of an N-byte loading indicator as a function of a loading mode, the loading mode being an integer ranging from 0 to a first constant, and
the control unit ends the transfer of the secret data element when the loading indicator takes a predetermined value.

### Claim 17 (depends on 16)

The programmable circuit as defined in claim 16, wherein the control circuit randomly chooses the loading mode before each transfer of a byte of the secret data element.

### Claim 18 (depends on 16)

The programmable circuit as defined in claim 16,
wherein the control unit transfers the byte of the secret data element with a place value equal to the current index if the loading mode is equal to a second constant, and
the control unit transfers a byte of a false data element with a place value equal to the current index if the loading mode is not equal to the second constant.
