Szyfrowanie RSA. Liczba pierwsza jest liczbą naturalną posiadającą dokładnie dwa różne podzielniki - 1 oraz samą siebie.

Wielkość: px
Rozpocząć pokaz od strony:

Download "Szyfrowanie RSA. Liczba pierwsza jest liczbą naturalną posiadającą dokładnie dwa różne podzielniki - 1 oraz samą siebie."

Transkrypt

1 Szyfrowanie RSA Liczby pierwsze Na początek przypomnijmy sobie parę użytecznych wiadomości o liczbach pierwszych. Są one znane od starożytności a ich znaczenie jest ogromne w matematyce i tym bardziej w kryptografii. Dlaczego, o tym przekonamy się już niedługo. Liczba pierwsza jaka jest każdy widzi. Jednak dla pewności przypomnimy definicje: Liczba pierwsza jest liczbą naturalną posiadającą dokładnie dwa różne podzielniki - 1 oraz samą siebie. Zatem nie jest liczbą pierwszą liczba 0 ani liczba 1. Najmniejszą liczbą pierwszą jest liczba 2, a jak dowiódł Euklides, liczb pierwszych jest nieskończenie dużo. Powstaje pytanie, jak sprawdzić czy dana liczba jest liczbą pierwszą, bądź też jak wygenerować liczby pierwsze. Jeśli chodzi o sprawdzenie czy dana liczba jest pierwsza to można posłużyć się bezpośrednio definicją liczby pierwszej, to znaczy sprawdzić czy jakakolwiek liczba w przedziale <2, p-1> (p jest sprawdzaną liczbą) dzieli bez reszty liczbę p. Jeśli tak, to liczba p nie jest liczbą pierwszą. Metoda ta oczywiście działać będzie, natomiast łatwo zauważyć, że dla dużych liczb wykonywać się będzie wiele niepotrzebnych operacji dzielenia. Wynika to z faktu, że biorąc pod uwagę dowolną liczbę naturalną, mogą zaistnieć 4 przypadki: 1. Liczba p jest pierwsza i w całym przedziale od 2 do p-1 nie posiada dzielnika. 2. Liczba p posiada pierwiastek będący jej podwójnym dzielnikiem, np. 25 = 5 x 5 3. Pierwiastek z p nie jest liczbą pierwszą, a jeden z dzielników jest większy od pierwiastka z p. Wtedy wszystkie inne dzielniki musza być mniejsze od pierwiastka z p. np. 22 = 2 x Pierwiastek z p nie jest liczbą pierwszą i wszystkie jego dzielniki są mniejsze od pierwiastka z p. np. 36 = 2 x 2 x 3 x 3 Z powyższych punktów wynika prosty wniosek jeśli p jest liczbą złożoną to posiada dzielniki w przedziale <2, p >. Wystarczy wiec sprawdzić podzielność tylko w tym przedziale. Jeśli żadna liczba z tego przedziału nie dzieli p to znaczy, że p jest pierwsza. Zysk jest duży, ale na tym nie koniec. Spójrzmy na kilka początkowych liczb pierwszych: Jeśli nie weźmiemy pod uwagę 2 oraz 3, każdą z nich można zapisać w postaci 6n 1 lub 6n +1 dla pewnej liczby naturalnej n. Nie jest to przypadek. Spójrzmy: 1. Liczby postaci 6n nie mogą być pierwsze gdyż są podzielne przez 2 oraz 3 2. Liczby 6n-2, 6n+2, 6n-4, 6n+4 są podzielne przez 2, wiec również nie są pierwsze. 3. Liczby 6n-3 oraz 6n+3 nie są pierwsze gdyż dzieli je Liczby 6n-5 oraz 6n+5 również wypadają, a dlaczego - pomyślcie sami.

2 Wynika z tego, że każda liczba pierwsza będzie postaci 6n-1 lub 6n+1. Nie znaczy to wcale ze każda liczba takiej postaci jest pierwsza. Nie są to wzory na kolejne liczby pierwsze (taki wzór nie istnieje). Wzory te ograniczają nam jedynie zbiór kandydatów do sprawdzenia poprzednią metoda. Wystarczy, że będziemy sprawdzać liczby postaci 6n-1 oraz 6n+1 dla kolejnych liczb naturalnych. Oczywiste jest, ż żadna liczba pierwsza nie jest parzysta. Dodatkowo zauważmy, że nie trzeba sprawdzać podzielności przez 4, 6, 8,10... jeśli sprawdziło się podzielność przez 2, nie trzeba sprawdzać podzielności przez 6,9,12,15... jeśli się sprawdziło podzielność przez 3 itd. Wynika z tego, że dla danej liczby p wystarczy sprawdzić jej podzielność przez liczby pierwsze w przedziale <2, p >. Jest to wygodne podejście jeśli generujemy liczby pierwsze w przedziale np. <2,100000>, gdy generujemy liczby pierwsze po kolei. Sito Eratostenesa Powyższe metody nie są najlepsze, jeśli chodzi o wygenerowanie wszystkich liczb pierwszych mniejszych od zadanej np Dużo szybszą metodę podał starożytny uczony Eratostenes. Zamiast sprawdzać podzielność kolejnych liczb naturalnych przez znalezione liczby pierwsze, możemy wyrzucać ze zbioru liczb naturalnych wielokrotności kolejnych liczb naturalnych, które nie zostały wcześniej wyrzucone. Oto przykład: Bierzemy 2 i wyrzucamy wszystkie jej wielokrotności. Zrealizować to można za pomocą dodawania tej samej liczby, co jest wydajniejsze niż użyte wcześniej dzielenie. Otrzymujemy: Następnie bierzemy 3 i usuwamy jej wielokrotności. Wynik: W realizacji komputerowej najłatwiej jest reprezentować liczby za pomocą indeksów tablicy wartości logicznych. Wartość false na miejscu o indeksie i oznacza ze liczba i została wyrzucona ze zbioru. Oczywiście podczas realizacji algorytmu trzeba uważać by nie wykonywać zbędnych operacji. Biorąc kolejną liczbę i chcąc usuwać jej wielokrotności, należy sprawdzić czy ta liczba nie została sama wcześniej usunięta, jeśli tak to usunięte zostały także wszystkie jej wielokrotności, nie ma wiec sensu powtarzać tej czynności. Są możliwe i inne ulepszenia. Zauważmy, że w pierwszym kroku usuwamy wszystkie wielokrotności liczby 2. Kiedy w następnym kroku usuwamy wielokrotności 3, widzimy ze 6 = 3x2 już zostało usunięte, gdyż 6 dzieli się przez 2. Pierwszą usuniętą wielokrotnością liczby 3 jest jej kwadrat, czyli 9 = 3x3. Dla kolejnej liczby, czyli 5, usuwamy 10, ale ona już została usunięta (dzieli się przez 2), kolejno 15, ale ona również została wcześniej usunięta (dzieli się przez 3) Podobnie dla 20=5x4. Pierwszą usuniętą wielokrotnością liczby 5 jest znów jej kwadrat 25=5x5. Jak łatwo zauważyć jest tak zawsze dla kolejnych liczb i ich wielokrotności. Dla kolejnych liczb, ich wielokrotności mniejsze od ich kwadratu posiadają dzielniki równe wcześniej znalezionym liczbom pierwszym, zatem zostały usunięte już ze zbioru wcześniej. Mamy zatem bardzo użyteczny wniosek z powyższych rozważań. Jeśli p jest górnym ograniczeniem naszego zbioru, to co się stanie jeśli dojdziemy do p? Wtedy pierwszą

3 liczbą, którą wypada nam wyrzucić jest dopiero p. Zatem wielokrotności liczb większych od p zostały usunięte w trakcie usuwania wielokrotności ich czynników pierwszych. Cały proces można zatem przerwać po przekroczeniu granicy równej p. Zysk jest ogromny. Przykładowo, dla p = wystarczy, że dojdziemy do p =1000. Tysiąc razy liczb mniej do przejrzenia to już coś. Oczywiście korzystne jest odpowiednie wyznaczenie pierwszej wielokrotności, która ma być usunięta. Z powyższych rozważań wynika, że nie trzeba usuwać wielokrotności mniejszych niż kwadrat kolejnej liczby, gdyż takie wielokrotności zostały usunięte wcześniej. W praktyce liczby pierwsze używane w kryptografii są dużo większe niż zakres liczb całkowitych w tradycyjnych językach programowania, takich jak C, Pascal. Często potrzebne są liczby pierwsze o długości bitów lub nawet większe. Jednakże małe liczby pierwsze, jak zobaczymy dalej, również są przydatne. Powstaje jednak pytanie jak generować duże liczby pierwsze. Przedstawione powyżej metody są za mało wydajne by stosować je do generacji bardzo dużych liczb pierwszych. W praktyce zatem będziemy generować dużą liczbę i następnie poddawać ją testowi na pierwszość. Test pozwoli określić czy dana liczba jest pierwsza z pewną dokładnością, prawdopodobieństwem. Test powtórzony kilkakrotnie pozwoli nam zmniejszyć prawdopodobieństwo pomyłki. Nie uzyskamy zatem pewności, lecz dowolnie małe prawdopodobieństwo. Poznamy zatem metodę probabilistyczną generowania dużych liczb pierwszych, jednakże w praktyce obliczenia nasze przeprowadzać będziemy na liczbach tak dużych, na jakie pozwoli nam zakres języka w którym będziemy implementować algorytm. W zastosowaniach praktycznych skorzystalibyśmy z bibliotek implementujących liczby całkowite dowolnej precyzji. Bibliotekę taką można napisać samemu, jednakże jako że zadanie takie nie jest rzeczą łatwą, jeśli chcemy stworzyć rzeczywiście niezawodne klasy i funkcje, lepiej jest skorzystać z gotowych bibliotek dostępnych w Internecie lub skorzystać z języka programowania obsługującego liczby całkowite dowolnej wielkości Zanim jednak zajmiemy się przedstawieniem metody generowania dużych liczb pierwszych potrzebne nam będą pewne wiadomości. Największy wspólny dzielnik NWD Mając dwie liczby całkowite a i b ich największym wspólnym dzielnikiem nazywamy największą liczbę d=nwd(a,b) która dzieli bez reszty obie liczby a i b. Dla przypomnienia najmniejsza wspólna wielokrotność dwóch liczb a i b NWW(a,b) to najmniejsza liczba całkowita, która jest podzielna przez a oraz b. Związek miedzy tymi dwoma wielkościami jest następujący: NWW(a,b)=ab/NWD(a,b). Jak zatem znaleźć NWD(a,b)? Rozwiązanie tego problemu znane jest od dawna. Wymyślił je starożytny matematyk Euklides. Algorytm Euklidesa DANE: dwie liczby całkowite a i b, a>b While b!=0 do (a, b) (b, a mod b) end return a

