Исходный код вики Криптография

Версия 1.37 от Alexandr Fokin на 2023/01/09 14:41

Скрыть последних авторов
Alexandr Fokin 1.4 1 ----
2
3 |(% style="width:390px" %) |(% style="width:1131px" %)
4 |(% style="width:390px" %)Шифр, шифрование, алгоритмы шифрования.|(% style="width:1131px" %)(((
5 * Шифр - данные над которыми было произведено шифрование, результат.
6 * Шифрование - процесс, получающий на вход некие данные и ключ и возвращающий в результате шифр.
Alexandr Fokin 1.15 7 __Данные - Шифрование -> Шифр__
Alexandr Fokin 1.4 8 * Расшифровка - процесс, обратный шифрованию, принимающий на вход шифр и ключ и возвращающий данные.
Alexandr Fokin 1.15 9 __Шифр - Расшифровка -> Данные__
Alexandr Fokin 1.4 10 * Алгоритмы шифрования - конкретные реализации алгоритмов для выполнения шифрования.
11 )))
12 |(% style="width:390px" %)Хеш, хеширование, алгоритмы хеширования.|(% style="width:1131px" %)(((
Alexandr Fokin 1.36 13 Шифр предполагает возможность расшифровки, в свою очередь хеширование работает только в одну сторону данные -> хеш.
Alexandr Fokin 1.5 14 При этом восстановление исходных данных на основании хеша не предполагается.
15
16 Дополнение: обычно размер хеша является константным и не зависит от размера входных данных.
Alexandr Fokin 1.4 17 )))
Alexandr Fokin 1.36 18 |(% style="width:390px" %) |(% style="width:1131px" %)
Alexandr Fokin 1.4 19
20 ----
21
22
Alexandr Fokin 1.37 23 |=(% style="width: 250px;" %)Категория|=(% style="width: 454px;" %)Описание|=(% style="width: 652px;" %)Использование|=(% style="width: 136px;" %)Алгоритм
24 |(% style="width:250px" %)(((
25 ====== Симметричное шифрование ======
26 )))|(% style="width:454px" %)(((
27 Используется __1 общий ключ__ для шифрования и расшифровки.
Alexandr Fokin 1.2 28
Alexandr Fokin 1.12 29 ----
30
Alexandr Fokin 1.37 31 {{code language="C#"}}
32 EncryptedData Encrypt(
33 data,
34 key
35 )
36 Data Decipher(
37 encryptedData, key
38 )
Alexandr Fokin 1.11 39 {{/code}}
Alexandr Fokin 1.37 40 )))|(% style="width:652px" %)Обычное, классическое шифрование.|(% style="width:136px" %)DES, TripleDES,
Alexandr Fokin 1.22 41 Rijndael AES,
Alexandr Fokin 1.34 42 RC2,
43 Blowfish
Alexandr Fokin 1.37 44 |(% style="width:250px" %)(((
45 ====== Ассиметричное шифрование. ======
Alexandr Fokin 1.14 46
Alexandr Fokin 1.37 47 ====== Шифрование с открытым ключом. ======
48 )))|(% style="width:454px" %)(((
49 Используется __2 ключа (открытый и закрытый)__, таким образом, что информация, зашифрованная одним из ключей, может быть расшифрована только с помощью второго.
Alexandr Fokin 1.2 50
Alexandr Fokin 1.17 51 Обычно уступают в скорости и криптостойкости симметричным алгоритмам.
Alexandr Fokin 1.19 52
53 ----
54
Alexandr Fokin 1.37 55 {{code language="C#"}}
56 EncryptedData Encrypt(
57 data,
58 privateKey
59 )
60 Data DecipherData(
61 encryptedData,
62 publicKey
63 )
Alexandr Fokin 1.27 64
Alexandr Fokin 1.37 65 EncryptedData Encrypt(
66 data,
67 publicKey
68 )
69 Data DecipherData(
70 encryptedData,
71 privateKey
72 )
Alexandr Fokin 1.19 73 {{/code}}
Alexandr Fokin 1.37 74 )))|(% style="width:652px" %)(((
Alexandr Fokin 1.9 75 * Можно выдать клиенту открытый ключ. Клиент зашифрует данные перед передачей нам, прочитать их сможем только мы с помощью закрытого ключа.
Alexandr Fokin 1.19 76 * Можно зашифровать некоторые данные закрытым ключом, выдуть клиентам публичный ключ для доступа только на чтение.
77
78 Понятие односторонняя функция с черным ходом.
Alexandr Fokin 1.21 79
80 ----
81
82 Необходимо наличие доверенного центра сертификаций.
83 Центр выполняет роль хранилища открытых ключей в привязке к конкретному лицу.
84
85 Центр может сгенерировать цифровой сертификат, содержащий открытый ключ клиента, и подписанный собственным закрытым ключом центра.
Alexandr Fokin 1.17 86 )))|(% style="width:136px" %)RSA,
87 ElGamal
Alexandr Fokin 1.37 88 |(% style="width:250px" %)(((
89 ====== Криптографический протокол ======
90 )))|(% style="width:454px" %)Некоторое соглашение о формате, обмена данных между сторонами. Может включать в себя совокупность разных алгоритмов шифрования.|(% style="width:652px" %)(((
Alexandr Fokin 1.19 91 Установление шифрованной сессии между двумя сторонами:
92
93 1. Стороны используют ассиметричное шифрования для обмена ключами симметричного шифрования
94 1. Ключи симметричного шифрования используются в рамках сессии для шифрования сообщений
95
96 ----
97
98
99 )))|(% style="width:136px" %)(((
Alexandr Fokin 1.18 100 SSL,
Alexandr Fokin 1.17 101 IPSEC,
Alexandr Fokin 1.18 102 S/MIME,
103 PGP
104 )))
Alexandr Fokin 1.37 105 |(% style="width:250px" %)(((
106 ====== Хеш ======
Alexandr Fokin 1.23 107
Alexandr Fokin 1.36 108 Криптографический хеш (отдельно)
Alexandr Fokin 1.37 109 )))|(% style="width:454px" %)(((
Alexandr Fokin 1.12 110
111
112 ----
113
Alexandr Fokin 1.37 114 {{code language="C#"}}
115 Hash Hash(
116 data
117 )
Alexandr Fokin 1.12 118 {{/code}}
Alexandr Fokin 1.37 119 )))|(% style="width:652px" %)(((
Alexandr Fokin 1.10 120 Хеш-функция
121 [[https:~~/~~/ru.wikipedia.org/wiki/Хеш-функция>>https://ru.wikipedia.org/wiki/Хеш-функция]]
Alexandr Fokin 1.2 122
Alexandr Fokin 1.36 123 Криптографическая хеш функция обладает рядом свойств, относительно обычной хеш функции.
Alexandr Fokin 1.33 124 )))|(% style="width:136px" %)(((
125 MD5,
126 SHA,
127 bcrypt
128 )))
Alexandr Fokin 1.37 129 |(% style="width:250px" %)(((
130 ====== Хеш с ключом. ======
Alexandr Fokin 1.10 131
132 MAC (Message authentication code)
133
134 Имитовставка (Имитозащитная вставка)
Alexandr Fokin 1.37 135 )))|(% style="width:454px" %)(((
136 В некотором смысле: __Хеш + Симметричное шифрование__.
Alexandr Fokin 1.12 137
Alexandr Fokin 1.14 138 Используется 1 общий ключ для хеширования.
139
140 В криптографии, один из механизмов проверки целостности информации, позволяющий гарантировать то, что данные не были изменены.
141
Alexandr Fokin 1.12 142 ----
143
Alexandr Fokin 1.37 144 {{code language="C#"}}
145 Hash Hash(
146 data,
147 key
148 )
Alexandr Fokin 1.12 149 {{/code}}
Alexandr Fokin 1.37 150 )))|(% style="width:652px" %)(((
Alexandr Fokin 1.14 151 1. Отправитель и получатель договариваются об общем ключе.
152 1. Отправитель создает сообщение, создание хеш с ключем на основе сообщения и общего ключа.
153 Отправитель отправляет получателю данные сообщения и хеша.
154 1. Получатель со своей стороны также рассчитывает хеш с ключем на основе полученного тексте и общего ключа.
155 1. Получатель сравнивает рассчитанный и полученный хеши.
156 Получатель проверяет целостность сообщения, а также отправителя.
Alexandr Fokin 1.10 157
Alexandr Fokin 1.14 158 Возможные проблемы: общий ключ несет за собой такой момент, что получатель самостоятельно может формировать сообщения по той-же логике и в некоторых случаях потделывать исходного отправителя.
159 )))|(% style="width:136px" %)HMAC
Alexandr Fokin 1.37 160 |(% style="width:250px" %)(((
161 ====== Цифровая подпись ======
162 )))|(% style="width:454px" %)(((
163 В некотором смысле: __Хеш + Ассиметричное шифрование__.
Alexandr Fokin 1.27 164
165 ----
166
Alexandr Fokin 1.37 167 {{code language="C#"}}
168 SignedHash SignData(
169 hash,
170 privateKey,
171 hashType
172 )
173 bool VerifySignedHash(
174 signedHash,
175 calculatedHash,
176 publicKey,
177 hashType
178 )
Alexandr Fokin 1.27 179 {{/code}}
Alexandr Fokin 1.37 180 )))|(% style="width:652px" %)(((
Alexandr Fokin 1.24 181 Подтверждение авторства/подлинности контента (эл. письма, программы ...).
182
183 ----
184
Alexandr Fokin 1.28 185 Подписанное сообщение = сообщение + цифровая подпись (хеш, зашифрованный на основе асинхронного шифрования и приватного ключа) + публичный ключ.
Alexandr Fokin 1.24 186
187 1. Потребитель проверяет публичный ключ у центра сертификаций.
188 1. Потребитель расшифровывает приложенный хеш сообщения с помощью публичного ключа.
189 1. Потребитель самостоятельно рассчитывает хеш сообщения.
190 1. Потребитель сравнивает приложенный и рассчитанный хеши.
191
192 )))|(% style="width:136px" %)RSA,
Alexandr Fokin 1.17 193 DSA,
194 ElGamal
195
Alexandr Fokin 1.10 196