-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathExtension to Modified Offset FE Analytics.py
More file actions
72 lines (56 loc) · 1.86 KB
/
Extension to Modified Offset FE Analytics.py
File metadata and controls
72 lines (56 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from scipy.stats import binom
import numpy as np
import pandas as pd
import math
def binomial_cdf_sum(n, t, p):
return binom.cdf(t, n, p)
def P_success_given_H(n, t, d_avg):
return binomial_cdf_sum(n, t, d_avg)
def P_H1(n, t, p_bit):
return binomial_cdf_sum(n, t, p_bit)
def P_success_same(n, t, p_bit, d_same, lam, t_lam, d_same_lam):
P_H1_val = P_H1(n, t, p_bit)
P_H2_val = 1 - P_H1_val
P_S_H1 = P_success_given_H(n, t, d_same)
P_S_H2 = P_success_given_H(lam, t_lam, d_same_lam)
return P_S_H1 * P_H1_val + P_S_H2 * P_H2_val
def P_success_diff(n, t, p_bit, d_diff, lam, t_lam, d_diff_lam):
P_H1_val = P_H1(n, t, p_bit)
P_H2_val = 1 - P_H1_val
P_S_H1 = P_success_given_H(n, t, d_diff)
P_S_H2 = P_success_given_H(lam, t_lam, d_diff_lam)
return P_S_H1 * P_H1_val + P_S_H2 * P_H2_val
# Parameters
m = 9
n = 2**m
s = 6
lam = 2**s
p_bit_same = 0.15
p_bit_diff = 0.5
d_same = 0.1
d_same_lam = 0.1
d_diff = 0.5
d_diff_lam = 0.5
t_range = range(4, 64, 4)
t_lam_range = range(2, 32, 1)
results = []
for t in t_range:
for t_lam in t_lam_range:
P_succ_same = P_success_same(n, t, p_bit_same, d_same, lam, t_lam, d_same_lam)
P_succ_diff = P_success_diff(n, t, p_bit_diff, d_diff, lam, t_lam, d_diff_lam)
FRR = 1 - P_succ_same
FAR = P_succ_diff
results.append({
"t": t,
"t_lam": t_lam,
"P_succ_same": round(P_succ_same, 5),
"FRR": round(FRR, 5),
"FAR": round(FAR, 10),
f"Bits of security": min(n-m*t, n - lam),
"Bits of c_lam security": lam - s*t_lam,
"Biometric bits of security": -round(math.log2(FAR),5)
})
FRR = 0
FAR = 0
df = pd.DataFrame(results)
print(df.to_string(index=False))