4 Jak widać, w każdym kroku należy zastępować odpowiednio liczby a i b obliczając resztę z dzielenia aktualnego a przez aktualne b. Reszty te w każdym kolejnym kroku są coraz mniejsze, co łatwo sprawdzić, zatem algorytm zawsze będzie miał rozwiązanie. Dla przykładu znajdźmy NWD dla liczb 48 i 36 NWD(64, 36) = NWD(36, 64 mod 36) = NWD(36, 28)= NWD(28, 36 mod 28)= NWD(28,8)= NWD(8, 28 mod 8)= NWD(8, 4)= NWD(4, 8 mod 4)= NWD(4, 0) Zatem NWD(64, 36) = 4. Żadna inna liczba większa od 4 nie dzieli jednocześnie 64 i 36. Zamiast dokonywać dzielenia modulo można wykonywać odejmowania: Algorytm Euklidesa 2 DANE: dwie liczby całkowite a i b, a>b While b!=0 do (a, b) (b, a - b) end return a Przykład: NWD(64, 36)=NWD(36,64-36)= NWD(36,28)= NWD(28,36-28)= NWD(28,8)= NWD(8,28-8)= NWD(8,20) =NWD(20,8)= NWD(12,8)= NWD(8,4)= NWD(4,4)= NWD(4,0) Jak widać wynik jest ten sam jednak potrzeba było (w tym przypadku) więcej kroków. Jednak trzeba wziąć pod uwagę, że operacja dodawania (zatem również odejmowania) jest szybciej wykonywana niż dzielenie modulo. Często można przyśpieszyć działanie algorytmu Euklidesa dopuszczając dzielenie z ujemnymi resztami. Przykładowo: 64 = 1 x ale również 64 = 2 x 36 8 Jeśli wybierać będziemy mniejsze reszty zmniejszymy ilość potrzebnych kroków. Przykład: NWD(64,36)= NWD(36,8) 36=4 x oraz 36 = 5 x 8 4 (tu akurat bez różnicy) NWD(36,8)= NWD(8,4)= NWD(4,0)=4 Algorytm Euklidesa działa, ponieważ kolejne pary mają ten sam zbiór wspólnych dzielników, zatem w szczególności maja ten sam największy wspólny dzielnik. Nie będziemy jednak przytaczać dokładnego dowodu. Jeszcze inna odmiana algorytmu Euklidesa korzysta z następujących kroków: Algorytm Euklidesa 3 DANE: dwie liczby całkowite a i b, a>b

5 WYJSCIE: d = NWD(a,b) While a!=b do Jeśli a i b są parzyste to d=2*d, gdzie d =NWD(a/2, b/2) Jeśli jedna jest parzysta a druga nieparzysta (np.b jest parzysta) to d=d, gdzie d =NWD(a,b/2) Jeśli obie są nieparzyste i np. a>b, to d=d, gdzie d =NWD(a-b,b) Jeśli a jest równe b to d=a end return a Przyklad: NWD(64,36)=2*NWD(32,18)=4*NWD(16,9)=4*NWD(8,9)=4*NWD(4,9)=4* NWD(2,9)=4* NWD(1,9)= 4* NWD(1,8)= 4* NWD(1,7)=...= 4* NWD(1,1)=4 W przykładzie powyżej ilość kroków jest zdecydowanie większa od ilości kroków w sposobie pierwszym, jednak metoda ta ma swoje zalety. Jak widać mamy w tej metodzie tylko dzielenie przez 2 i odejmowanie. Jest to szczególnie użyteczne gdy operujemy na liczbach w zapisie dwójkowym, gdzie dzielenie przez 2 sprowadza się do przesunięcia bitów w prawo. Przykładowo: 12 / 2 = 6 12 (10) = 1100 (2) (przesuniecie bitów usuniecie bitu najmniej znaczącego) 6 (10) = 110 (2) Mnożenie przed dwa sprowadza się natomiast do przesunięcia bitów w lewo i dopisaniu na miejscu powstałego najmniej znaczącego bitu zera. 3 (10) = 11 (2) 2*3 = 6 (10) = 110 (2) Operacje przesunięcia bitów mogą być zaimplementowane bardzo wydajnie. Do czego się nam przyda algorytm Euklidesa, o tym za chwile. Teraz jeszcze zdefiniujmy pojecie względnej pierwszości dwóch liczb. Def. Dwie liczby a i b są względnie pierwsze, jeśli NWD(a,b)=1 Działania modulo Dodawanie, odejmowanie i mnożenie modulo nie różnią się zbytnio od swoich zwykłych odpowiedników. Polegają one na wykonaniu działania normalnie a następnie skróceniu wyniku modulo dana liczba. Przykładowo załóżmy, że będziemy wykonywać działania modulo p = 5. Zatem jeśli a = 7 oraz b=4 mamy: (a+b) mod p = (7+4) mod 5 =11 mod 5 = 1 (a-b) mod p = (7-4) mod 5 =3 mod 5 = 3 (a*b) mod p = (7*4) mod 5 =28 mod 5 = 3

6 Tutaj mała uwaga. Resztę przyjmować będziemy zawsze jako liczbę dodatnią większą lub równą zero i mniejszą od dzielnika. Jaki jest zatem wynik działania -1 mod 5? Mamy dwie możliwości zapisu 1 za pomocą 5: -1 = 0*5 1 lub -1 = -1*5 + 4 Przyjmować będziemy tę drugą odpowiedż, czyli 1 mod 5 = 4. Co jednak z dzieleniem modulo? Okazuje się ze nie jest to takie proste jak z pozostałymi działaniami modulo. Szczególnie interesuje nas przypadek znajdowania dla danej liczby b jej odwrotności modulo p czyli 1/b mod p, gdzie 1<=b<p. Znając odwrotność danej liczby modulo p możemy wykonywać dzielenie przez tą liczbę modulo p czyli obliczyć a/b mod p. Jednak nie zawsze możemy obliczyć odwrotność danej liczby modulo p. Twierdzenie: Element odwrotny do b modulo p definiujemy jako taką liczbę a, taką ze ab=1(mod p) Liczba a istnieje tylko gdy b oraz p są względnie pierwsze, czyli NWD(p,b) = 1. Zauważmy, że warunek ten jest spełniony zawsze gdy p jest liczbą pierwszą. Ponownie pominiemy dowód tego twierdzenia i zapytamy od razu co ono nam daje. Otóż mając NWD(p,b) = d można zawsze jednoznacznie zapisać go jako: d = ub + vp w naszym wypadku d=1 wiec 1=ub + vp Szukanym elementem odwrotnym a jest u. Jest tak dlatego iż z ab=1(mod p) wynika ze p 1-ab (p dzieli ab-1) z kolei 1-ub=vp wiec p 1-ub. Zatem a=u. Zatem, reasumując, by obliczyć liczbę odwrotną do b modulo p, należy najpierw sprawdzić czy są one względnie pierwsze, czyli czy NWD(p,a)=1. Jeśli tak, należy znaleźć takie u oraz v, że 1=ub + vp. Wtedy szukanym elementem odwrotnym jest u (UWAGA: jeśli u wyjdzie ujemne, trzeba zredukować u modulo p zanim użyje się go jako odwrotności b). Jak znaleźć u oraz v? Posłuży nam do tego rozszerzony algorytm Euklidesa: Rozszerzony algorytm Euklidesa: DANE: m>0, n>0 WYJSCIE: k =NWD(n,m) u, v liczby całkowite, takie ze um+vn=k assert n>=0, m>=0, n>=m (a, a ) (n,m)

7 (u, u, v, v ) (0,1,1,0) while a!=0 do q=a/a //dzielenie bez reszty, całkowite (a,a ) (a, a-qa ) (u, u, v, v ) (u,u-qu,v,v-qv ) end return NWD(n,m)=a, oraz u, v Przykład: Obliczmy mod 841.d Liczby 841 oraz 160 musza być względnie pierwsze by szukany element odwrotny istniał. Obliczmy zatem rozszerzonym algorytmem Euklidesa NWD(841, 160) (a,a ) (841,160) (u, u, v, v ) (0,1,1,0) PETLA: Krok 1; q=841/160=5 (a, a ) (160, 841-5*160)=(160, 41) (u, u, v, v ) (1,0-5*1,0,1-5*0)=(1,-5,0,1) Krok 2: q=160/41=3 (a, a ) (41, 160-3*41)=( 41, 37) (u, u, v, v ) (-5,1-3*(-5),1,0-3*1)=(-5,16,1,-3) Krok 3: q=41/37=1 (a, a ) (37, 41-1*37)=( 37, 4) (u, u, v, v ) (16,-5-1*16,-3,1-1*(-3))=(16,-21,-3,4) Krok 4: q=37/4=9 (a, a ) (4, 37-9*4)=( 4, 1) (u, u, v, v ) (-21,16-9*(-21),4,-3-9*4)=(-21,205,4,-39) Krok 5: q=4/1=4 (a, a ) (1, 4-4*1)=( 1,0 ) (u, u, v, v ) (205,-21-4*205,-39,4-4*(-39))=(205,-841,-39,160) a ==0 wiec STOP NWD(841,160) = a = 1 = 205*160 39*841 Zatem element odwrotny do 160 modulo 841 istnieje gdyż NWD(841,160)=1 i wynosi on 205. Można sprawdzi poprawność obliczeń: 160*205 (mod 841) = (mod 841) = 1

