## 5 Security Analysis
### BPR Model Analysis  
We sketch the security proof for the session key \(KS=KDF(P_{ID_{O}},T_{ID})\) in the BPR model [15], similar to analyses in [5; 6; 19]. Oracle Setup and Adversarial Capabilities * Standard oracles are assumed: 'Send', 'Execute', 'RevealSessionKey' (for \(KS\)), 'Corrupt(OD\({}_{O}\))' (reveals \(P_{ID_{O}}\), \(C_{RP}\), \(HD_{O}\)), 'Corrupt(GCS)' (reveals \(RPMD_{ID_{O}}\) table), 'Test' (for \(KS\)), 'Hash', 'KDF', 'SymEnc/Dec', 'FuzzyExtractor'. Proof Sketch by Game Hopping  
The proof aims to show that the adversary's advantage \(Adv_{\text{Bio-2 FA-IoD}}^{AKE}(\mathcal{A})\) in distinguishing the real session key from a random one is negligible. * **Game**\(G_{0}\): This is the real AKE security game, where the adversary interacts with honest instances of the protocol and attempts to distinguish a fresh session key from a random string via the 'Test' query. * **Game**\(G_{1}\) (random oracles for hash/KDF): In this game, the hash function \(H\) and the key derivation function \(KDF\) are modeled as ideal random oracles. An adversary's advantage in distinguishing \(G_{1}\) from \(G_{0}\) is negligible, bounded by the collision resistance property of the hash function and the pseudorandomness of the KDF. Specifically, \(|Adv_{G_{0}}(\mathcal{A})-Adv_{G_{1}}(\mathcal{A})|\leq q_{H}^{2}/2^{|H|_{ output}}+q_{KDF}^{2}/2^{|KDF|_{Finger}}\), where \(q_{H}\) and \(q_{KDF}\) are the number of queries to the respective oracles, and \(|H|_{output}\) and \(|KDF|_{range}\) are their output/range sizes. This quantity is negligible for cryptographically secure functions. * **Game**\(G_{2}\) (fuzzy extractor simulation): This game simulates the fuzzy extractor 'Rec' algorithm. The output \(K_{\beta\O}\) of \(Rec(\beta^{\prime}_{O},HD_{O})\) is indistinguishable from a random string if the input biometric sample \(\beta^{\prime}_{O}\) is not sufficiently close to the enrolled \(\beta_{O}\), or if the adversary attempts to guess \(K_{\beta\O}\) from the public helper data \(HD_{O}\). The advantage difference between \(G_{1}\) and \(G_{2}\) is bounded by \(\epsilon_{FE}\), which represents the security of the fuzzy extractor against an adversary predicting its output or the extracted key from public helper data or invalid inputs [5; 12]. This term is also negligible. * **Game**\(G_{3}\) (symmetric cipher indistinguishability): In this game, ciphertexts produced by the symmetric encryption \(E_{KS}(\cdot)\) (used for 'OTAC') are replaced by random strings if the session key \(KS\) is unknown to the adversary. If the session key \(KS\) is known (e.g., through a 'Reveal' query), the simulation perfectly mimics the real game. The difference in advantage between \(G_{2}\) and \(G_{3}\) is bounded by the IND-CPA security of the symmetric encryption scheme \(E\), denoted as \(\epsilon_{SymEnc}\). For a secure scheme like AES-128, \(\epsilon_{SymEnc}\) is negligible. * **Game**\(G_{4}\) (attacking \(KS\) via 'Test' query): Consider the adversary making a 'Test(\(\Pi^{\text{s}}_{OD}\))' query on a fresh session instance for the session key \(KS=KDF(P_{ID_{O}},T_{ID})\). A session is considered \"fresh\" if its session key has not been directly revealed by a 'Reveal' query, and its long-term secrets (\(P_{ID_{O}}\) for the OD) have not been compromised by a 'Corrupt' query on the corresponding principal prior to the session's completion. If \(\mathcal{A}\) has not successfully executed 'Corrupt(OD\({}_{O}\))' for \(U_{O}\) prior to this session becoming complete, then \(P_{ID_{O}}\) remains unknown to \(\mathcal{A}\). Since \(T_{ID}\) is a fresh, unique timestamp for each session, and \(KDF\) is modeled as a random oracle, \(KS\) is computationally indistinguishable from a random string to \(\mathcal{A}\) without knowledge of \(P_{ID_{O}}\). The adversary might try to forge \(M_{1}\) to elicit a response or try to guess \(P_{ID_{O}}\) from \(RPMD_{ID_{O}}\) (if GCS is corrupted). However, \(RPMD_{ID_{O}}=H(RP_{ID_{O}}\|Salt_{1})\) and \(RP_{ID_{O}}=D_{KDF(P_{ID_{O}},Salt_{2})}(C_{RP})\).