|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Cipher Modes
When a block cipher is used, any one of the following cipher modes can be specified via the CryptSetKeyParam function. If the application does not explicitly specify one of these modes, then the cipher block chaining (CBC) cipher mode is used.
Electronic Codebook (ECB)
When this cipher mode is used, each block is encrypted individually. No feedback is used. This means any blocks of plaintext that are identical and are either in the same message, or in a different message that is encrypted with the same key, will be transformed into identical ciphertext blocks. If the plaintext to be encrypted contains substantial repetition, then it is feasible for the ciphertext to be broken one block at a time. Furthermore, it is possible for an unscrupulous person to substitute and exchange individual blocks without detection.
Initialization vectors cannot be used with this cipher mode. If a single bit of the ciphertext block is garbled, then the entire corresponding plaintext block will also be garbled.
Cipher Block Chaining (CBC)
This cipher mode introduces feedback. Before each plaintext block is encrypted, it is XOR'ed with the ciphertext of the previous block. This ensures that even if the plaintext contains many identical blocks, they will each encrypt to a different ciphertext block. The initialization vector is XOR'ed with the first plaintext block before the block is encrypted. As with the Codebook cipher mode, if a single bit of the ciphertext block is garbled, then the corresponding plaintext block will also be garbled. In addition, a bit in the subsequent plaintext block (in the same position as the original garbled bit) will be garbled. Synchronization errors are fatal. If there are extra or missing bytes in the ciphertext, the plaintext will be garbled from that point on.
When the Microsoft RSA Base Provider is used, this is the default cipher mode.
Cipher Feedback Mode (CFB)
The cipher feedback mode lets you process small increments of plaintext into ciphertext, instead of processing an entire block at a time. This can be is useful, for example, when encrypting a stream of data that originates at a keyboard. Each keystroke can be encrypted and transmitted without the need to wait for an entire block to be typed. This mode uses a shift register which is one block size in length and divided up into sections. For example, if the block size is 64 bits with 8 bits processed at a time, then the shift register would be divided up into 8 sections.
This is the procedure for each encryption cycle:
1. The block in the shift register is encrypted normally. 2. The leftmost 8 bits in the encrypted shift register are XOR'ed with the next 8 bits of plaintext and sent off as 8 bits of ciphertext. 3. The shift register is shifted 8 bits to the left. 4. The 8 bits of ciphertext generated in step 2 is placed in the rightmost 8 bits of the shift register.
In CryptoAPI, the number of bits processed at one time is specified by setting the encryption key's KP_MODE_BITS parameter using the CryptSetKeyParam function. This parameter typically defaults to 8. Depending on the value of the KP_MODE_BITS parameter, this cipher mode is substantially slower than the Cipher Block Chaining mode. For example, if the block size is 64 bits with 8 bits are processed at a time, this cipher mode is 64/8 or 8 times slower. Before the encryption process begins, the shift register is filled with the initialization vector.
If a bit in the cipher text is garbled, one plaintext bit is garbled and the shift register is corrupted. This results in the next several plaintext blocks being garbled until the bad bit is shifted out of the shift register. In the preceding example, 9 bytes of plaintext would be garbled. This is the same amount of error propagation as with the Cipher Block Chaining mode. Synchronization errors are not fatal, provided that the slip is a multiple of KP_MODE_BITS. Thus, if KP_MODE_BITS is 8 and there are extra or missing bytes from the ciphertext, then 9 bytes of plaintext are garbled and the plaintext will have the same number of extra or missing bytes.
Output Feedback Mode (OFB)
This mode is similar to the cipher feedback mode. The only difference between the two modes is how the shift register is filled. The output feedback (OFB) cipher mode uses the following encryption cycle:
1. The block in the shift register is encrypted normally. 2. The leftmost 8 bits in the encrypted shift register are XOR'ed with the next 8 bits of plaintext and sent off as 8 bits of ciphertext. 3. The shift register is shifted 8 bits to the left. 4. The leftmost 8 bits of the encrypted shift register used in step 2 is placed in the rightmost 8 bits of the shift register.
As with the Cipher Feedback mode, the shift register is filled with the initialization vector before the encryption process starts. If a bit in the cipher text is garbled, the corresponding bit of plaintext will also be garbled. This is much better than the Cipher Feedback mode. However, synchronization errors are fatal. If there are extra or missing bits from the ciphertext, then the plaintext will be garbled from that point on.
Note According to Gait (see reference below), the OFB block cipher mode has a weakness when the number of bits fed back is different than the block size. It is thus recommended that the KP_MODE_BITS parameter be set to the block size when this cipher mode is used. *J. Gait, "A New Nonlinear Pseudorandom Number Generator," IEEE Transactions on Software Engineering, v. SE-3, n. 5, Sep 1977, pp. 359-363.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Способы Шифра
Когда блочное шифр использовано, любой из способов шифра следующего могут быть определены через функцию CryptSetKeyParam. Если приложение явно не определяет один из этих способов, тогда блочное соединение шифра шифра (CBC) способ использован.
Электронный Codebook (ECB)
Когда этот способ шифра использован, каждый блок кодируется индивидуально. Никакая обратная связь не использована. Это означает любых блоков открытого текста, который идентичен и - или в том же сообщении, или в другом сообщении, которое закодировано тем же ключом, будет превращено в идентичные блоков зашифрованного текста. Если открытый текст, который нужно кодировать содержит надежное повторение, тогда это исполнимое для зашифрованного текста, который нужно разбивать один блок за один раз. Кроме того, возможно для неразборчивого человека заменяться и биржевая личность блокируется без обнаружения.
Векторы Инициализации не могут быть использованы этим способом шифра. Если единственный бит блока зашифрованного текста искажен, тогда целый соответствующий блок открытого текста также будет искажен.
Блочное Соединение Шифра (CBC)
Этот способ шифра вводит обратную связь. Прежде, чем каждый блок открытого текста будет закодирован, он - XOR'ed с зашифрованным текстом предшествующего блока. Это гарантирует это даже если бы открытый текст содержит много идентичных блоков, они будут каждый кодируется другому блоку зашифрованного текста. Вектор инициализации - XOR'ed с первым блоком открытого текста прежде, чем блок будет закодирован. Как и способ шифра Codebook, если единственный бит блока зашифрованного текста искажен, тогда соответствующий блок открытого текста также будет искажен. Кроме того, немного в последующем блоке открытого текста (в той же позиции как подлинник исказивший бит), будет искажен. Ошибки Синхронизации фатальные. Если есть дополнительные или отсутствующие байты в зашифрованном тексте, открытый текст будет искажен из этой точки на.
Когда Базовый Поставщик Микрософт RSA использован, это - по умолчанию режим шифра.
Режим Обратной связи Шифра (CFB)
Режим обратной связи шифра позволяет Вам обрабатывать небольшие приращения открытого текста в зашифрованный текст, вместо обработки целого блока за один раз. Это может быть полезное, например, кодируя поток данных, которые порождаются на клавиатуре. Каждое нажатие клавиши может быть закодировано и передано без необходимости, чтобы ждать целого блока, который нужно набираться. Этот режим использует регистр сдвига, который - один блочный размер в длина и поделенный по в секции. Например, если блочный размер - 64 битов с 8 битами обработанными за один раз, тогда регистр сдвига должен быть поделен по в 8 секций.
Это - процедура для каждого шифровального цикла:
1. Блок в регистре сдвига кодируется нормально. 2. Самые левые 8 битов в закодированном регистре сдвига - XOR'ed с следующими 8 битами открытого текста и посланного как 8 битов зашифрованного текста. 3. Регистр сдвига перемещен 8 битов налево. 4. 8 Битов зашифрованного текста сгенерированных на этапе 2 установлены на самых правых 8 битах регистра сдвига.
В CryptoAPI, количество битов обработанных в любой момент определено установкой параметра ключа шифрования KP_MODE_BITS, использовавшим функцию CryptSetKeyParam. Этот параметр обычно устанавливается по умолчанию на 8. В зависимости от величины параметра KP_MODE_BITS, этот режим шифра в значительной степени медленний чем Блок Шифра, подключающий режим. Например, если блочный размер - 64 битов с 8 битами обрабатываются за один раз, этот режим шифра - 64/8 или 8 раз медленнее. Прежде, чем шифровальный процесс начнется, регистр сдвига заполнен вектором инициализации.
Если немного в тексте шифра искажен, один бит открытого текста искажен и регистр сдвига искажен. Это заканчивается следующими несколькими блоками открытого текста, искажанными пока плохой бит не будет перемещен из регистра сдвига. В предыдущем примере, 9 байтов открытого текста должны быть искажены. Это - та же сумма распространения ошибки как и Блок Шифра, подключающий режим. Ошибки Синхронизации не фатальные, при условии, что скольжение явится кратным KP_MODE_BITS. Таким образом, если KP_MODE_BITS - 8 и есть дополнительные или отсутствующие байты из зашифрованного текста, тогда 9 байтов открытого текста искажены и открытый текст будет иметь то же число дополнительных или отсутствующих байтов.
Выходной Режим Обратной связи (OFB)
Этот режим подобный режиму обратной связи шифра. Единственное различие между двумя режимами - как регистр сдвига заполнен. Выходная обратная связь (OFB) режим шифра использует следующий шифровальный цикл:
1. Блок в регистре сдвига кодируется нормально. 2. Самые левые 8 битов в закодированном регистре сдвига - XOR'ed с следующими 8 битами открытого текста и посланного как 8 битов зашифрованного текста. 3. Регистр сдвига перемещен 8 битов налево. 4. Самые левые 8 битов закодированного регистра сдвига использованных на этапе 2 установлены на самых правых 8 битах регистра сдвига.
Как и режим Обратной связи Шифра, регистр сдвига заполнены вектором инициализации прежде, чем шифровальный процесс начнется. Если немного в тексте шифра искажен, соответствующий бит открытого текста также будет искажен. Это - значительно лучше чем режим Обратной связи Шифра. Тем не менее, ошибки синхронизации фатальные. Если есть дополнительные или отсутствующие биты из зашифрованного текста, тогда открытый текст будет искажен из этой точки на.
Примечание Согласно Походке (смотри ссылку ниже), блочный режим шифра OFB имеет слабость когда количество битов попитавших обратную сторону другое чем блочный размер. Таким образом рекомендовано, чтобы параметр KP_MODE_BITS был установлен в блочный размер когда этот режим шифра использован. *J. Походка, " Новый Нелинейный Псевдослучайный Генератор Числа," Сделок IEEE в ПРОГРАММИРОВАНИИ, v. SE-3, n. 5, Сент. 1977, pp. 359-363.
|
|
|
|
| |