8 Zatem zgadza się. Umiemy obliczać element odwrotny danej liczby modulo p, jeśli te liczby są względnie pierwsze. Algorytm Iteracyjnego Podnoszenia do Kwadratu Potrzebna nam będzie jeszcze umiejętność obliczania wyrażeń typu b n mod m, gdzie liczby n oraz m są dużymi liczbami, przykładowo mamy obliczyć mod 133. Zakładamy, że b<m. Zamiast podnosić b do tak wysokiej potęgi możemy iteracyjnie mnożyć b przez samego siebie i za każdym razem skracać wynik modulo m. Zatem w wyniku zawsze będziemy mieć do czynienia z liczbami nie przekraczającymi m. Częściowe iloczyny oznaczamy jako a. Na końcu algorytmu szukany wynik będzie końcową wartością a. Algorytm IPdK: 1. Zapisz wykładnik n w postaci binarnej, n (2) =n o + 2n 1 + 4n k-1 n k-1, gdzie k jest ilością bitów w zapisie binarnym liczby n. 2. Najmniej znaczący bit n 0 służy nam jedynie do ustalenia początkowej wartości a. Jeśli n 0 =1 to ustaw a=b, jeśli n 0 =0 ustaw a=1. 3. Następnie podnosimy b do kwadratu i skracamy modulo m, czyli b 1 =b 2 mod m. Jeśli n 1 =1 to wykonujemy a=a*b mod m, w przeciwnym wypadku, gdy n 0 =0, nie zmieniamy wartości a. 4. W każdym kroku i obliczamy wartość b i =b i-1 2 mod m, i jeśli n i =1 to obliczamy a i =a i-1* b i mod m. 5. Wynikiem jest końcowa wartość a. Przykład: Obliczmy mod 133 Najpierw zapisujemy 35 (10) = (2) 1. n 0 =1 więc a = b = b 1 =b 2 mod m = 123*123 mod 133=100 oraz n 1 =1 więc a 1 =a*b 1 mod m = 123*100 mod 133 = b 2 =b 1 2 mod m = 100*100mod 133=25 oraz n 2 =0 4. b 3 =b 2 2 mod m = 25*25mod 133=93 oraz n 3 =0 5. b 4 =b 3 2 mod m = 93*93mod 133=4 oraz n 4 =0 6. b 5 =b 4 2 mod m = 4*4mod 133=16 oraz n 5 =1 więc a 5 =64*16 mod 133=93 Zatem mod 133 = 93 Umiejętność ta przyda nam się w następnym punkcie. Generowanie dużych liczb pierwszych Jak już mówiliśmy wcześniej, algorytmy przedstawione na początku tego opracowania, nie są zbyt dobrym rozwiązaniem, jeśli chcemy wygenerować naprawdę dużą liczbę pierwszą, przykładowo 4000-bitową. Dopiero takiej długości liczby, lub nawet dłuższe, gwarantują bezpieczeństwo. Metoda jaką przyjmiemy jest bardzo prosta wybierzemy dowolną liczbę i sprawdzimy czy jest pierwsza. Liczb pierwszych jest dość dużo, w okolicy danej liczby n średnio jedna liczba

9 na ln(n) jest liczbą pierwszą. Logarytm naturalny nie jest funkcją szybko rosnącą, przykładowo wartość logarytmu naturalnego z liczby 2 k nieznacznie przekracza 0,7*k. Dla liczb 2000-bitowych, mieszczących się w zakresie , mamy mniej więcej 1386 liczb pierwszych. Dodatkowo z rozwiązań od razu możemy wyrzucić liczby w sposób oczywisty złożone, na przykład parzyste. Algorytm GenerujLiczbePierwszą: 1. Ustal zakres, z jakiego będzie generowana liczba pierwsza 2. Ustal ilość prób generowania liczby pierwszej 3. Dopóki nie przekroczono maksymalnej ilości prób, wygeneruj losowa liczbę z zadanego przedziału i sprawdź czy jest pierwsza, jeśli nie, wygeneruj następną losową liczbę. Należy zabezpieczyć się przed przypadkiem gdy dany przedział nie zawiera żadnej liczby pierwszej program nie powinien się wtedy zawieszać. W praktyce należy uważać by dany przedział nie był również zbyt mały, gdyż, ktoś, znając przedział może spróbować wygenerować wszystkie liczby pierwsze z tego przedziału jeśli jest on zbyt mały, może się to udać, co może prowadzić do naruszenia przyjętych zasad bezpieczeństwa. Ilość prób można określić wykorzystując wcześniej podane informacje. Przykładowo r (czyli ilość prób) może być równa r = 100*(log 2 u + 1) gdzie u to górne ograniczenie naszego zakresu poszukiwań. Dla liczby 2000-bitowej log 2 u + 1 wynosi Czynnik 100 daje dodatkową gwarancję, ze prawdopodobieństwo nie znalezienia liczby pierwszej w danej ilości prób jest znikome. Dodatkowo należy pamiętać o korzystaniu z generatora losowego liczb, który będzie generował liczby z równomiernym rozkładem.. Można również w celu uniknięcia sprawdzania liczb parzystych (które wiadomo, ze nie są pierwsze) ustawić najmniej znaczący bit wygenerowanej liczby. Sprawdzenie pierwszości danej losowej liczby przebiega następująco: Algorytm SprawdzCzyPierwsza: 1. assert n>=3 2. Sprawdź podzielność liczby n przez znane, małe liczby pierwsze np. <1000. Pozwala to szybko wykryć większość liczb złożonych podzielnych przez małe liczby. Jeśli badana liczba n jest podzielna przez którąś ze znanych, małych liczb pierwszych, zwróć false. 3. Jeśli badana liczba n przeszła zwycięsko krok 2, wykonaj na niej test Rabina-Millera. Jeśli przejdzie go zwycięsko, zwróć true, inaczej zwróć false. Pozostaje do omówienia test Rabina-Millera. Test Rabina-Millera Test ten ma charakter probabilistyczny, to znaczy, ze nie uzyskamy pewności czy dana liczba jest pierwsza. Możemy jednak dowolnie zmniejszać prawdopodobieństwo pomyłki. Test ten ma na celu sprawdzenie czy dana, nieparzysta liczba n jest pierwsza. Dojście do testu

10 Rabina-Millera w algorytmie SprawdzCzyPierwsza daje pewność ze n jest nieparzyste (inaczej byłaby podzielna przez 2 co byłoby wykryte wcześniej). W teście Rabina-Millera dla danej liczby n wybieramy losową liczbę a, taką że a<n. Liczbę a nazywamy bazą i sprawdzamy pewną właściwość a modulo n. Właściwość ta jest spełniona jeśli n jest pierwsza. Niestety, jeśli n nie jest pierwsza, to w przypadku co najwyżej 25% rożnych liczb a (wartości bazy) właściwość ta również zachodzi. Powtarzając wiec test dla rożnych wartości bazy a, będziemy zmniejszać prawdopodobieństwo pomyłki. Im więcej różnych wartości bazy a, tym mniejsze prawdopodobieństwo pomyłki. Jeśli dla danej wartości a, liczba n nie przejdzie testu, to znaczy, że nie jest pierwsza, jeśli natomiast przejdzie, nie wiemy na pewno czy jest pierwsza, ale po coraz większej ilości różnych a, prawdopodobieństwo tego, że się mylimy, maleje. Jeśli n jest pierwsza, przejdzie przez każdą edycję testu dla jakiejkolwiek wartości a. Jeśli nie jest pierwsza, wykaże to przynajmniej 75% możliwych wartości a. Można zatem ustalić zadany poziom bezpieczeństwa, przykładowo ustalając dopuszczalne prawdopodobieństwo pomyłki na Oto omawiany test: Funkcja Rabin-Miller Dane: n liczba nieparzysta>=3 (nie dopuszczamy wartości 2) Wynik: wartość logiczna wskazująca czy dana liczba n jest pierwsza, czy też nie assert n>=3 oraz (n mod 2) =1 Wyznaczamy takie (s, t), że s jest nieparzyste i 2 t s= n-1 (s, t) (n-1,0) while s mod 2 = 0 do (s, t) (s/2, t+1) end W zmiennej k generujemy dane o prawdopodobieństwie uzyskania fałszywego wyniku. Prawdopodobieństwo nie przekracza 2 -k. Każemy pracować pętli tak długo, aż fałszywy wynik stanie się mało prawdopodobny. k 0 while k<128 do //ustalony poziom bezpieczeństwa na 128 Wybieramy losową liczbę a spełniającą 2<=a<=n-1 a random({2..n-1}) v a s mod n Jeśli v=1, liczba n przeszła test dla bazy a, w przeciwnym wypadku nadal może go przejść, dlatego sprawdzamy dalej if v!=1 then Ciąg v, v 2,.., v pow(2,t) musi kończyć się wartością 1 a jeśli n jest liczbą pierwszą, ostatnią wartością różną od 1 musi być n-1. Zatem i 0 while v!=n-1 do if i=t-1 then return false //test zakończony niepowodzeniem else (v, i) (v 2 mod n, i+1) end while end if

