Integrated Optical PUFs
pypuf ships a very basic simulation of integrated optical PUFs [RHUWDFJ13].
- class pypuf.simulation.IntegratedOpticalPUF(n: int, m: int, seed: int)
Very basic simulation of an integrated optical PUF [RHUWDFJ13]. This simulation is derived from the corresponding successful modeling attack [RHUWDFJ13].
To compute a response to a given challenge \(c\), the simulation evaluates the value of
\[\left| c \cdot A \cdot e^{\phi i} \right|^2,\]where \(A \in \mathbb{R}^{n \times m}\) and \(\phi \in \mathbb{R}^{n \times m}\); \(n\) is the challenge length, \(m\) the response length.
By default, the values for \(A\) are chosen mutually independent and uniformly random in \([0,1)\); the values for \(\phi\) are chosen mutually independent and uniformly random in \([0, 2\pi)\).
Warning
This simulation only gives a very rough, idealized idea of how integrated optical PUFs may behave. In particular, the
pypuf.metrics.uniqueness()may be quite different from the behavior real-world implementations. Also, the behavior of response pixels is mutually independent, which differs from behavior reported in the literature [RHUWDFJ13].- __init__(n: int, m: int, seed: int) None
Initializes a simulation for an Integrated Optical PUF with \(n\) challenge bits, \(m\) response bits, with randomness based on the given
seed.
- eval(challenges: ndarray) ndarray
Evaluate the PUF on a list of given challenges.
- Parameters:
challenges – List of challenges to evaluate on. Challenges must be given as
ndarrayof shape (\(N\),challenge_length), where \(N\) is the number of challenges to be evaluated. Evaluating many challenges at once may have performance benefits, to evaluate a single challenge, provide anndarraywith shape (1,challenge_length). In cases wherechallenge_length= 0, an empty array with shape (\(N\), 0) needs to be provided to determine the number of responses requested.- Returns:
ndarray, shape (\(N\),response_length), listing the simulated responses to the challenges in order they were given.