- Unit Goals
- Background
- Definicje
- Timelines
- Kinds of Ciphers
- Kryptografia klucza tajnego
- Szyfr Cezara
- Substytucja monoalfabetyczna
- Homofoniczna substytucja
- Simple Vigenère
- Auto-Key Vigenère
- Modern Auto-Key Ciphers
- One Time Pad
- Playfair
- Cztery kwadraty
- Simple Block Transposition
- Columnar Transposition
- Płot z szyn
- Połączenie Substytucji i Transpozycji
- Bifid
- Trifid
- Enigma
- Nowoczesne metody kryptograficzne
- DES
- IDEA
- RC4
- RC6
- Blowfish
- Twofish
- AES
- Wymiana klucza
- Kryptografia klucza publicznego
- Kryptosystem RSA
- Szyfrowanie kryptograficzne
- Message Authentication Codes
- Digital Signatures
- RSA dla podpisów cyfrowych
- DSA
- Cryptanalysis
- Przykłady programowania
- Przykłady JavaScript
- Przykłady Python
- Przykłady Java
Unit Goals
Background
Alice and Bob can be people but also clients and servers, peer computers, data stores, network routers, etc. Mallory może podszyć się pod jednego z uczestników, dodać, zmodyfikować lub usunąć rzeczywiste wiadomości, porwać połączenie, dokonać odmowy usługi, wstrzyknąć złośliwe oprogramowanie itp.
Cele:
- Poufność: Odzyskanie $m$ powinno kosztować Eve więcej niż $m$ jest warte.
- Uwierzytelnianie: Bob powinien być w stanie zweryfikować, że to Alicja wysłała $m$.
- Integralność: Bob powinien być w stanie zweryfikować, że $m$ nie zostało naruszone.
- Nonrepudiation: Alice nie powinna być w stanie zaprzeczyć wysłaniu $m$.
Najlepsze kryptosystemy zakładają, że Eve i Mallory znają $E$, $D$, $c$ oraz, jeśli $k_e \neq k_d$, to również $k_e$. Większość kryptosystemów nie polega na tym, że ich algorytmy są tajne, ponieważ:
- Jeśli twój tajny algorytm jest zagrożony (ktoś mógłby opuścić twoją grupę), musisz go zmienić, a to jest o wiele trudniejsze niż tylko zmiana klucza!
- Algorytmy publiczne mogą być poddane tysiącom ekspertów szukających wad, więc masz pewien stopień zaufania do tych, które wytrzymują kontrolę.
Dalsza lektura:Security Through Obscurity,Kerchoff’s Principle i ta dyskusja.
Badanie kryptologii obejmuje projektowanie różnych szyfrów, metody kryptoanalizy (ataki), wymianę kluczy, uwierzytelnianie kluczy, haszowanie kryptograficzne, podpis cyfrowy i kwestie społeczne (prawne, polityczne, itp.). Zobacz tematy w Wikipedii na stronie cryptography.
DON’T DO THIS STUFF ON YOUR OWN IN REAL APPLICATIONS
Sure, it’s fine to play around at home, but don’t EVER try to roll your own cryptography for anything real. Zostaw to profesjonalistom. Jeśli sam staniesz się profesjonalistą, wtedy, mmmmm, w porządku.
To był ważny komunikat dla służb publicznych.
Definicje
Słowa, które warto znać:
Kryptografia Sztuka i nauka tworzenia szyfrów. Kryptoanaliza Sztuka i nauka łamania szyfrów, tzn. wydobywania $m$ z danych $c$, $E$, $D$ i ewentualnie $k_e$. Kryptologia Nauka o kryptografii i kryptoanalizie.
Kryptosystem Określony zestaw algorytmów i protokołów do szyfrowania, deszyfrowania i generowania kluczy. Przykłady: Kryptosystem Cramer-Shoup, Kryptosystem Rabin, Kryptosystem Benaloh, Kryptosystem RSA. System kryptograficzny Każdy system, który wykorzystuje kryptografię. Szyfr Algorytm używany w kryptosystemie.
Zamęt Właściwość posiadania relacji pomiędzy tekstem jawnym, szyfrogramem i kluczem tak skomplikowanych, że stają się bezużyteczne dla kryptoanalityka. Dyfuzja Właściwość polegająca na tym, że statystyczne wzorce w tekście jawnym rozprzestrzeniają się szeroko w szyfrogramie.
Timelines
If you like history….
- Wikipedia’s History of Cryptography Article
- Wikipedia’s Timeline
- Carl Ellison’s Timeline
Kinds of Ciphers
Here are some useful categories of ciphers. Należy zauważyć, że dany szyfr może należeć do więcej niż jednej z tych kategorii.
- Klasyczny: Szyfr wystarczająco łatwy do wykonania ręcznie, zwykle oparty na znakach. Zwany również ręcznym.
- Nowoczesny: Dość dużo każdy szyfr, który nie jest klasyczny.
- Substytucja: Każdy znak z plaintext jest zastąpiony przez jeden lub więcej znaków, aby ciphertext.
- Transpozycja: Znaki w tekście jawnym są przekształcane w celu utworzenia szyfrogramu.
- Monoalphabetic: Szyfr substytucyjny, w którym znak tekstu jawnego jest zawsze zastępowany przez ten sam znak.
- Polialfabetyczny: Szyfr substytucji, który zasadniczo wykorzystuje wiele monoalfabetycznych mapowań substytucji.
- Homophonic: Substytucja, w której jeden znak może mapować do jednego z zestawu znaków.
- Poligraficzny: Podstawienie bloków znaków za bloki znaków.
- Okresowy: Szyfr polialfabetyczny, w którym schemat podstawienia powtarza się.
- Nieokresowy: Samoobjaśniający się, jeśli rozumiesz okresowy.
- Blokowy: Szyfrowanie odbywa się nie na znak, ale na bloki znaków.
- Strumień: Szyfr działający na strumieniu danych o nieznanej długości, zwykle zawierający sprzężenie zwrotne.
- Tajny klucz: Szyfr, w którym $k_e$ i $k_d$ są takie same lub trywialnie pochodne od siebie; wymaga, aby strony spotkały się w tajemnicy, aby wymienić klucze, których będą używać. Nazywany również symetrycznym.
- Klucz publiczny: Schemat, w którym klucz szyfrowania każdego jest publicznie znany, ale jego klucz deszyfrowania jest utrzymywany w tajemnicy. Nazywany również asymetrycznym.
Kryptografia klucza tajnego
Szyfry z kluczem tajnym (a.k.a. klucz symetryczny) są znacznie szybsze niż szyfry z kluczem publicznym, ale zarządzanie kluczem może być ogromnym problemem.
- Jeśli $n$ osób w grupie musi się komunikować, potrzebują $frac{n(n-1)}{2}$ kluczy.
- Klucze muszą być dystrybuowane bezpiecznie (w tajemnicy).
- Klucze muszą być przechowywane w bezpiecznym miejscu.
- Klucze powinny być często zmieniane, co przyczynia się do bólu głowy związanego z dystrybucją.
UWAGA
W poniższych przykładach opartych na znakach, założymy (bez utraty ogólności) alfabet 26 symboli (
A..Z
).
Szyfr Cezara
Całkowicie żałosny i niezabezpieczony szyfr według współczesnych standardów. Klucz szyfrujący $k_e$ jest małą liczbą całkowitą, a $k_d = k_e$. Aby zaszyfrować, dodaj $k_e$ do każdego znaku plaintext; aby odszyfrować, odejmij.
ATTACKATDAWN
staje się FYYFHPFYIFBS
Trywialne do złamania: po prostu zgadnij $k_e$.
Substytucja monoalfabetyczna
Zamiast po prostu dodawać stałe przesunięcie do każdego znaku, możesz wstępnie obliczyć tabelę substytucji, generując losową permutację swojego alfabetu. Na przykład:
ABCDEFGHIJKLMNOPQRSTUVWXYZ MQHPSVJYCURFTBILAKWNGZDOEX
Teraz ATTACKATDAWN
jest teraz MNNMHRMNPMDB
.
Nie złamiesz tego przez zgadywanie klucza (istnieje $n!$ możliwych kluczy), ale analiza częstotliwości może złamać każdy monoalfabetyczny szyfr zastępczy, pod warunkiem, że wiadomość jest wystarczająco długa.
Dla technik, których kluczem jest permutacja, jednym ze sposobów na ułatwienie zapamiętania klucza jest wybranie frazy, ułożenie jej unikalnych liter, a następnie wypełnienie brakujących liter w kolejności. Na przykład, PREMATURE OPTIMIZATION IS THE ROOT OF ALL EVIL
daje takie odwzorowanie substytucji:
PREMATUOIZNSHFLVBCDGJKQWXY
Homofoniczna substytucja
Każda litera tekstu jawnego odwzorowuje jeden lub więcej symboli w szyfrogramie. Liczba celów powinna być proporcjonalna do ich częstotliwości (aby pokonać analizę częstotliwościową). Przykład:
A 12 15 36 50 56 70 81 95 B 51 84 C 16 44 65 D 04 06 48 82 E 01 17 19 34 47 49 58 60 67 77 85 90 F 13 27 G 09 28 H 26 42 53 59 68 71 I 35 73 76 86 91 96 J 18 K 07 L 29 40 54 87 M 25 30 N 21 61 62 69 74 94 O 02 03 08 10 57 75 93 P 41 98 Q 97 R 32 38 43 45 80 83 S 14 22 39 79 89 99 T 00 20 23 33 46 52 72 78 88 U 11 64 66 V 37 W 63 92 X 31 Y 24 55 Z 05
Aby zaszyfrować, wybierz losowo spośród możliwości. Przykład, jednym z możliwych szyfrów ATTACKATDAWN
jest
56 78 20 95 65 07 12 72 06 50 92 61
Simple Vigenère
Szyfr znany jako prosty szyfr Vigenère’a z przesunięciem nie został w ogóle wymyślony przez Vigenère’a… wydaje się, że po raz pierwszy opisał go Giovan Battista Bellaso. Kluczem jest ciąg znaków, który dodajemy do tekstu jawnego za pomocą dodawania modularnego, jak w tym przykładzie (A=0, B=1, C=2, …, Z=25):
Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUAR Ciphertext: JUKVKSIPPYVSOLBFILZMONOEYHGANSBWOOYDNHVDXCRUPBIOI
Do ręcznego generowania szyfrogramu można użyć koła szyfrowego lub tabula recta.
Ten schemat nie jest bezpieczny, ponieważ klucz się powtarza. Jeśli długość klucza może być określona, kryptoanalityk może wykonać wiele analiz częstotliwości (po jednej dla każdej wartości przesunięcia w kluczu). Metody określania długości klucza to metoda Kaisiski’ego i test Friedmana.
Dla danych binarnych (tj. sekwencji bitów) dodawanie modularne base-2 jest po prostu prostym xor. Przykład:
Plaintext: 0110000101010000111101001010101010010000001111101 Key: 0000011100000111000001110000011100000111000001110 Ciphertext: 0110011001010111111100111010110110010111001110011
Auto-Key Vigenère
Vigenère rzeczywiście stworzył autokey szyfr, który jest silniejszy, ponieważ klucz nigdy nie powtarza. Zamiast tego „klucz” składa się z frazy kluczowej, po której następuje plaintext, jak to:
Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKTAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRD Ciphertext: JUKVKVOZCOHMDSFUMZCTNHZVQPFOJWCOOTWYVVBHUBYHYSWFU
Ten użył plaintext jako część klucza. Możesz również użyć szyfrogramu. See how?
Modern Auto-Key Ciphers
You still can crack autokey Vigenère ciphers by linguistic analysis, because the key contains text and is thus likely to have high-frequency letters. Nowoczesne szyfry auto-key generują wartości przesunięcia za pomocą generatora liczb losowych. Klucz stanowi ziarno dla generatora.
One Time Pad
Jeśli klucz:
- jest tak długi lub dłuższy niż kodowana wiadomość
- jest naprawdę losowo generowany
- jest używany raz i tylko raz
to masz prowdopodobnie bezpieczny szyfr zwany one time pad. Twój rzeczywisty algorytm może używać substytucji polialfabetycznej lub nawet prostego xoringu wiadomości z kluczem, tak długo jak spełniasz trzy powyższe kryteria.
Podkładka jednorazowa nigdy nie może być złamana. Jest to doskonały schemat szyfrowania, w każdym razie z matematycznego punktu widzenia.
Playfair
Jest to przykład poligraficznego szyfru substytucyjnego.Zastępuje on pary znaków. Kluczem jest permutacja {A..I,K..Z}, na przykład:
Z C B M L G D A Q E T U O K H F S X V N P I Y R W
Aby zaszyfrować, wypisz tekst jawny (bez spacji i interpunkcji), wstawiając znak X między podwójne litery i na końcu, jeśli to konieczne, aby tekst miał równą długość.Następnie dla każdej pary liter:
- Let $(a,b)$ be the row and column of the first character and $(c,d)$ be the row and column of the second.
- If $a \neq c$ and $b \neq d$ then return $(a,d)(b,c)$.
- Jeśli $a = c$ to zwróć $(a,(b+1) \bmod 5)(c,(d+1) \bmod 5)$.
- Jeśli $b = d$ to zwróć $((a+1) \bmod 5,b)((c+1) \bmod 5,d)$.
THEN ATTACK FROM THE EAST
⇒ TH EN AT XT AC KF RO MT HE XE AS TX
⇒ UT HW GO FO DB TV YK ZK NH NA DX OF
⇒ UTHWGOFODBTVYKZKNHNADXOF
Deszyfrowanie przebiega według odwrotnych reguł. Szyfr Playfaira jest dość niepewny.
Cztery kwadraty
Szyfruje digrafy podobnie jak Playfair, ale nieco mocniej, ponieważ pozwala na podwójne litery i nie daje odwróconych digrafów szyfrogramu dla odwróconych digrafów szaty graficznej. Przykład
a b c d e G I V E M f g h i k L B R T Y l m n o p O D A H C q r s t u F K N P Q v w x y z S U W X Z P R E M A a b c d e T U O I Z f g h i k N S H F L l m n o p V B C D G q r s t u K Q W X Y v w x y z
THEN ATTACK FROM THE EAST
⇒ TH EN AT TA CK FR OM TH EE AS TX
⇒ NI VL EV FM MO BV DF NI MA VV NX
Okay, więc nieco silniejszy niż Playfair, ale co z tego? Komputery mogą złamać takie rzeczy w ciągu sekund, a może minut (biorąc pod uwagę wystarczającą ilość szyfrogramu).
Simple Block Transposition
Najprostszy szyfr transpozycyjny rozbija wiadomość na bloki o rozmiarze n, a następnie szyfruje każdy blok zgodnie z permutacją $(1..n)$.
GETTHATHEALTHINSPECTOR
staje się TGATEHATTEHLSHENIPRCOT
.Columnar Transposition
Wypisujemy wiadomość wiersz po wierszu w kratkę, a następnie odczytujemy ją kolumnami. Całkowicie niezabezpieczone. Kluczem jest tylko liczba rzędów. Zgadnij.
Płot z szyn
Płot z szyn nie jest lepszy od poprzedniego, tylko zabawniejszy. Kluczem jest liczba szyn, na których piszesz tekst jawny w górę i w dół, generując szyfrogram przez odczytywanie jednej szyny na raz.
Przykład: Aby zakodować "fill out and file a WS2475 form"
na 4 szynach:
f t l 4 m i u a i e 2 7 r l o n f a s 5 o l d w f
następnie odczytujesz szyfrogram "ftl4miuaie27rlonfas5oldwf"
. To jest banalne do złamania. Wystarczy zgadnąć $k$.
Połączenie Substytucji i Transpozycji
Transpozycja sama w sobie jest bardzo słaba; substytucja jest słaba; połączenie ich jest lepsze. Można mieszać wiele klasycznych szyfrów substytucyjnych z różnymi transpozycjami, lub używać specjalnych szyfrów kombinacyjnych, takich jak bifid. Również większość słynnych maszyn wirnikowych i nowoczesnych szyfrów używa tej kombinacji; w rzeczywistości stosują one te transformacje wiele razy.
Bifid
Ten zastępuje litery ich współrzędnymi w siatce i wykonuje transpozycję kolumnową na współrzędnych. Przykład:
Z C B M L G D A Q E T U O K H F S X V N P I Y R W
Wpisujemy współrzędne (wiersz, kolumna) pod każdą literą tekstu jawnego (np, „A” jest w rzędzie 1, kolumna 2; „T” jest w rzędzie 2, kolumna 0, itd.):
ATTACKATDAWN 122102121143 200213201244
Potem odczytaj w rzędach, grupuj po dwójkach i sprawdź litery szyfrogramu:
122102121143200213201244 A U B A D R T B Q T A W
Trifid
Jak Bifid, ale na sześcianie. Przykład:
Z C B M L F V N P G D A Q E X I R W T U O K H S Y . J
Aby zaszyfrować, najpierw zapisz współrzędne:
ATTACKATDAWN 000001000022 122102121110 200210201221
000001000022122102121110200210201221 Z C Z O S F H Q V I N .
Enigma
Enigma była słynną niemiecką maszyną rotacyjną z czasów II wojny światowej (właściwie rodziną maszyn).Większość wersji implementowała polialfabetyczny szyfr substytucyjny z okresem 16900 plus plugboard do scramblingu (transpozycji). Klucz składał się z kolejności rotorów, pozycji startowej każdego rotora, ustawień pierścienia i ustawień plugboardu (około 1,6 × 1020 możliwości). Każdego dnia (mniej więcej) pojawiał się nowy klucz, publikowany wcześniej w książkach kodowych.
Aliantom udało się go złamać dzięki kilku słabym punktom w jego konstrukcji…
- Żadna litera nie szyfrowała sama do siebie
- Samowzajemność oznaczała, że było mniej możliwości ustawienia scramblera
…ale co ważniejsze, wielu słabościom w sposobie jego użycia…
- Było naprawdę łatwo znaleźć szopki. Większość wiadomości zaczynała się od raportu o pogodzie.
- Wcześniej klucze wiadomości pojawiały się dwa razy z rzędu.
…oraz poprzez zdobywanie ksiąg kodowych z przechwyconych statków.
O tym jak złamano Enigmę można przeczytać w NSA,oraz na Wikipedii.
Nowoczesne metody kryptograficzne
Teraz, gdy mamy teorię informacji Shannona, bardzo potężne komputery i wieki teorii i praktyki za sobą, większość nowoczesnych technik:
- działają na ciągach bitów, a nie znaków
- są ostrożne, aby całkowicie zamaskować wzorce i nadmiarowości w tekście jawnym
- używają losowych kluczy (które również mogą być ponownie użyte)
- zapewniają, że bardzo niewielkie zmiany w tekście jawnym wpływają na dużą część szyfrogramu (i odwrotnie). Nazywa się to efektem lawiny.
Dodatkowo, dobrze jest, jeśli szyfr jest:
- wydajny
- odporny na błędy
Większość szyfrów to albo szyfry blokowe, albo szyfry strumieniowe. Szyfry blokowe wymagają paddingu i mogą działać w różnych trybach (Zobacz książkę Schniera lub artykuł w Wikipedii.)
- ECB – Electronic Codebook
- CBC – Cipher Block Chaining
- CFB – Cipher Feedback
- OFB – Output Feedback
- CTR – Counter
- BC – Block Chaining
- PCBC – Propagating Cipher Block Chaining
- CBCC – Cipher Block Chaining with Checksum
DES
At Wikipedia
IDEA
At Wikipedia
RC4
At Wikipedia
RC6
At Wikipedia
Blowfish
At Wikipedia
Twofish
At Wikipedia
AES
At Wikipedia
AES jest nowym standardem, zastępującym DES. Został zwycięzcą konkursu (w 2001 roku), gdzie został zgłoszony pod nazwą Rijndael, pokonującRC6, Serpent, MARS i Twofish.
Wymiana klucza
Diffie i Hellman (laureaci Nagrody Turinga z 2015 roku) oraz ich przyjacielMerkle pokazali w 1976 roku, że możliwe jest, aby dwie osoby wymieniały tajny klucz bez konieczności rzeczywistego spotkania w tajemnicy:
- Alice wybiera liczbę pierwszą $n$ i wysyła ją w sposób jawny do Boba
- Alice wybiera liczbę pierwszą mod $n$ (jak znaleźć), zwaną $g$, i wysyła ją w sposób jawny do Boba
- Alice wybiera tajną liczbę całkowitą $a$, i wysyła $g^a ^bmod n$ w sposób jawny do Boba
- Bob wybiera tajną liczbę całkowitą $b$ i wysyła $g^b ^bmod n$ w sposób jawny do Alice
- Alice oblicza ($g^b ^bmod n)^a ^bmod n$, a Bob oblicza ($g^a ^bmod n)^b ^b ^bmod n$. To jest klucz!(To jest $g^{ab} ^bmod n$)
To jest prawdopodobnie bezpieczne, pod warunkiem, że $n$ jest bardzo duże i $frac{n-1}{2}$ jest również pierwszorzędne, ponieważ chociaż Ewa zna $g$, $n$, $g^a ^bmod n$ i $g^b ^bmod n$, nie ma znanego efektywnego sposobu na uzyskanie z nich $a$ lub $b$.To jest problem logarytmu dyskretnego, pamiętasz?
Przykład z małymi $n$:
- Alice wybiera $n=208799$ i $g=13$ i wysyła je do Boba
- Alice wybiera $a=152335$, a Bob wybiera $b=98113$
- Alice wysyła Bobowi $13^{152335} = 73033$
- Bob wysyła Alice $13^{98133} \$147540$
- Alice oblicza $147540^{152335} \bmod 208799 = 8435$
- Bob oblicza $73033^{98133}
- Sekretny klucz to 8435$.
Nie należy tego robić z małymi wartościami $n$.
Ogólnie rzecz biorąc, o ile nie otrzymasz jakiegoś certyfikatu, nie próbuj samodzielnie zabezpieczać żadnych systemów real-world. Ale oczywiście dogo ahead and learn thealgorithms and practice coding for now.
Kryptografia klucza publicznego
Szyfry z kluczem publicznym rozwiązują koszmar zarządzania kluczem w przypadku szyfrów z kluczem tajnym, kosztem szybkości. W grupie $n$ osób potrzeba tylko $n$ kluczy publicznych i $n$ kluczy prywatnych.
Kryptosystem RSA
Diffie-Hellman nie szyfruje; wymienia tylko klucz.RSA może szyfrować i deszyfrować. Oto jak. Każda osoba
- Generuje dwie duże liczby pierwsze, $p$ i $q$.
- Wybiera wartość $e$ względnie pierwszą od $(p-1)(q-1)$.
- Publikuje swój klucz publiczny $(N,e)$, gdzie $N = pq$.
- Oblicza $d$ = modularną odwrotność $e$ względem $(p-1)(q-1)$, zachowując ją w tajemnicy.
- Zniszcza $p$ i $q$.
Teraz sprawdź to:
- Aby Alice mogła wysłać wiadomość $m$ do Boba, wysyła $c = m^e \bmod N$.
- Bob łatwo to rozszyfrowuje, ponieważ $m = c^d \bmod N$.
Trywialny przykład:
OSTRZEŻENIE!
Ten przykład służy wyłącznie do ilustracji. Nigdy nie implementuj swojego własnego algorytmu kryptograficznego. Upewnij się również, że rozumiesz, jak okropna jest kryptografia klucza publicznego z tak małymi kluczami. Prawdziwe klucze powinny mieć tysiące bitów.
Użyjmy klucza 16-bitowego (NIE RÓB TEGO W RZECZYWISTOŚCI). Wygeneruj dwie losowe 8-bitowe liczby pierwsze:
$p = 163$ = 173$
Generuj 16-bitową liczbę pierwszą dla wykładnika kodowania:
$e = 64013$
Teraz:
$n = pq = 28199 ^mathsf{modInverse}(e, (p-1)(q-1)) = 6797$
Zakodujmy ciąg ¿Dónde está ud.?
. Oto on w UTF-8:
c2 bf 44 c3 b3 6e 64 65 20 65 73 74 c3 a1 20 75 64 2e 3f
W systemie dziesiętnym:
194 191 68 195 179 110 100 101 32 101 115 116 195 161 32 117 100 46 63
Teraz zastosujmy funkcję kodującą do każdego z nich::
$194^{64013} \bmod 28199 = 15626$
$191^{64013} \bmod 28199 = 19945$
$68^{64013} \bmod 28199 = 27982$
$
$63^{64013} \bmod 28199 = 18384$
Tekst szyfru to:
15626 19445 27982 22746 2679 7739 16824 23107 9054 23107 8378 16412 22746 5566 9054 881 16824 17864 18384
Do rozkodowania:
$15626^{6797} \bmod 28199 = 194$
$19445^{6797} \bmod 28199 = 191$
$27982^{6797} \bmod 28199 = 68$
$16824^{6797}
Wracamy do oryginalnej wiadomości!
Przy okazji
Ponieważ szyfrowanie symetryczne jest o wiele szybsze, możesz najpierw wygenerować tajny klucz i przesłać go przez linię zabezpieczoną za pomocą kryptografii klucza publicznego. Teraz cała przyszła komunikacja może używać tajnego klucza.
Szyfrowanie kryptograficzne
Hash, a.k.a. fingerprint, checksum, message digest jest wzorem bitowym (zwykle około 160 bitów lub tak), generowanym z wiadomości przez funkcję cryptographichash. Aby hasz był bezpieczny lub kryptograficzny, musi być obliczeniowo niewykonalny do
- znalezienia wiadomości, która haszuje do danej wartości (jednokierunkowość)
- znalezienia dwóch wiadomości, które haszują do tej samej wartości (odporność na kolizję)
Matematycznie, kryptograficzna funkcja haszująca $H$ wytwarza hasz z wiadomości, $H(m) = c$, taki, że $m$ nie może być efektywnie określony z $c$, i nie można efektywnie znaleźć $m_1 = m_2$ taki, że $H(m_1) = H(m_2)$,
Zwykle zmiana tylko jednego bitu w wiadomości spowoduje, że skrót będzie wyglądał zupełnie i całkowicie inaczej.
$ cat willThis is my will.I leave 1000 dollars to Aliceand everything else to Bob.Signed, Eve.$ md5sum willc18feb890752c9e680c99d1e909fd761 will$ sed "s/1/9/g" will > Will$ cat WillThis is my will.I leave 9000 dollars to Aliceand everything else to Bob.Signed, Eve.$ md5sum Will85570bc2d0458b1f98f484261dee7d4d Will
Bezpieczny hasz zapewnia sposób na określenie, czy wiadomość została naruszona.
Zobacz Steve Friedl’s Illustrated Guide to Cryptpgraphic Hashes.
Message Authentication Codes
Są one podobne do kryptograficznych haszów, z wyjątkiem tego, że używają tajnego klucza, podczas gdy hasze po prostu używają samej wiadomości.
$MAC(m, k) = c$
Więcej informacji:
- MACs vs. Hashes at StackOverflow
- Digital Signatures at Wikpedia
- MACs at Wikipedia
Digital Signatures
Jak Bob może być pewien, że wiadomość pochodzi od Alicji, a nie od kogoś innego? Podpisując ją przez Alicję; oto jak. W praktyce zazwyczaj podpisuje się skrót, a nie całą wiadomość.
RSA dla podpisów cyfrowych
Aby Alice wysłała wiadomość do Boba,
- Alice szyfruje m za pomocą swojego klucza prywatnego
- Alice szyfruje za pomocą klucza publicznego Boba
- Bob deszyfruje za pomocą swojego klucza prywatnego
- Bob deszyfruje za pomocą kluczem publicznym Alice
$m = A(B'(B(A'(m)))$
DSA
Z Wikipedii
Cryptanalysis
To obszerny temat i nie będzie tu omawiany. Zamiast tego, poniżej znajduje się lista technik.
- Analiza częstotliwości
- Atak znanego tekstu jawnego
- Atak znanego szyfrogramu
- Atak wybranego tekstu jawnego
- Atak wybranego klucza atak na klucz
- Kryptoanaliza liniowa
- Kryptoanaliza różnicowa
- Kradzież
- Przekupstwo
- Szantaż
Przykłady programowania
Heh, nie zamierzamy pokazywać, jak stworzyć własną kryptowalutę. Zamierzamy przyjrzeć się niektórym aktualnie działającym bibliotekom.
Przesyłasz dane przez sieć IP?
Użyj TLS.
Czytaj dalej, jeśli chcesz skorzystać z jakichś zabawnych bibliotek kryptograficznych.
Przykłady JavaScript
Odnośnik: Node crypto
.
Przykłady Python
Odniesienie:Biblioteki kryptograficzne Pythona -Python hashlib
-Python secrets
Przykłady Java
.