11 Dojście do tego miejsca oznacza, ze n przeszła test względem bazy a. Wobec tego prawdopodobieństwo uzyskania fałszywej odpowiedzi zostało zredukowane o czynnik 2 2, zatem zwiększamy k o 2. k k+2 end while // pętla po różnych wartościach bazy a return true //n przeszła testy dla wszystkich wylosowanych baz a, wiec można zwrócić true Dlaczego ten test działa? Podstawą jego działania jest małe twierdzenie Fermata. Mówi ono, że dla dowolnej liczby pierwszej n i dla wszystkich liczb a, takich że 1<=a<n, zachodzi a n-1 mod n =1. Więc jeśli n jest pierwsza, własność ta zachodzi, jednak istnieją pewne liczby złożone, zwane liczbami Carmichaela, które mimo iż są złożone, przechodzą test dla wielu baz a. Jeszcze kilka wyjaśnień. Przedstawienie liczby n-1 w postaci 2 t s, gdzie s jest nieparzysta, pozwala nam zamiast obliczania a n-1 obliczyć a s a następnie ten wynik podnosić do kwadratu t razy i otrzymać a s*pow(2,t) = a n-1. I teraz, jeśli a s =1 (mod n), powtórne podniesienie do kwadratu nie zmieni wyniku, wiec będziemy mieć a n-1 =1(mod n). W przypadku a s!=1 (mod n) sprawdzamy kolejne kwadraty tej liczby czyli ciąg a s, a s*pow(2, 1), a s*pow(2, 2),..., a s*pow(2, t) (wszystkie modulo n). Gdyby n była liczbą pierwszą, to ostatnia liczba musiałaby być równa 1. Kiedy n jest liczbą pierwszą, jedynymi liczbami x spełniającymi warunek x 2 =1(mod n) są 1 i n-1. Gdyby zatem n była liczbą pierwszą, w podanym ciągu musiałaby wystąpić liczba n-1 (stad warunek pętli while v!=n-1), gdyż w przeciwnym wypadku nigdy ostatni wyraz nie równałby się 1. Jeśli powyższe nie zachodzi, to zwracamy false, przerywamy test i wychodzimy z funkcji. Sprawdzamy liczbę n dla rożnych wartości a dopóki prawdopodobieństwo błędu nie spadnie poniżej (w tym przykładzie) Poznaliśmy zatem wszystkie potrzebne nam narzędzia matematyczne, które będą nam potrzebne przy właściwym szyfrowaniu RSA. Szyfrowanie RSA W poprzednim laboratorium mieliśmy do czynienia z szyfrowaniem z kluczem symetrycznym, to znaczy taki sam klucz musiał być znany zarówno nadawcy jak i odbiorcy, aby, odpowiednio, zaszyfrować i odszyfrować wiadomość. Z tego wniosek, że musiał on być znany im obu przed wysłaniem pierwszej zaszyfrowanej wiadomości. W przeszłości zatem, przed podjęciem szyfrowanej korespondencji, musieli spotkać się i osobiście uzgodnić hasło, lub sposób szyfrowania, który w obu przypadkach (szyfrowanie-odszyfrowywanie) przebiega według tego samego mechanizmu i z wykorzystaniem tego samego hasła. Co jednak robić w sytuacji, gdy dane osoby nie mogą się spotkać ani w żaden bezpieczny sposób uzgodnić wspólnego hasła? Rozwiązaniem są systemy z kluczami niesymetrycznymi, w których podczas szyfrowania i odszyfrowywania używa się innych klucz. Zazwyczaj każdy uczestnik takiego systemu posiada dwa rodzaje kluczy: publiczny, który udostępnia wszystkim chętnym, na przykład na swojej stornie internetowej, a drugi prywatny, który zachowuje w tajemnicy. Za pomocą klucza publicznego chętni wysyłają do osoby, która udostępniła ten klucz zaszyfrowane tym kluczem wiadomości. Posiadacz klucza prywatnego jest w stanie za jego pomocą odszyfrować wiadomość. Cały sekret tkwi w tym, iż klucz publiczny nie może odszyfrować zaszyfrowanej nim wiadomości, można tego dokonać jedynie znając klucz prywatny.

12 Przykładem takiego systemu jest RSA. RSA przedstawiony został oficjalnie w roku 1979 i jest dziełem trzech ludzi: Ronalda Rivesta, Adi Shamira oraz Leonarda Adlemana - jego nazwa pochodzi o pierwszych liter nazwisk swych twórców. Jak działa RSA? Zaczniemy od dwóch dużych, losowo wybranych, rożnych liczb pierwszych p i q. Obliczamy ich iloczyn n=pq. Liczbę n będziemy wykorzystywać do wykonywania operacji modulo. Jednak widzimy, ze nie jest ona liczbą pierwszą, wiec nie zachodzi równość, x n-1 =1 (mod n) dla 0<x<p. Aby użyć RSA musimy znaleźć taki wykładnik t by x t =1 (mod n) dla (prawie) wszystkich x. Spójrzmy: jeśli zachodzi x t =1 (mod n) to zachodzi również x t =1 (mod p) oraz x t =1 (mod q). Liczby p i q są pierwsze więc równanie x t =1 (mod n) będzie zachodzić tylko wtedy gdy p-1 będzie dzielnikiem t oraz q-1 będzie dzielnikiem t. Zatem najmniejsza liczba o takiej właściwości to NWW(p-1, q-1)=(p-1)(q-1)/nwd(p-1, q-1). Przyjmijmy zatem w dalszych rozważaniach, że t= NWW(p-1,q-1). Czasami używa się funkcji Eulera. Funkcja ta dla liczby n=pq gdzie p i q są pierwsze wynosi φ ( n) = ( p 1)( q 1) Wartość tej funkcji jest wielokrotnością naszego t. Użycie jej zamiast t również da dobre wyniki. Wracajmy do RSA. Mając p, q, n oraz t. Potrzebujemy teraz dwóch różnych wykładników e oraz d. Muszą one spełniać warunek ed=1 (mod t). Jako publicznie znany wykładnik e wybieramy niewielką liczbę nieparzystą. Posługując się rozszerzonym algorytmem Euklidesa obliczamy d jako odwrotność e modulo t. Aby zaszyfrować wiadomość m, nadawca oblicza tekst zaszyfrowany c=m e (mod n) Aby odszyfrować tekst c, odbiorca oblicza c d (mod n) co jest równe oryginalnej wiadomości m. Klucz publiczny stanowi para (n, e). Kluczem prywatnym jest zestaw (p, q, t, d). Powinien on pozostać ukryty. Ze względu na zależność x t =1(mod n), wykładniki obliczeń modulo n należy brać modulo t, gdyż wielokrotności t w wykładniku operacji modulo n nie wpływają na wynik. Jak widać umiemy przeprowadzić wszystkie potrzebne operacje matematyczne. Musimy tylko jeszcze zwrócić uwagę na parę szczegółów. Otóż jeśli e będzie miało wspólny czynnik z t = NWW(p-1,q-1), to nie będzie istniał element odwrotny do e modulo t, czyli nie obliczymy potrzebnego d. Aby można go było obliczyć, e i t muszą być względnie pierwsze. Zatem po wygenerowaniu liczb pierwszych p i q, należy sprawdzić czy dla wybranej wartości e liczby p-1 oraz q-1 nie mają wspólnych czynników z wybranym e. Wybór malej wartości e przyspiesza obliczenia i upraszcza konstrukcję systemu. Zatem jako e możemy przyjąć e=3. Po wygenerowaniu p i q sprawdzamy czy nie są one podzielne przez 3. Innymi słowy wylosowana liczba k musi spełniać k mod 3!= 1. Innym wyborem na e może być np. 5, 17 itd. Liczba e nie musi być duża, duże muszą być liczby p i q. Jak widać na podstawie jedynie klucza publicznego nie da się łatwo odgadnąć liczb w kluczu prywatnym. Można by tego dokonać rozkładając n na czynniki by poznać p i q, jednak nie jest znany wydajny algorytm rozkładu liczb na czynniki czyli faktoryzacji liczb złożonych. Dlatego mówi się, że problem rozkładu na czynniki pierwsze jest tak ważny w kryptografii.

13 Liczba n powinna mieć kilka tysięcy bitów długości by zapewnić bezpieczeństwo na odpowiednim poziomie. Przykład: Wybieramy e=3. Dobieramy takie liczby pierwsze p i q aby p-1 oraz q-1 nie dzieliły się przez 3. Warunek taki spełniają p=53 oraz q=71. Zatem n = 53*71=3763. Za t przyjmijmy t = (53-1)*(71-1)=3640. Obliczamy teraz element odwrotny do e=3 modulo t=3640. Wynosi on d=2427. Sprawdzamy: 3*2427 mod 3640 = 7281 mod 3640 = 1 zgadza się Załóżmy, że chcemy zaszyfrować wiadomość zapisaną jako m=1655. Klucz publiczny stanowi para (n, e) = (3763, 3). Szyfrujemy m: c = m e mod n = mod 3763 = 3477 Klucz prywatny to zestaw liczb (p, q, t, d) = (53, 71, 3640, 2427). Odszyfrowujemy c: m = c d mod n = mod 3763 = 1655 A wiec odzyskaliśmy oryginalną wiadomość. Należy zwrócić jednak uwagę na fakt, iż jeśli oryginalna wiadomość podniesiona do potęgi e (e jest małe) nie przekroczy n, to nie zostanie ona zaszyfrowana, gdyż nie nastąpi skrócenie modulo. Przykład: chcemy zaszyfrować m = 12 c = m e mod n = 12 3 mod 3763 = 1728 mod 3763 = 1728 Jako że e jest znane, gdyż jest częścią klucza publicznego, łatwo obliczyć po prostu pierwiastek trzeciego stopnia z 1728 i odzyskać m. Należy o tym pamiętać. Powyższe podejście użycia RSA do szyfrowania wiadomości ma swoją wadę, mianowicie długość wiadomości do zaszyfrowania jest ograniczona wielkością n (musi być od niej mniejsza). Oprócz tego trzeba najpierw uzgodnić, opracować sposób przedstawiania wiadomości np. tekstowych za pomocą liczb. Można przyjąć wartości kodów ASCII, ale jest to podejście niezbyt dobre. Dłuższa wiadomość można podzielić na mniejsze części, nie przekraczające n, i kodować każdą z tych części osobno. Jednak jest to w praktyce niewydajne, gdyż szyfrowanie RSA wymaga przeprowadzenia wielu skomplikowanych i czasochłonnych operacji matematycznych, jak potęgowanie modulo. Alternatywnym i dużo lepszym w praktyce rozwiązaniem jest kodowanie za pomocą RSA nie samej wiadomości, tylko klucza, który służy do szyfrowania i odszyfrowywania wiadomości. Sama wiadomość nie ma wtedy ograniczeń co do długości. Sam klucz jest wykorzystywany do szyfrowania blokowego lub strumieniowego. Oczywiście klucz ten, zapisany jako liczba, musi spełniać odpowiednie warunki by mógł by zaszyfrowany za pomocą kluczy RSA, tzn. nie może przekraczać n. Szyfrowanie za pomocą klucza można zrealizować przy pomocy operacji logicznej XOR. Załóżmy, że nasza wiadomość to ciąg bitów m = a klucz to również ciąg bitów

