Układy kryptograficzne z uŝyciem rejestrów FSR
Algorytmy kryptograficzne uŝywane w systemach telekomunikacyjnych własność modulo 2 funkcji XOR P K K = P = P 2
Rejestr z liniowym sprzęŝeniem zwrotnym FSR - inear Feedback Shift Register Sekwencja wektorów generowana przez FSR jest okresowa Okres zaleŝy od: struktury sprzęŝenia (c n,c n-,...,c ) stanu początkowego n n- Generatory wytwarzające sekwencję o maksymalnej długości (maximum-cycle FSRs): okres o długości dla stanu początkowego... okres o długości 2 n - dla kaŝdego innego stanu początkowego 3
Realizacje FSR Rejestr FSR o długości 4 ze współczynnikami c=: a) z wewnętrznym sprzęŝeniem zwrotnym b) z zewnętrznym sprzęŝeniem zwrotnym 4
Właściwości rejestrów FSR JeŜeli FSR ze sprzęŝeniem zewnętrznym opisanym współczynnikami c n,c n-,...,c wytwarza sekwencję o maksymalnej długości, to FSR ze sprzęŝeniem wewnętrznym opisanym współczynnikami c n,c n-,...,c takŝe wytwarza sekwencję o maksymalnej długości (i odwrotnie). JeŜeli FSR ze sprzęŝeniem opisanym współczynnikami c n,c n-,...,c wytwarza sekwencję o maksymalnej długości, to FSR ze sprzęŝeniem opisanym współczynnikami c,c,...,c n takŝe wytwarza sekwencję o maksymalnej długości. 5
Rejestry FSR o minimalnej liczbie sprzęŝeń zwrotnych la kaŝdego n 2 istnieje FSR wytwarzający sekwencję o maksymalnej długości zwykle istnieje więcej niŝ jeden FSR o tej własności szczególnie interesujące układy FSR o najmniejszej złoŝoności (najmniejszej liczbie bramek XOR) la kaŝdego n 68 istnieje FSR wytwarzający sekwencję o maksymalnej długości, którego sprzęŝenie zawiera nie więcej niŝ 3 bramki XOR (2-wejściowe) 6
Rejestry FSR o minimalnej liczbie sprzęŝeń zwrotnych długość rejestru wektor współczynników (oktalnie) liczba wejść do XOR 3 3 2 4 23 2 5 45 2 6 3 2 7 2 2 8 435 4 9 2 2 2 2 45 2 2 23 4 3 233 4... Rejestry o długości do 68 na stronie http://www.xilinx.com/bvdocs/appnotes/xapp52.pdf 7
Rejestry FSR w FPGA W niektórych układach FPGA przerzutniki inicjowane są wartością, stąd rejestr FSR zbudowany na bramkach XOR ma wówczas okres =. Aby zawartość rejestru.. była jedną z sekwencji 2 n -, naleŝy uŝyć bramek XNOR (not XOR). 8
Rejestr FSR o długości 6 V IBRARY ieee; USE ieee.std_logic_64.a; ENTITY lfsr6 IS PORT (clk : IN ST_OGIC; y : OUT ST_OGIC); EN lfsr6; ARCITECTURE lfsr_arch OF lfsr6 IS SIGNA r : ST_OGIC_VECTOR(5 OWNTO ); Ile komórek 4we/wy zajmie ten układ? BEGIN Reg: PROCESS (clk) BEGIN IF clk'event AN (clk = '') TEN r(4 OWNTO ) <= r(5 OWNTO ); r(5) <= r() XNOR r() ; EN IF; EN PROCESS Reg; y <= r(); EN lfsr_arch; 9
Rejestr FSR o długości 6 Verilog module lfsr6(clk, y); input clk; output y; wire y; reg [5:] r; always@(posedge clk) begin r[5:] <= r[4:]; r[] <= r[5] ~^ r[4]; end assign y = r[5]; endmodule
Rejestr FSR o długości 6 symulacja
Rejestr FSR o n-bitowym przesunięciu Aby otrzymać n-bitów pseudolosowych naleŝy FSR taktować n razy zegarem. Nie naleŝy brać n bitów z FSR do kodowania, poniewaŝ mają słabe własności pseudolosowe. MoŜliwe jednak jest uzyskanie n-bitów w jednym cyklu zegara. Uzyskuje się to przez uŝycie macierzy przejścia. Rejestr FSR w postaci automatu: x(t+) = Ax(t), gdzie A jest macierzą przejścia Rejestr FSR o n-bitowym przesunięciu: x(t+n) = A n x(t) = A n- x(t+) = A n-2 x(t+2) =... 2
Rejestr FSR zbudowany z wielomianu p = x 6 +x + o przesunięciu 3: x(t+) = Ax(t) x(t+2) = Ax(t+) = A 2 x(t) Rejestr FSR o długości 6 Rejestr FSR o długości 6 Rejestr FSR o długości 6 Rejestr FSR o długości 6 z 3 z 3 z 3 z 3-bitowym przesunięciem bitowym przesunięciem bitowym przesunięciem bitowym przesunięciem 3 x(t+3) = Ax(t+2) = A 2 x(t+) = A 3 x(t) = + + + + + + ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( 2 3 4 5 2 3 4 5 t x t x t x t x t x t x t x t x t x t x t x t x = mod 2 3 A
Rejestr FSR o długości 6 z 3-bitowym przesunięciem V IBRARY ieee; USE ieee.std_logic_64.a; ENTITY lfsr6s3 IS PORT (clk : IN ST_OGIC; y : OUT ST_OGIC); EN lfsr6s3; ARCITECTURE lfsr_arch OF lfsr6s3 IS SIGNA r : ST_OGIC_VECTOR(5 OWNTO ); BEGIN Reg: PROCESS (clk) BEGIN IF clk'event AN (clk = '') TEN r(5 OWNTO 3) <= r(2 OWNTO ); r(2) <= r(5) XNOR r(4) ; r() <= r(4) XNOR r(3) ; r() <= r(3) XNOR r(2) ; EN IF; EN PROCESS Reg; y <= r(5); EN lfsr_arch; 4
Rejestr FSR o długości 6 z 3-bitowym przesunięciem Verilog module lfsr6s3(clk, y); input clk; output y; wire y; reg [5:] r; always@(posedge clk) begin r[5:3] <= r[2:]; r[2] <= r[5] ~^ r[4]; r[] <= r[4] ~^ r[3]; r[] <= r[3] ~^ r[2]; end assign y = r[5]; endmodule 5
Rejestr FSR o długości 6 z 3-bitowym przesunięciem ługość sekwencji została zmniejszona z (2 6 -)=63 do (2 6 -)/3=2 6
Łączenie rejestrów FSR Łączenie kilku rejestrów w jeden generator klucza np. za pomocą bloku nieliniowego z detekcją progu łatwość implementacji zmniejszenie zasobów logicznych zwiększenie bezpieczeństwa Połączenie trzech rejestrów FSR daje odpowiednik jednego rejestru (algorytm Berlekamp-Massey a) o długości: = 2 + 2 3 + 3 Największy wspólny dzielnik par okresów generatorów = 7
Łączenie 3 rejestrów FSR la podanych wielomianów: p 33 (x) = x 33 + x 6 + x 4 + x + p 29 (x) = x 29 + x 2 + p 38 (x) = x 38 + x 6 + x 5 + x + moŝna stworzyć rejestry FSR o maksymalnej sekwencji. iniowa złoŝoność odpowiednika w postaci jednego rejestru FSR jest następująca: = 33, 2 = 29, 3 = 38 = 3329 + 3338 + 2938 = 333 (!) 8
Łączenie rejestrów FSR generator Geffego Ciąg wynikowy: a 2 a xor (not a 2 )a 3 ZłoŜoność liniowa (n + )n 2 + n n 3 9
Łączenie rejestrów FSR generator stop-and and-go ZłoŜoność liniowa (2 n - )n 2 + n 3 2
Kaskada Gollmana generator stop-and and-go ZłoŜoność liniowa l(2 l - ) n-, gdzie l to długość rejestru lfsr 2
Łączenie rejestrów FSR generator progowy 22
Łączenie rejestrów FSR generator progowy p a b c a b c p p = ab + ac + bc 23
Metody oceny jakości szyfrów Algorytm Berlekampa-Massey'a Testy FIPS 4- - The Monobit Test - The Poker Test - The Runs Test - The ong Run Test Statystyka zer i jedynek RóŜnica między liczbą zer i jedynek 24
Przykład układu szyfrującego IBRARY ieee; USE ieee.std_logic_64.a; ENTITY encrypt IS PORT (clk : IN ST_OGIC; data : IN ST_OGIC_VECTOR(7 OWNTO ); y : OUT ST_OGIC_VECTOR(7 OWNTO )); data_ready : OUT ST_OGIC); EN encrypt ; Rejestr FSR o długości 8 ane 8-bitowe wpisywane do rejestru przesuwającego ARCITECTURE encrypt_arch OF encrypt IS TYPE STATE_TYPE IS (idle, s, s, s2, s3, s4, s5, s6, s7); SIGNA aut : STATE_TYPE; SIGNA lfsr : ST_OGIC_VECTOR(7 OWNTO ); SIGNA shift : ST_OGIC_VECTOR(7 OWNTO ); SIGNA t : ST_OGIC_VECTOR(7 OWNTO ); BEGIN Reg: PROCESS (clk) BEGIN IF clk'event AN (clk = '') TEN lfsr(7) <= lfsr(4) XNOR lfsr(3) XNOR lfsr(2) XNOR lfsr(); -- 8-bit FSR lfsr(6 OWNTO ) <= lfsr(7 OWNTO ); 25
CASE aut IS WEN idle => aut <= s; shift <= data; Przykład WEN s => układu aut <= s; szyfrującego shift(6 OWNTO ) <= shift(7 OWNTO ); t(7 OWNTO realizacja ) <= ((shift() XOR lfsr()) & t(7 OWNTO )); WEN s => aut <= s2; shift(6 OWNTO ) <= shift(7 OWNTO ); t(7 OWNTO ) <= ((shift() XOR lfsr()) & t(7 OWNTO )); WEN s2 => aut <= s3; shift(6 OWNTO ) <= shift(7 OWNTO ); t(7 OWNTO ) <= ((shift() XOR lfsr()) & t(7 OWNTO )); WEN s3 => aut <= s4; shift(6 OWNTO ) <= shift(7 OWNTO ); t(7 OWNTO ) <= ((shift() XOR lfsr()) & t(7 OWNTO )); WEN s4 => aut <= s5; shift(6 OWNTO ) <= shift(7 OWNTO ); t(7 OWNTO ) <= ((shift() XOR lfsr()) & t(7 OWNTO )); WEN s5 => aut <= s6; shift(6 OWNTO ) <= shift(7 OWNTO ); t(7 OWNTO ) <= ((shift() XOR lfsr()) & t(7 OWNTO )); WEN s6 => aut <= s7; shift(6 OWNTO ) <= shift(7 OWNTO ); t(7 OWNTO ) <= ((shift() XOR lfsr()) & t(7 OWNTO )); WEN s7 => aut <= s; shift <= data; t(7 OWNTO ) <= ((shift() XOR lfsr()) & t(7 OWNTO )); EN CASE; EN IF; EN PROCESS Reg; 26
Przykład układu szyfrującego realizacja cd. Ready: PROCESS (aut) BEGIN IF aut = s TEN data_ready <= ''; ESE data_ready <= ''; EN IF; EN PROCESS Ready; y <= t; EN encrypt_arch; 27
Przykład układu szyfrującego symulacja SZYFROWANIE Tekst A szyfrogram ESZYFROWANIE 28
Przykład układu szyfrującego 8-bitów w jednym cyklu IBRARY ieee; USE ieee.std_logic_64.a; ENTITY encr_s8 IS PORT (clk : IN ST_OGIC; data : IN ST_OGIC_VECTOR(7 OWNTO ); y : OUT ST_OGIC_VECTOR(7 OWNTO )); EN encr_s8; Rejestr FSR o długości 8 ane 8-bitowe wpisywane do rejestru ARCITECTURE encrypt_arch OF encr_s8 IS TYPE STATE_TYPE IS (idle, s); SIGNA aut : STATE_TYPE; SIGNA lfsr : ST_OGIC_VECTOR(7 OWNTO ); SIGNA shift : ST_OGIC_VECTOR(7 OWNTO ); SIGNA t : ST_OGIC_VECTOR(7 OWNTO ); 29
BEGIN Reg: PROCESS (clk) BEGIN IF clk'event AN (clk = '') TEN lfsr(7) <= lfsr(5) XNOR lfsr(2) XNOR lfsr(); -- 8-bit FSR 8STEP lfsr(6) <= lfsr(4) XNOR lfsr() XNOR lfsr(); lfsr(5) <= lfsr(7) XNOR lfsr(2) XNOR lfsr() XNOR lfsr(); lfsr(4) <= lfsr(7) XNOR lfsr(6) XNOR lfsr(3) XNOR lfsr(2) XNOR lfsr(); lfsr(3) <= lfsr(7) XNOR lfsr(6) XNOR lfsr(5) XNOR lfsr(3); lfsr(2) <= lfsr(6) XNOR lfsr(5) XNOR lfsr(4) XNOR lfsr(2); lfsr() <= lfsr(5) XNOR lfsr(4) XNOR lfsr(3) XNOR lfsr(); lfsr() <= lfsr(4) XNOR lfsr(3) XNOR lfsr(2) XNOR lfsr(); CASE aut IS WEN idle => aut <= s; shift <= data; WEN s => aut <= s; shift <= data; t_n: FOR i IN 7 OWNTO OOP t(i) <= shift(i) XOR lfsr(i); EN OOP; WEN OTERS => aut <= idle; EN CASE; EN IF; EN PROCESS Reg; y <= t; dr inŝ. Paweł EN encrypt_arch; Tomaszewicz 8 A = Macierz przejścia 3
Przykład układu szyfrującego 8-bitów w jednym cyklu SZYFROWANIE Tekst A szyfrogram ESZYFROWANIE 3