Kryptografia - wymysł czy koniecznośćKryptografia - definicjaKryptografia jest nauką zajmującą się szyfrowaniem danych. Celem kryptografii jest wymyślanie różnych szyfrów, tak aby dane zaszyfrowane były jak najbardziej bezpieczne. Z mojego punktu widzenia kryptografia jest częścią algorytmiki, dlatego też zagadnienia kryptograficzne umieściłem w dziale dotyczącym algorytmiki. Szyfrowanie jest bardzo ważną operacją w dzisiejszym świecie. Nawet nie zdajesz sobie sprawy, jak ciężkie byłoby życie, gdyby kryptografia się nie rozwinęła i nie rozwijała nadal Kryptografia to koniecznośćSzyfrowanie polega na takim zapisaniu posiadanej informacji, aby odczytanie informacji przez osobę nieznającą sposobu odszyfrowania informacji było niemożliwe. W dzisiejszych czasach, w dobie banków internetowych i transakcji przez internet, szyfrowanie ma szczególnie duże znaczenie. Pomyśl tylko, co by było, jeśli ktoś przechwyciłby informacje, które wysyłasz do swojego banku i uzyskał dostęp do Twojego konta. Chyba zbytnio by Cię to nie ucieszyło? Szyfrowanie jest też niezbędne w nabierającej coraz większego znaczenia w dzisiejszych czasach transmisji bezprzewodowej. Bez szyfrowania taka transmisja straciłaby sens, bo gdy by chciał, aby jego wścibski sąsiad mógł się dowiedzieć wielu sekretów podsłuchując transmisję? Szyfrowanie ma również duże znaczenie podczas użytkowania systemu operacyjnego. Podawane hasła muszą być zapisywane tak, aby ktoś po znalezieniu i otwarciu pliku, nie poznał cudzych haseł. Ponadto w nowoczesnych systemach plików (np. NTFS) dane na dysku można szyfrować tak, aby nikt poza osobą, która dokonała szyfrowania, nie mógł odczytać zaszyfrowanych informacji. Zwykłe dane też warto zabezpieczyćCo prawda nie wszystkie posiadane przez nas informacje są aż tak ważne, że musimy użyć superbezpiecznych algorytmów. Mimo to nie zawsze chcemy, aby każdy mógł je odczytać. Mowa tu nawet o współużytkownikach naszego domowego peceta. Dlatego też warto poznać metody, które umożliwią napisanie prostego programu, pozwalającego na szyfrowanie danych - o ile osoba próbująca dostać się do tych danych nie jest zaawansowanym użytkownikiem komputera, programistą lub hakerem, zaszyfrowane dane powinny być bezpieczne. Później oczywiście kilka metod można ze sobą połączyć i odszyfrowanie danych nie będzie już takie proste ani dla programisty ani dla hakera. Oczywiście nie znaczy to, że dane będą całkowicie bezpieczne. Kryptografia a bezpieczeństwo danychWarto pamiętać, że większość obecnie stosowanych algorytmów kryptograficznych, nie daje całkowitej gwarancji na bezpieczeństwo danych. W wielu obecnie stosowanych algorytmach bierze się pod uwagę moc obliczeniową współczesnych komputerów i zakłada, że złamanie szyfru powyżej pewnego czasu np. powyżej kilkudziesięciu lat, sprawia, że szyfr jest bezpieczny. Jednak w dobie szybko rozwijającej się techniki wiele z obecnie stosowanych algorytmów będzie zupełnie bezużyteczna. Już dzisiaj klucze 56-bitowe mogą zostać złamane w czasie budzącym zaniepokojenie za pomocą grupy komputerów połączonych w sieć. Szyfry, których złamanie przez pojedynczy komputer osobisty przez kilka lat, będą mogły być łamane w ciągu nawet kilku godzin. Dlatego warto zdawać sobie sprawę, jak ważną dziedziną jest obecnie kryptografia i jak bardzo ważny jest jej rozwój. Jeśli bowiem kryptografia stanęłaby nagle w miejscu, mogło by się wkrótce okazać, że z pomocą nowoczesnych komputerów, możemy już zapomnieć o transakcjach internetowych czy bezpiecznym przesyłaniu innych danych przez internet, bowiem ktoś inny mając taki sam lub lepszy komputer bez problemu rozszyfruje przesyłane przez nas dane. Przechowywanie znaków w pamięci komputeraPrzed przystąpieniem do poznawania metod szyfrowania danych warto wiedzieć, w jaki sposób komputer przechowuje znaki. Otóż każdy znak przechowywany jest w jednostce pamięci zwanej bajtem (B). Każdy bajt składa się z 8 bitów (b), przy czym informacja zapisana w jednym bicie, może przyjmować tylko dwie wartości: 0 lub 1. Przykładowe wartości jednego bajta to 00000100, 10101010, 01011111. Zastanówmy się, jak wiele różnych wartości możemy zapisać na jednym bajcie. Najmniejszą wartością jest oczywiście 00000000, a największa 11111111. Na jednym bicie możemy zapisać dwie wartości (0 lub 1), na dwóch bitach cztery (00, 01, 10, 11), a na trzech osiem (000, 001, 010, 011, 100, 101, 110, 111). Kontynuując rozumowanie, dojdziemy w końcu do wniosku, że na n bitach można zapisać 2 do potęgi n wartości. Zatem na jednym bajcie (czyli 8 bitach) możemy zapisać 2 do potęgi 8 wartości, czyli dokładnie 256 różnych wartości. Zapytasz teraz, skąd komputer ma wiedzieć, co oznacza np. 00001100, a co oznacza 11010000. Otóż wprowadzono pewien kod - kod ASCII, który określa ściśle, jaką wartość ma dany znak. Wartości przyjmowane w kodzie ASCII są w zakresie od 0 (00000000) do 255 (11111111), czyli jest to dokładnie 256 różnych wartości. Przykładowo litera małe c ma w kodzie ASCII wartość 99, a litera duże C ma wartość 67. Program w C++ wypisujący wszystkie znakiOto przykładowy program wypisujący wartości znaków w kodzie ASCII i odpowiadające im symbole. Po uruchomieniu programu, z komputera wydobędzie się krótki pisk. Nic się nie bój. Tak właśnie ma być. Znak o kodzie 7 powoduje ten dźwięk. Ponadto jeśli się dobrze przyjrzysz, nie widać wszystkich znaków, a znaki o kodach 12 i 13 są jakby pominięte. To akurat wynika z tego, że znak o kodzie 13 powoduje powrót do początku linii i to, co zostało wcześniej napisane jako znak o kodzie 12, zostaje później zamazane przez znak o kodzie 14. Jeśli interesuje Cię znaczenie niektórych niewidocznych znaków, spróbuj dojść do tego na własną rękę. Jednak do zrozumienia metod szyfrowania, znajomość wszystkich znaków w kodzie ASCII nie będzie konieczna.
|