PUF Data Sets

pypuf includes a number of data sets which have been published in the scientific literature on PUFs. The data is not downloaded along with pypuf when it is installed, instead, it is automatically fetched on first access.

For example, pypuf includes an FPGA-implemented 64-bit 4-XOR Arbiter PUF [MTZAA20]:

>>> import pypuf.io
>>> pypuf.io.MTZAA20.xor_arbiter_puf_4_xor
<CRP Set available from https://zenodo.org/record/5215875/files/MTZAA20_4XOR_64bit_LUT_2239B_attacking_1M.txt.npz?download=1, not fetched yet>

The data is automatically fetched on first use, e.g. to compute the bias of the responses:

>>> import pypuf.metrics
>>> pypuf.metrics.bias_data(pypuf.io.MTZAA20.xor_arbiter_puf_4_xor.responses)
array([[0.03495]])

As CRP sets may have large size and significnat download time, pypuf logs a warning message when fetching CRPs, which include URL and file size (if known):

Fetching CRPs (9.9MiB) from https://zenodo.org/record/5215875/files/MTZAA20_4XOR_64bit_LUT_2239B_attacking_1M.txt.npz?download=1

Hybrid Boolean Network [CCPG21]

Hybrid Boolean Networks can be used as PUFs as described by Charlot et al. [CCPG21]. In pypuf, there are CRPs included for 8 different PUF instances. Each instance is measured on the same set of 1002 challenges, where each challenge is measured 100 times. The measurement time is chosen as optimal (cf. discussion in the paper).

pypuf Object PUF Type Implementation Amount Challenge Length Response Length Repeated Measurements
pypuf.io.CCPG21.hbn_board_1 Hybrid Boolean Network FPGA 1002 256 256 100
pypuf.io.CCPG21.hbn_board_2 Hybrid Boolean Network FPGA 1002 256 256 100
pypuf.io.CCPG21.hbn_board_3 Hybrid Boolean Network FPGA 1002 256 256 100
pypuf.io.CCPG21.hbn_board_4 Hybrid Boolean Network FPGA 1002 256 256 100
pypuf.io.CCPG21.hbn_board_5 Hybrid Boolean Network FPGA 1002 256 256 100
pypuf.io.CCPG21.hbn_board_6 Hybrid Boolean Network FPGA 1002 256 256 100
pypuf.io.CCPG21.hbn_board_7 Hybrid Boolean Network FPGA 1002 256 256 100
pypuf.io.CCPG21.hbn_board_8 Hybrid Boolean Network FPGA 1002 256 256 100

64-bit Interpose PUF [AM21]

The Interpose PUF provided consists of one 64-bit Arbiter PUF in the top layer and five 65-bit Arbiter PUFs in the bottom layer. The challenges of pypuf.io.AM21.interpose_puf and pypuf.io.AM21.arbiter_puf_top are identical; the challenges to the bottom Arbiter PUFs correspond to the original challenges interposed with the responses of the top Arbiter PUF.

The pypuf.io.AM21.interpose_puf CRP data is provided for convenience only, it can also be derived from the other data sets. Of course, also (1,x)-Interpose PUFs can be build for x < 5.

pypuf Object PUF Type Implementation Amount Challenge Length Response Length Repeated Measurements
pypuf.io.AM21.arbiter_puf_top Arbiter PUF FPGA 1M 64 1 1
pypuf.io.AM21.arbiter_puf_bottom_0 Arbiter PUF FPGA 1M 65 1 1
pypuf.io.AM21.arbiter_puf_bottom_1 Arbiter PUF FPGA 1M 65 1 1
pypuf.io.AM21.arbiter_puf_bottom_2 Arbiter PUF FPGA 1M 65 1 1
pypuf.io.AM21.arbiter_puf_bottom_3 Arbiter PUF FPGA 1M 65 1 1
pypuf.io.AM21.arbiter_puf_bottom_4 Arbiter PUF FPGA 1M 65 1 1
pypuf.io.AM21.interpose_puf (1,5)-Interpose PUF FPGA 1M 64 1 1

64-bit XOR Arbiter PUF [MTZAA20]

pypuf Object PUF Type Implementation Amount Challenge Length Response Length Repeated Measurements
pypuf.io.MTZAA20.xor_arbiter_puf_4_xor 4-XOR Arbiter PUF FPGA 1M 64 1 1
pypuf.io.MTZAA20.xor_arbiter_puf_5_xor 5-XOR Arbiter PUF FPGA 1M 64 1 1
pypuf.io.MTZAA20.xor_arbiter_puf_6_xor 6-XOR Arbiter PUF FPGA 1M 64 1 1
pypuf.io.MTZAA20.xor_arbiter_puf_7_xor 7-XOR Arbiter PUF FPGA 5M 64 1 1
pypuf.io.MTZAA20.xor_arbiter_puf_8_xor 8-XOR Arbiter PUF FPGA 5M 64 1 1
pypuf.io.MTZAA20.xor_arbiter_puf_9_xor 9-XOR Arbiter PUF FPGA 5M 64 1 1