text: NLF 0x3A5C742E - feedback function, F F(a,b,c,d,e) = d⊕e⊕ac⊕ae⊕bc⊕be⊕cd⊕de⊕ade⊕ace⊕abd⊕abc Feedback: 𝜑=𝐹(𝑦𝑖31,𝑦𝑖26,𝑦𝑖20,𝑦𝑖9,𝑦𝑖1)⊕𝑦𝑖16 ⊕ 𝑦𝑖0 ⊕𝑘𝑖0 Text: 𝑅𝑖+1=(𝜑,𝑦𝑖31,…,𝑦𝑖1) Key: 𝐾𝑖+1=(𝑘𝑖0,𝑘𝑖63,…,𝑘𝑖1) Feedback: 𝜑=𝐹(𝑦𝑖30,𝑦𝑖25,𝑦𝑖19,𝑦𝑖8,𝑦𝑖0)⊕𝑦𝑖15 ⊕ 𝑦𝑖31 ⊕𝑘𝑖15 Text: 𝑅𝑖+1=(𝑦𝑖30,…,𝑦𝑖0,𝜑) Key: 𝐾𝑖+1=(𝑘𝑖62,…,𝑘𝑖0,𝑘𝑖63) Здесь описаны примеры реализации алгоритма на языке C. Шифрование: # define KeeLoq_NLF 0x3A5C742E # define bit(x,n) (((x)>>(n))&1) # define g5(x,a,b,c,d,e) (bit(x,a)+bit(x,b)*2+bit(x,c)*4+bit(x,d)*8+bit(x,e)*16) u32 KeeLoq_Encrypt (const u32 data, const u64 key){ u32 x = data, r; for (r = 0; r < 528; r++) x = (x>>1)^((bit(x,0)^bit(x,16)^(u32)bit(key,r&63)^bit(KeeLoq_NLF,g5(x,1,9,20,26,31)))<<31); return x; } Расшифровка: u32 KeeLoq_Decrypt (const u32 data, const u64 key){ u32 x = data, r; for (r = 0; r < 528; r++) x = (x<<1)^bit(x,31)^bit(x,15)^(u32)bit(key,(15-r)&63)^bit(KeeLoq_NLF,g5(x,0,8,19,25,30)); return x; } KeeLoq впервые был проанализирован Андреем Богдановым, который использовал метод «скользящей средней» и эффективные линейные приближения.