14 k = Wynik operacji XOR jest równy 1 jeśli oba bity przekazane jako argumenty są różne, a zero gdy są identyczne. Zatem: 1 XOR 1 = 0 1 XOR 0 = 1 0 XOR 0 = 0 0 XOR 1 = 1 Stosując te operacje na ciągach bitów wiadomości i klucza otrzymujemy: m = k = c = Co jest ważne, to to, że odszyfrowanie przebiega w identyczny sposób bierzemy ciąg bitów szyfrogramu i ciąg bitów klucza i przeprowadzamy ponownie operacje XOR: c = k = m = Jeśli wiadomość, którą chcemy zaszyfrować jest dłuższa niż długość klucza, to dzielimy ją na mniejsze bloki równe długości klucza i każdy blok szyfrujemy osobno. Jest to przykład szyfrowania blokowego ( szyfrowaniem strumieniowym zajmiemy się przy okazji jednego z kolejnych ćwiczeń). Oczywiście stosując ten sposób maksymalna długość klucza jest ograniczona przez n. Jeśli zależy nam na dłuższym kluczu, możemy zwiększyć n lub też zastosować jeszcze inne podejście wykorzystujące funkcję mieszającą. Funkcja mieszająca to funkcja, która pobiera jako dane wejściowe dowolnej długości ciąg bitów i zwraca jako wynik ciąg bitów o stałym rozmiarze. Pomysł polega zatem na zaszyfrowaniu kluczami RSA danych wejściowych do funkcji mieszającej, która wygeneruje nam ciąg bitów klucza o danej, pożądanej przez nas długości. Dopiero ten klucz będzie użyty do zaszyfrowania wiadomości. Mimo iż dane wejściowe do funkcji mieszającej są ograniczone przez n (gdyż je właśnie chcemy szyfrować) to długość klucza nie zależy od tych danych wejściowych ani od parametru n RSA, możemy wiec uzyskać klucz o długości, która zależy od zaimplementowanej przez nas funkcji mieszającej. Do odbiorcy wysyła się zaszyfrowaną wiadomość i zaszyfrowane dane wejściowe dla funkcji mieszającej. Odbiorca odszyfrowywuje swym kluczem prywatnym RSA dane wejściowe dla funkcji mieszającej, generuje za pomocą tej funkcji klucz i używa go do rozkodowania wiadomości za pomocą operacji XOR. Aby jednak nie komplikować sobie tymczasowo życia, nie będziemy używać funkcji mieszającej i pozostaniemy przy szyfrowaniu RSA samego klucza, którym będziemy szyfrować wiadomość za pomocą operacji XOR.

15 Zadania do zrealizowania: W naszych ćwiczeniach nie będziemy posługiwać się na razie żadną specjalną biblioteką umożliwiającą użycie liczb całkowitych dowolnej wielkości. Wykorzystując zakres liczb całkowitych dostępnych w danym języku, zaimplementujemy same mechanizmy i algorytmy szyfrowania RSA. Uzyskany przez nas program będzie bezpieczny na tyle na ile pozwala na to wielkość zastosowanych liczb (i rzetelność implementacji). 1. Napisz funkcję testującą czy dana liczba jest liczba pierwszą. 2. Napisz funkcję generującą liczby pierwsze nie większe od zadanego parametru. Zastosuj sito Eratostenesa. Wygenerowane liczby zapisz do pliku. 3. Napisz funkcję obliczającą NWD dla dwóch podanych liczb wykorzystując algorytm Euklidesa. 4. Napisz funkcję obliczającą NWD dla dwóch podanych liczb wykorzystując rozszerzony algorytm Euklidesa. 5. Wykorzystując funkcję z poprzedniego punktu napisz funkcję obliczającą element odwrotny do danej liczby modulo inna liczba. 6. Napisz funkcję obsługującą potęgowanie modulo. Wykorzystaj algorytm iteracyjnego podnoszenia do kwadratu. 7. Napisz funkcję generującą liczbę pierwszą z danego przedziału wykorzystującą test Rabina-Millera do sprawdzenia, czy wylosowana liczba jest pierwsza. 8. Zaimplementuj w programie szyfrowanie pliku za pomocą metody RSA wykorzystując wcześniej napisane funkcje. Szyfrowanie wiadomości odbywa się wykorzystując operacje XOR na bitach klucza danej długości i bitach pobranych ze strumienia szyfrowanego pliku. Szyfrowanie RSA wykorzystane jest do szyfrowania klucza. Wyeksportuj do plików klucze publiczny i prywatny, tak byś mógł udostępnić swój klucz publiczny wraz ze swoim oprogramowaniem by inni mogli wysyłać do Ciebie zaszyfrowane wiadomości. W zaszyfrowanej wiadomości powinien być również oczywiście zapisany zaszyfrowany klucz.

Wybrane zagadnienia teorii liczb

Wybrane zagadnienia teorii liczb Wybrane zagadnienia teorii liczb Podzielność liczb NWW, NWD, Algorytm Euklidesa Arytmetyka modularna Potęgowanie modularne Małe twierdzenie Fermata Liczby pierwsze Kryptosystem RSA Podzielność liczb Relacja

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 4

Algorytmy i struktury danych. Wykład 4 Wykład 4 Różne algorytmy - obliczenia 1. Obliczanie wartości wielomianu 2. Szybkie potęgowanie 3. Algorytm Euklidesa, liczby pierwsze, faktoryzacja liczby naturalnej 2017-11-24 Algorytmy i struktury danych

Bardziej szczegółowo

Dr inż. Robert Wójcik, p. 313, C-3, tel Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska

Dr inż. Robert Wójcik, p. 313, C-3, tel Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska Dr inż. Robert Wójcik, p. 313, C-3, tel. 320-27-40 Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska E-mail: Strona internetowa: robert.wojcik@pwr.edu.pl google: Wójcik

Bardziej szczegółowo

Podstawy systemów kryptograficznych z kluczem jawnym RSA

Podstawy systemów kryptograficznych z kluczem jawnym RSA Podstawy systemów kryptograficznych z kluczem jawnym RSA RSA nazwa pochodząca od nazwisk twórców systemu (Rivest, Shamir, Adleman) Systemów z kluczem jawnym można używać do szyfrowania operacji przesyłanych

Bardziej szczegółowo

Przykładowe zadania z teorii liczb

Przykładowe zadania z teorii liczb Przykładowe zadania z teorii liczb I. Podzielność liczb całkowitych. Liczba a = 346 przy dzieleniu przez pewną liczbę dodatnią całkowitą b daje iloraz k = 85 i resztę r. Znaleźć dzielnik b oraz resztę

Bardziej szczegółowo

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, Kryptografia: algorytmy asymetryczne (RSA)

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, Kryptografia: algorytmy asymetryczne (RSA) Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, 19.06.2005 1 Kryptografia: algorytmy asymetryczne (RSA) Niech E K (x) oznacza szyfrowanie wiadomości x kluczem K (E od encrypt, D K (x)

Bardziej szczegółowo

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 14, Kryptografia: algorytmy asymetryczne (RSA)

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 14, Kryptografia: algorytmy asymetryczne (RSA) Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 14, 7.06.2005 1 Kryptografia: algorytmy asymetryczne (RSA) Niech E K (x) oznacza szyfrowanie wiadomości x kluczem K (E od encrypt, D K (x)

Bardziej szczegółowo

RSA. R.L.Rivest A. Shamir L. Adleman. Twórcy algorytmu RSA

RSA. R.L.Rivest A. Shamir L. Adleman. Twórcy algorytmu RSA RSA Symetryczny system szyfrowania to taki, w którym klucz szyfrujący pozwala zarówno szyfrować dane, jak również odszyfrowywać je. Opisane w poprzednich rozdziałach systemy były systemami symetrycznymi.

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

Teoria liczb. Magdalena Lemańska. Magdalena Lemańska,

Teoria liczb. Magdalena Lemańska. Magdalena Lemańska, Teoria liczb Magdalena Lemańska Literatura Matematyka Dyskretna Andrzej Szepietowski http://wazniak.mimuw.edu.pl/ Discrete Mathematics Seymour Lipschutz, Marc Lipson Wstęp Teoria liczb jest dziedziną matematyki,

Bardziej szczegółowo

LICZBY PIERWSZE. 14 marzec 2007. Jeśli matematyka jest królową nauk, to królową matematyki jest teoria liczb. C.F.

LICZBY PIERWSZE. 14 marzec 2007. Jeśli matematyka jest królową nauk, to królową matematyki jest teoria liczb. C.F. Jeśli matematyka jest królową nauk, to królową matematyki jest teoria liczb. C.F. Gauss (1777-1855) 14 marzec 2007 Zasadnicze twierdzenie teorii liczb Zasadnicze twierdzenie teorii liczb Ile jest liczb

Bardziej szczegółowo

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba) 1. Liczby wymierne. - wartość bezwzględna liczby. dla 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba) - dla < 0 ( wartością bezwzględną liczby ujemnej jest liczba do niej przeciwna) W interpretacji

Bardziej szczegółowo

LICZBY PIERWSZE. Jan Ciurej Radosław Żak

LICZBY PIERWSZE. Jan Ciurej Radosław Żak LICZBY PIERWSZE Jan Ciurej Radosław Żak klasa IV a Katolicka Szkoła Podstawowa im. Świętej Rodziny z Nazaretu w Krakowie ul. Pędzichów 13, 31-152 Kraków opiekun - mgr Urszula Zacharska konsultacja informatyczna

Bardziej szczegółowo

n = p q, (2.2) przy czym p i q losowe duże liczby pierwsze.

n = p q, (2.2) przy czym p i q losowe duże liczby pierwsze. Wykład 2 Temat: Algorytm kryptograficzny RSA: schemat i opis algorytmu, procedura szyfrowania i odszyfrowania, aspekty bezpieczeństwa, stosowanie RSA jest algorytmem z kluczem publicznym i został opracowany

Bardziej szczegółowo

Zarys algorytmów kryptograficznych

