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 |