Zarys algorytmów kryptograficznych Zarys algorytmów kryptograficznych Laboratorium: Algorytmy i struktury danych Spis treści 1 Wstęp 1 2 Szyfry 2 2.1 Algorytmy i szyfry........................ 2 2.2 Prosty algorytm XOR......................

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Algorytmy w teorii liczb

Algorytmy w teorii liczb Łukasz Kowalik, ASD 2004: Algorytmy w teorii liczb 1 Algorytmy w teorii liczb Teoria liczb jest działem matemtyki dotyczącym własności liczb naturalnych. Rozważa się zagadnienia związane z liczbami pierwszymi,

Bardziej szczegółowo

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Wykład 4. Określimy teraz pewną ważną klasę pierścieni. Wykład 4 Określimy teraz pewną ważną klasę pierścieni. Twierdzenie 1 Niech m, n Z. Jeśli n > 0 to istnieje dokładnie jedna para licz q, r, że: m = qn + r, 0 r < n. Liczbę r nazywamy resztą z dzielenia

Bardziej szczegółowo

Matematyka dyskretna

Matematyka dyskretna Matematyka dyskretna Wykład 4: Podzielność liczb całkowitych Gniewomir Sarbicki Dzielenie całkowitoliczbowe Twierdzenie: Dla każdej pary liczb całkowitych (a, b) istnieje dokładnie jedna para liczb całkowitych

Bardziej szczegółowo

WHILE (wyrażenie) instrukcja;

WHILE (wyrażenie) instrukcja; INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while

Bardziej szczegółowo

2.8. Algorytmy, schematy, programy

2.8. Algorytmy, schematy, programy https://app.wsipnet.pl/podreczniki/strona/38766 2.8. Algorytmy, schematy, programy DOWIESZ SIĘ co oznaczają pojęcia: algorytm, schemat blokowy, język programowania, jakie są sposoby obliczania największego

Bardziej szczegółowo

WHILE (wyrażenie) instrukcja;

WHILE (wyrażenie) instrukcja; INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while

Bardziej szczegółowo

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność

Bardziej szczegółowo

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność.

2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność. 2. Liczby pierwsze i złożone, jednoznaczność rozkładu na czynniki pierwsze, największy wspólny dzielnik, najmniejsza wspólna wielokrotność. 11 października 2008 r. 19. Wskazać takie liczby naturalne m,

Bardziej szczegółowo

Wrocław, Wstęp do informatyki i programowania: liczby pierwsze. Wydział Matematyki Politechniki Wrocławskiej.

Wrocław, Wstęp do informatyki i programowania: liczby pierwsze. Wydział Matematyki Politechniki Wrocławskiej. Wrocław, 28.11.2017 Wstęp do informatyki i programowania: liczby pierwsze Wydział Matematyki Politechniki Wrocławskiej Andrzej Giniewicz Dzisiaj na zajęciach... Zajmiemy się liczbami pierwszymi... liczby

Bardziej szczegółowo

1. Wykład NWD, NWW i algorytm Euklidesa.

1. Wykład NWD, NWW i algorytm Euklidesa. 1.1. NWD, NWW i algorytm Euklidesa. 1. Wykład 1 Twierdzenie 1.1 (o dzieleniu z resztą). Niech a, b Z, b 0. Wówczas istnieje dokładnie jedna para liczb całkowitych q, r Z taka, że a = qb + r oraz 0 r< b.

Bardziej szczegółowo

Zastosowanie teorii liczb w kryptografii na przykładzie szyfru RSA

Zastosowanie teorii liczb w kryptografii na przykładzie szyfru RSA Zastosowanie teorii liczb w kryptografii na przykładzie szyfru RSA Grzegorz Bobiński Uniwersytet Mikołaja Kopernika Toruń, 22.05.2010 Kodowanie a szyfrowanie kodowanie sposoby przesyłania danych tak, aby

Bardziej szczegółowo

Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 2 Teoria liczby rzeczywiste cz.2

Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 2 Teoria liczby rzeczywiste cz.2 1 POTĘGI Definicja potęgi ł ę ę > a 0 = 1 (każda liczba różna od zera, podniesiona do potęgi 0 daje zawsze 1) a 1 = a (każda liczba podniesiona do potęgi 1 dają tą samą liczbę) 1. Jeśli wykładnik jest

Bardziej szczegółowo

0 --> 5, 1 --> 7, 2 --> 9, 3 -->1, 4 --> 3, 5 --> 5, 6 --> 7, 7 --> 9, 8 --> 1, 9 --> 3.

0 --> 5, 1 --> 7, 2 --> 9, 3 -->1, 4 --> 3, 5 --> 5, 6 --> 7, 7 --> 9, 8 --> 1, 9 --> 3. (Aktualizacja z dnia 3 kwietnia 2013) MATEMATYKA DYSKRETNA - informatyka semestr 2 (lato 2012/2013) Zadania do omówienia na zajęciach w dniach 21 i 28 kwietnia 2013 ZESTAW NR 3/7 (przykłady zadań z rozwiązaniami)

Bardziej szczegółowo

1. Liczby naturalne, podzielność, silnie, reszty z dzielenia

1. Liczby naturalne, podzielność, silnie, reszty z dzielenia 1. Liczby naturalne, podzielność, silnie, reszty z dzielenia kwadratów i sześcianów przez małe liczby, cechy podzielności przez 2, 4, 8, 5, 25, 125, 3, 9. 26 września 2009 r. Uwaga: Przyjmujemy, że 0 nie

Bardziej szczegółowo

Matematyka dyskretna

Matematyka dyskretna Matematyka dyskretna Wykład 6: Ciała skończone i kongruencje Gniewomir Sarbicki 2 marca 2017 Relacja przystawania Definicja: Mówimy, że liczby a, b Z przystają modulo m (co oznaczamy jako a = b (mod m)),

Bardziej szczegółowo

Największy wspólny dzielnik Algorytm Euklidesa (także rozszerzony) WZAiP1: Chińskie twierdzenie o resztach

Największy wspólny dzielnik Algorytm Euklidesa (także rozszerzony) WZAiP1: Chińskie twierdzenie o resztach Największy wspólny dzielnik Algorytm Euklidesa (także rozszerzony) Chińskie twierdzenie o resztach Wybrane zagadnienia algorytmiki i programowania I 27 października 2010 Największy wspólny dzielnik - definicja

Bardziej szczegółowo

Wykład 1. Na początku zajmować się będziemy zbiorem liczb całkowitych

Wykład 1. Na początku zajmować się będziemy zbiorem liczb całkowitych Arytmetyka liczb całkowitych Wykład 1 Na początku zajmować się będziemy zbiorem liczb całkowitych Z = {0, ±1, ±2,...}. Zakładamy, że czytelnik zna relację

Bardziej szczegółowo

0 + 0 = 0, = 1, = 1, = 0.

0 + 0 = 0, = 1, = 1, = 0. 5 Kody liniowe Jak już wiemy, w celu przesłania zakodowanego tekstu dzielimy go na bloki i do każdego z bloków dodajemy tak zwane bity sprawdzające. Bity te są w ścisłej zależności z bitami informacyjnymi,

Bardziej szczegółowo

Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1

Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1 Ataki na RSA Andrzej Chmielowiec andrzej.chmielowiec@cmmsigma.eu Centrum Modelowania Matematycznego Sigma Ataki na RSA p. 1 Plan prezentacji Wprowadzenie Ataki algebraiczne Ataki z kanałem pobocznym Podsumowanie

Bardziej szczegółowo

Kryptografia-0. przykład ze starożytności: około 489 r. p.n.e. niewidzialny atrament (pisze o nim Pliniusz Starszy I wiek n.e.)

Kryptografia-0. przykład ze starożytności: około 489 r. p.n.e. niewidzialny atrament (pisze o nim Pliniusz Starszy I wiek n.e.) Kryptografia-0 -zachowanie informacji dla osób wtajemniczonych -mimo że włamujący się ma dostęp do informacji zaszyfrowanej -mimo że włamujący się zna (?) stosowaną metodę szyfrowania -mimo że włamujący

Bardziej szczegółowo

Zadania do samodzielnego rozwiązania

Zadania do samodzielnego rozwiązania Zadania do samodzielnego rozwiązania I. Podzielność liczb całkowitych 1. Pewna liczba sześciocyfrowa a kończy się cyfrą 5. Jeśli tę cyfrę przestawimy na miejsce pierwsze ze strony lewej, to otrzymamy nową

Bardziej szczegółowo

Parametry systemów klucza publicznego

Parametry systemów klucza publicznego Parametry systemów klucza publicznego Andrzej Chmielowiec Instytut Podstawowych Problemów Techniki Polskiej Akademii Nauk 24 marca 2010 Algorytmy klucza publicznego Zastosowania algorytmów klucza publicznego

Bardziej szczegółowo

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz

Bardziej szczegółowo

Kongruencje pierwsze kroki

Kongruencje pierwsze kroki Kongruencje wykład 1 Definicja Niech n będzie dodatnią liczbą całkowitą, natomiast a i b dowolnymi liczbami całkowitymi. Liczby a i b nazywamy przystającymi (kongruentnymi) modulo n i piszemy a b (mod

Bardziej szczegółowo

Programowanie w Baltie klasa VII

Programowanie w Baltie klasa VII Programowanie w Baltie klasa VII Zadania z podręcznika strona 127 i 128 Zadanie 1/127 Zadanie 2/127 Zadanie 3/127 Zadanie 4/127 Zadanie 5/127 Zadanie 6/127 Ten sposób pisania programu nie ma sensu!!!.

Bardziej szczegółowo

Sumy kwadratów kolejnych liczb naturalnych

Sumy kwadratów kolejnych liczb naturalnych Sumy kwadratów kolejnych liczb naturalnych Andrzej Nowicki 24 maja 2015, wersja kk-17 Niech m < n będą danymi liczbami naturalnymi. Interesować nas będzie równanie ( ) y 2 + (y + 1) 2 + + (y + m 1) 2 =

Bardziej szczegółowo

4. Funkcje. Przykłady

4. Funkcje. Przykłady 4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni

Bardziej szczegółowo

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś Wykład 5

Kryptografia. z elementami kryptografii kwantowej. Ryszard Tanaś   Wykład 5 Kryptografia z elementami kryptografii kwantowej Ryszard Tanaś http://zon8.physd.amu.edu.pl/~tanas Wykład 5 Spis treści 9 Algorytmy asymetryczne RSA 3 9.1 Algorytm RSA................... 4 9.2 Szyfrowanie.....................

Bardziej szczegółowo

Jarosław Wróblewski Matematyka Elementarna, zima 2012/13

Jarosław Wróblewski Matematyka Elementarna, zima 2012/13 Poniedziałek 12 listopada 2012 - zaczynamy od omówienia zadań z kolokwium nr 1. Wtorek 13 listopada 2012 - odbywają się zajęcia czwartkowe. 79. Uprościć wyrażenia a) 4 2+log 27 b) log 3 2 log 59 c) log

Bardziej szczegółowo

Algorytm i złożoność obliczeniowa algorytmu

Algorytm i złożoność obliczeniowa algorytmu Algorytm i złożoność obliczeniowa algorytmu Algorytm - przepis postępowania, którego wykonanie prowadzi do rozwiązania określonego problemu określa czynności, jakie należy wykonać wyszczególnia wszystkie

Bardziej szczegółowo

Jarosław Wróblewski Matematyka Elementarna, lato 2012/13. W dniu 21 lutego 2013 r. omawiamy test kwalifikacyjny.

Jarosław Wróblewski Matematyka Elementarna, lato 2012/13. W dniu 21 lutego 2013 r. omawiamy test kwalifikacyjny. W dniu 21 lutego 2013 r. omawiamy test kwalifikacyjny. Uwaga: Przyjmujemy, że 0 nie jest liczbą naturalną, tzn. liczby naturalne są to liczby całkowite dodatnie. 1. Dane są liczby naturalne m, n. Wówczas

Bardziej szczegółowo

Matematyka dyskretna

Matematyka dyskretna Matematyka dyskretna Wykład 6: Ciała skończone i kongruencje Gniewomir Sarbicki 24 lutego 2015 Relacja przystawania Definicja: Mówimy, że liczby a, b Z przystają modulo m (co oznaczamy jako a = b (mod

Bardziej szczegółowo

Ciała i wielomiany 1. przez 1, i nazywamy jedynką, zaś element odwrotny do a 0 względem działania oznaczamy przez a 1, i nazywamy odwrotnością a);

Ciała i wielomiany 1. przez 1, i nazywamy jedynką, zaś element odwrotny do a 0 względem działania oznaczamy przez a 1, i nazywamy odwrotnością a); Ciała i wielomiany 1 Ciała i wielomiany 1 Definicja ciała Niech F będzie zbiorem, i niech + ( dodawanie ) oraz ( mnożenie ) będą działaniami na zbiorze F. Definicja. Zbiór F wraz z działaniami + i nazywamy

Bardziej szczegółowo

Liczby pierwsze. Kacper Żurek, uczeń w Gimnazjum nr 1 im. Jana Pawła II w Giżycku.

Liczby pierwsze. Kacper Żurek, uczeń w Gimnazjum nr 1 im. Jana Pawła II w Giżycku. Liczby pierwsze Kacper Żurek, uczeń w Gimnazjum nr 1 im. Jana Pawła II w Giżycku. Liczbą pierwszą nazywany każdą taką liczbę naturalną, która posiada dokładnie dwa dzielniki naturalne, czyli jest podzielna

Bardziej szczegółowo

Kryptologia przykład metody RSA

Kryptologia przykład metody RSA Kryptologia przykład metody RSA przygotowanie: - niech p=11, q=23 n= p*q = 253 - funkcja Eulera phi(n)=(p-1)*(q-1)=220 - teraz potrzebne jest e które nie jest podzielnikiem phi; na przykład liczba pierwsza

Bardziej szczegółowo

Liczby rzeczywiste. Działania w zbiorze liczb rzeczywistych. Robert Malenkowski 1

Liczby rzeczywiste. Działania w zbiorze liczb rzeczywistych. Robert Malenkowski 1 Robert Malenkowski 1 Liczby rzeczywiste. 1 Liczby naturalne. N {0, 1,, 3, 4, 5, 6, 7, 8...} Liczby naturalne to liczby używane powszechnie do liczenia i ustalania kolejności. Liczby naturalne można ustawić

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax, a R \ {0}.

Bardziej szczegółowo

1. Operacje logiczne A B A OR B

1. Operacje logiczne A B A OR B 1. Operacje logiczne OR Operacje logiczne są operacjami działającymi na poszczególnych bitach, dzięki czemu można je całkowicie opisać przedstawiając jak oddziałują ze sobą dwa bity. Takie operacje logiczne

Bardziej szczegółowo

Zegar ten przedstawia reszty z dzielenia przez 6. Obrazuje on jak kolejne liczby można przyporządkować do odpowiednich pokazanych na zegarze grup.

Zegar ten przedstawia reszty z dzielenia przez 6. Obrazuje on jak kolejne liczby można przyporządkować do odpowiednich pokazanych na zegarze grup. Rozgrzewka (Ci, którzy znają pojęcie kongruencji niech przejdą do zadania 3 bc i 4, jeśli i te zadania są za proste to proponuje zadanie 5): Zad.1 a) Marek wyjechał pociągiem do Warszawy o godzinie 21

Bardziej szczegółowo

INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 2 ALGORYTM XOR ŁAMANIE ALGORYTMU XOR

INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 2 ALGORYTM XOR ŁAMANIE ALGORYTMU XOR INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 2 ALGORYTM XOR ŁAMANIE ALGORYTMU XOR 1. Algorytm XOR Operacja XOR to inaczej alternatywa wykluczająca, oznaczona symbolem ^ w języku C i symbolem w matematyce.

Bardziej szczegółowo

4. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych.

4. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych. Jarosław Wróblewski Matematyka dla Myślących, 008/09. Postęp arytmetyczny i geometryczny. Wartość bezwzględna, potęgowanie i pierwiastkowanie liczb rzeczywistych. 15 listopada 008 r. Uwaga: Przyjmujemy,

Bardziej szczegółowo

do instrukcja while (wyrażenie);

do instrukcja while (wyrażenie); Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie

Bardziej szczegółowo

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10). Wprowadzenie do inżynierii przetwarzania informacji. Ćwiczenie 1. Systemy liczbowe Cel dydaktyczny: Poznanie zasad reprezentacji liczb w systemach pozycyjnych o różnych podstawach. Kodowanie liczb dziesiętnych

Bardziej szczegółowo

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Publikacja jest dystrybuowana bezpłatnie Program Operacyjny Kapitał Ludzki Priorytet 9 Działanie 9.1 Poddziałanie

Bardziej szczegółowo

Teoria liczb. Zajmuje się własnościami liczb, wszystkim całkowitych

Teoria liczb. Zajmuje się własnościami liczb, wszystkim całkowitych Teoria liczb Zajmuje się własnościami liczb, przede wszystkim całkowitych Niepraktyczna? - kryptografia Dzielenie liczb całkowitych z resztą Niech b>0, wtedy dla każdej liczby całkowitej a istnieją jednoznacznie

Bardziej szczegółowo

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10. ZAMIANA LICZB MIĘDZY SYSTEMAMI DWÓJKOWYM I DZIESIĘTNYM Aby zamienić liczbę z systemu dwójkowego (binarnego) na dziesiętny (decymalny) należy najpierw przypomnieć sobie jak są tworzone liczby w ww systemach

Bardziej szczegółowo

WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE. Bartosz Łakomy i Dariusz Dobiesz

WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE. Bartosz Łakomy i Dariusz Dobiesz WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE Bartosz Łakomy i Dariusz Dobiesz SPIS TREŚCI: Liczby parzyste i nieparzyste Liczby podzielne lub niepodzielne przez zadane podzielniki NWD algorytm

Bardziej szczegółowo

Wyszukiwanie binarne

Wyszukiwanie binarne Wyszukiwanie binarne Wyszukiwanie binarne to technika pozwalająca na przeszukanie jakiegoś posortowanego zbioru danych w czasie logarytmicznie zależnym od jego wielkości (co to dokładnie znaczy dowiecie

Bardziej szczegółowo

Algorytm Euklidesa. Największy wspólny dzielnik dla danych dwóch liczb całkowitych to największa liczba naturalna dzieląca każdą z nich bez reszty.

Algorytm Euklidesa. Największy wspólny dzielnik dla danych dwóch liczb całkowitych to największa liczba naturalna dzieląca każdą z nich bez reszty. Algorytm Euklidesa Algorytm ten, jak wskazuje jego nazwa, został zaprezentowany przez greckiego matematyka - Euklidesa, żyjącego w w latach około 300r. p.n.e., w jego podstawowym dziele pt. Elementy. Algorytm

Bardziej szczegółowo

Matematyka dyskretna. Wykład 11: Kryptografia z kluczem publicznym. Gniewomir Sarbicki

Matematyka dyskretna. Wykład 11: Kryptografia z kluczem publicznym. Gniewomir Sarbicki Matematyka dyskretna Wykład 11: Kryptografia z kluczem publicznym Gniewomir Sarbicki Idea kryptografii z kluczem publicznym: wiadomość f szyfrogram f 1 wiadomość Funkcja f (klucz publiczny) jest znana

Bardziej szczegółowo

Jarosław Wróblewski Matematyka Elementarna, zima 2015/16

Jarosław Wróblewski Matematyka Elementarna, zima 2015/16 Na ćwiczeniach 6.0.205 omawiamy test kwalifikacyjny. Uwaga: Przyjmujemy, że 0 nie jest liczbą naturalną, tzn. liczby naturalne są to liczby całkowite dodatnie.. Sformułować uogólnione cechy podzielności

Bardziej szczegółowo

B.B. 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską:

B.B. 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską: Dodawanie dwójkowe Do wykonywania dodawania niezbędna jest znajomość tabliczki dodawania, czyli wyników sumowania każdej cyfry z każdą inną. W systemie binarnym mamy tylko dwie cyfry 0 i 1, zatem tabliczka

Bardziej szczegółowo

Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie:

Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie: Ciągi rekurencyjne Zadanie 1 Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie: w dwóch przypadkach: dla i, oraz dla i. Wskazówka Należy poszukiwać rozwiązania w postaci, gdzie

Bardziej szczegółowo

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

Funkcja kwadratowa. f(x) = ax 2 + bx + c, Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax 2 + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax 2, a R \

Bardziej szczegółowo

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu:

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu: ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu: Rys1 Ćwiczenie 2 Podaj jaki ciąg znaków zostanie wypisany po wykonaniu

Bardziej szczegółowo

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0, 2 Arytmetyka Niech b = d r d r 1 d 1 d 0 będzie zapisem liczby w systemie dwójkowym Zamiana zapisu liczby b na system dziesiętny odbywa się poprzez wykonanie dodawania d r 2 r + d r 1 2 r 1 d 1 2 1 + d

Bardziej szczegółowo

ZADANIE 1. Ważenie (14 pkt)

ZADANIE 1. Ważenie (14 pkt) ZADANIE 1. Ważenie (14 pkt) Danych jest n przedmiotów o niewielkich gabarytach i różnych wagach. Jest też do dyspozycji waga z dwiema szalkami, ale nie ma odważników. Kładąc na wadze przedmioty a i b,

Bardziej szczegółowo

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak Indukcja Materiały pomocnicze do wykładu wykładowca: dr Magdalena Kacprzak Charakteryzacja zbioru liczb naturalnych Arytmetyka liczb naturalnych Jedną z najważniejszych teorii matematycznych jest arytmetyka

Bardziej szczegółowo

Badanie pierwszości liczby, klasa NP i test Rabina

Badanie pierwszości liczby, klasa NP i test Rabina Badanie pierwszości liczby, klasa NP i test Rabina Mateusz Chynowski 11 stycznia 2009 Liczby pierwsze są bardzo istotne zarówno w matematyce, jak i informatyce. W tej drugiej nauce istnieje dość poważny

Bardziej szczegółowo

Problem W przedziale całkowitym <a,b> wyszukaj wszystkie liczby parzyste.

Problem W przedziale całkowitym <a,b> wyszukaj wszystkie liczby parzyste. Problem W przedziale całkowitym wyszukaj wszystkie liczby parzyste. Liczby parzyste W wielu algorytmach musimy wygenerować liczby parzyste z zadanego przedziału liczb całkowitych. Tego typu

Bardziej szczegółowo

Piotr Chrząstowski-Wachtel Uniwersytet Warszawski. Al Chwarizmi i trzy algorytmy Euklidesa

Piotr Chrząstowski-Wachtel Uniwersytet Warszawski. Al Chwarizmi i trzy algorytmy Euklidesa Piotr Chrząstowski-Wachtel Uniwersytet Warszawski Al Chwarizmi i trzy algorytmy Euklidesa Algorytmika Najważniejsza część informatyki Opisuje jak rozwiązywać problemy algorytmiczne, jakie struktury danych

Bardziej szczegółowo

MADE IN CHINA czyli SYSTEM RESZTOWY

MADE IN CHINA czyli SYSTEM RESZTOWY MADE IN CHINA czyli SYSTEM RESZTOWY System ten oznaczmy skrótem RNS (residue number system czyli po prostu resztowy system liczbowy). Wartość liczby w tym systemie reprezentuje wektor (zbiór) reszt z dzielenia

Bardziej szczegółowo

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Podstawowe algorytmy i ich implementacje w C. Wykład 9 Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny

Bardziej szczegółowo

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5. Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5. Schemat Hornera. Wyjaśnienie: Zadanie 1. Pozycyjne reprezentacje

Bardziej szczegółowo

Konstrukcje warunkowe Pętle

Konstrukcje warunkowe Pętle * Konstrukcje warunkowe Pętle *Instrukcja if sposób na sprawdzanie warunków *Konstrukcja: if(warunek) else { instrukcje gdy warunek spełniony} {instrukcje gdy warunek NIE spełniony} * 1. Wylicz całkowity

Bardziej szczegółowo

WYRAŻENIA ALGEBRAICZNE

WYRAŻENIA ALGEBRAICZNE WYRAŻENIA ALGEBRAICZNE Wyrażeniem algebraicznym nazywamy wyrażenie zbudowane z liczb, liter, nawiasów oraz znaków działań, na przykład: Symbole literowe występujące w wyrażeniu algebraicznym nazywamy zmiennymi.

Bardziej szczegółowo

Podstawy programowania. Podstawy C# Przykłady algorytmów

Podstawy programowania. Podstawy C# Przykłady algorytmów Podstawy programowania Podstawy C# Przykłady algorytmów Proces tworzenia programu Sformułowanie problemu funkcje programu zakres i postać danych postać i dokładność wyników Wybór / opracowanie metody rozwiązania

Bardziej szczegółowo

3. Instrukcje warunkowe

3. Instrukcje warunkowe . Instrukcje warunkowe Przykłady.1. Napisz program, który pobierze od użytkownika liczbę i wypisze na ekran słowo ujemna lub nieujemna, w zależności od tego czy dana liczba jest ujemna czy nie. 1 #include

Bardziej szczegółowo

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci: 1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci: * Jan Kowalski * * ul. Zana 31 * 3. Zadeklaruj zmienne przechowujące

Bardziej szczegółowo

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 6 Podstawy programowania 2 Temat: Funkcje i procedury rekurencyjne Przygotował: mgr inż. Tomasz Michno Wstęp teoretyczny Rekurencja (inaczej nazywana rekursją, ang. recursion)

Bardziej szczegółowo

Matematyka Dyskretna Zestaw 2

Matematyka Dyskretna Zestaw 2 Materiały dydaktyczne Matematyka Dyskretna (Zestaw ) Matematyka Dyskretna Zestaw 1. Wykazać, że nie istnieje liczba naturalna, która przy dzieleniu przez 18 daje resztę 13, a przy dzieleniu przez 1 daje

Bardziej szczegółowo

Spis treści. Przedmowa... 9

Spis treści. Przedmowa... 9 Spis treści Przedmowa... 9 1. Algorytmy podstawowe... 13 1.1. Uwagi wstępne... 13 1.2. Dzielenie liczb całkowitych... 13 1.3. Algorytm Euklidesa... 20 1.4. Najmniejsza wspólna wielokrotność... 23 1.5.

Bardziej szczegółowo

Zajęcia nr. 3 notatki

Zajęcia nr. 3 notatki Zajęcia nr. 3 notatki 22 kwietnia 2005 1 Funkcje liczbowe wprowadzenie Istnieje nieskończenie wiele funkcji w matematyce. W dodaktu nie wszystkie są liczbowe. Rozpatruje się funkcje które pobierają argumenty

Bardziej szczegółowo

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie)

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie) Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie) Wprowadzenie Haszowanie jest to pewna technika rozwiązywania ogólnego problemu słownika. Przez problem słownika rozumiemy tutaj takie

Bardziej szczegółowo

Projekt AS KOMPETENCJI jest współfinansowany przez Unię Europejską w ramach środków Europejskiego Funduszu Społecznego

Projekt AS KOMPETENCJI jest współfinansowany przez Unię Europejską w ramach środków Europejskiego Funduszu Społecznego Projekt AS KOMPETENCJI jest współfinansowany przez Unię Europejską w ramach środków Europejskiego Funduszu Społecznego Program Operacyjny Kapitał Ludzki 2007-2013 CZŁOWIEK NAJLEPSZA INWESTYCJA Publikacja

Bardziej szczegółowo

DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH.

DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH. DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH. Dodawanie,8 zwracamy uwagę aby podpisywać przecinek +, pod przecinkiem, nie musimy uzupełniać zerami z prawej strony w liczbie,8. Pamiętamy,że liczba to samo co,0, (

Bardziej szczegółowo

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym Wstęp do programowania Reprezentacje liczb Liczby naturalne, całkowite i rzeczywiste w układzie binarnym System dwójkowy W komputerach stosuje się dwójkowy system pozycyjny do reprezentowania zarówno liczb

Bardziej szczegółowo

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia. ARYTMETYKA BINARNA ROZWINIĘCIE DWÓJKOWE Jednym z najlepiej znanych sposobów kodowania informacji zawartej w liczbach jest kodowanie w dziesiątkowym systemie pozycyjnym, w którym dla przedstawienia liczb

Bardziej szczegółowo

W. Guzicki Próbna matura, grudzień 2014 r. poziom rozszerzony 1

W. Guzicki Próbna matura, grudzień 2014 r. poziom rozszerzony 1 W. Guzicki Próbna matura, grudzień 01 r. poziom rozszerzony 1 Próbna matura rozszerzona (jesień 01 r.) Zadanie 18 kilka innych rozwiązań Wojciech Guzicki Zadanie 18. Okno na poddaszu ma mieć kształt trapezu

Bardziej szczegółowo

Dlaczego nie wystarczają liczby wymierne

Dlaczego nie wystarczają liczby wymierne Dlaczego nie wystarczają liczby wymierne Analiza zajmuje się problemami, w których pojawia się przejście graniczne. Przykładami takich problemów w matematyce bądź fizyce mogą być: 1. Pojęcie prędkości

Bardziej szczegółowo

Zadanie 1. Suma silni (11 pkt)

Zadanie 1. Suma silni (11 pkt) 2 Egzamin maturalny z informatyki Zadanie 1. Suma silni (11 pkt) Pojęcie silni dla liczb naturalnych większych od zera definiuje się następująco: 1 dla n = 1 n! = ( n 1! ) n dla n> 1 Rozpatrzmy funkcję

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 5. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 5. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 5 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Algorytm Euklidesa Liczby pierwsze i złożone Metody

Bardziej szczegółowo

2 Kryptografia: algorytmy symetryczne

2 Kryptografia: algorytmy symetryczne 1 Kryptografia: wstęp Wyróżniamy algorytmy: Kodowanie i kompresja Streszczenie Wieczorowe Studia Licencjackie Wykład 14, 12.06.2007 symetryczne: ten sam klucz jest stosowany do szyfrowania i deszyfrowania;

Bardziej szczegółowo