Гаммирование: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
 
(не показаны 33 промежуточные версии 21 участника)
Строка 1: Строка 1:
'''Гамми́рование''', или '''Шифр XOR''', — метод [[Симметричные криптосистемы|симметричного]] [[шифрование|шифрования]], заключающийся в «наложении» последовательности, состоящей из случайных чисел, на [[открытый текст]]. Последовательность случайных чисел называется '''''гамма-последовательностью''''' и используется для зашифровывания и расшифровывания данных. Суммирование обычно выполняется в каком-либо [[конечное поле|конечном поле]]. Например, в [[поле Галуа]] <math>GF(2)</math> суммирование принимает вид операции «[[Сложение по модулю 2|исключающее ИЛИ (XOR)]]».
{{Викифицировать}}

'''Гамми́рование''' — метод [[Симметричные криптосистемы|симметричного]] [[шифрование|шифрования]], заключающийся в «наложении» последовательности, состоящей из случайных чисел, на [[открытый текст]]. Последовательность случайных чисел называется '''гамма-последовательностью''' и используется для зашифровывания и расшифровывания данных. Суммирование, обычно, выполняется в каком-либо [[конечное поле|конечном поле]]. Например, в поле [[Поле Галуа|Галуа GF(2)]] суммирование принимает вид операции «[[Сложение по модулю 2|исключающее ИЛИ (xor)]]».

<!-- Шифрование / расшифрирование данных в режиме гаммирования. Криптосхема алгоритма шифрования в режиме простой замены, записывается заполнение КЗУ и блока подстановок.
Сначала равновероятно и взаимосвязано генерируется 64 бита синхропосылки, которая разделяется на начальные левый и правый подблоки длиной по 32 бита:

Подблоки синхропосылки зашифровываются в режиме простой замены в течение 32 циклов шифрования:
Образованные в итоге 32-го цикла левый и правый подблоки записываются в накопителе и накопителе, как значения и соответственно. Заполнение накопителя складывается в сумматоре СМ по модулю с 32-битовой криптографической константой.

С выхода сумматора СМ новое значение запоминается в накопителе.
В течение 32 циклов значения и зашифровываются в режиме простой замены, образуя первый 64-разрядный блок шифрующей гаммы, состоящей из правого и левого полублоков:

Полублоки шифруемой гаммы записываются в регистр последовательно сдвига, из которого побитно считаются для шифрования битов первого 64-разрядного блока открытого сообщения. Очередной бит блока сообщения шифруется в режиме гаммирования путем поразрядного сложения по модулю 2 в сумматоре СМ с очередным битом блока шифрующей гаммы:

Сформированные таким образом 64 бита составляют первый блок криптограммы.
Для шифрования второго и последующих блоков открытого сообщения из накопителей и считываются значения и, складываются с соответствующими криптографическими константами и полученные значения запоминаются в указанных накопителях. Далее формирование использование второго и последующих блоков шифрующей гаммы выполняется в соответствии с (4.25) и (4.26). По каналу связи или в память ЭВМ последовательно передаются синхропосылки и сформированные блоки криптограммы.
Криптосистема алгоритма при расшифровывании в режиме гаммирования имеет вид, аналогичный криптосистеме шифрования (рис. 4.9). Из полученной синхропосылки, идентично процессу формирования блоков шифрующей гаммы, последовательно формируются блоки дешифрующий гаммы, которые используются для дешифрирования принятых блоков криптограммы по правилу:

Алгоритм шифрования в режиме гаммирования по ГОСТ 28147-89 является реализацией режима обратной связи по выходу блочного шифра и позволяет обеспечить помехоустойчивую шифрованную связь при передаче данных по каналам связи с ошибками, так как размножения ошибок при расшифровании не происходит. Для исключения снижения криптостойкости при повторном использовании одного и того же оперативного ключа необходимо в каждом сеансе связи использовать неповторяющуюся синхропосылку. Алгоритм шифрования в режиме гаммирования при возможности имитовоздействия со стороны нарушителя необходимо использовать совместно с алгоритмом выработки имитоставки.

'''Гамма последовательность (gamma sequence)'''
Генерация, абсолютно стойкие системы, длина гаммы.-->


== Визуальное представление ==
== Визуальное представление ==
{|

Схема передатчика.
| [[Файл:Передатчик.jpg|thumb|Схема передатчика]]
| [[Файл:Приемник.JPG|thumb|Схема приёмника]]

|}
[[Изображение:Передатчик.jpg]]

Схема приёмника.

[[Изображение:Приемник.JPG]]


== Стойкость ==
== Стойкость ==


=== Доказательство абсолютной стойкости Шеннона ===
[[Шеннон, Клод Элвуд|Клод Шеннон]] доказал, что при определённых свойствах гаммы этот метод шифрования является абсолютно стойким (то есть, не поддающимся взлому).
[[Шеннон, Клод Элвуд|Клод Шеннон]] доказал, что при определённых свойствах гаммы этот метод шифрования является [[Абсолютно стойкий шифр|абсолютно стойким]] (то есть не поддающимся взлому).

'''Доказательство Шеннона'''.


Пусть X, Y и Z — дискретные [[случайная величина|случайные величины]].
Пусть <math>X</math>, <math>Y</math> и <math>Z</math> — дискретные [[случайная величина|случайные величины]].


Пусть:
Пусть:
* X — значение [[бит]]а [[открытый текст|открытого текста]]; то есть, переменная X (бит) способна принимать два значения: 0 и 1;
* <math>X</math> — значение [[бит]]а [[открытый текст|открытого текста]]; то есть, переменная <math>X</math> (бит) способна принимать два значения: 0 и 1;
* p — вероятность события, заключающегося в том, что переменная X примет значение 0;
* <math>p</math> — вероятность события, заключающегося в том, что переменная <math>X</math> примет значение 0;
* (1-p) — вероятность протовоположного события (то есть, вероятность того, что переменная X примет значение 1).
* <math>(1-p)</math> — вероятность противоположного события (то есть, вероятность того, что переменная <math>X</math> примет значение 1).


Запишем [[функция распределения|закон распределения]] значений X:
Запишем [[функция распределения|закон распределения]] значений <math>X</math>:


{| class="wikitable"
{| class="wikitable"
!<math>X</math>
! X || 0 || 1
! <math>0</math>|| <math>1</math>
|-
|-
! Pi
!<math>Pi</math>
|<math>p</math>
| p || 1-p
|<math>(1-p)</math>
|}
|}


Используем p и (1-p), так как [[вероятность]] встретить одну букву в разных словах различна.
Используем <math>p</math> и <math>(1-p)</math>, так как вероятность встретить одну букву в разных словах различна.


Пусть:
Пусть:
* Y — бит псевдослучайной последовательности (гаммы); то есть, переменная Y (бит) способна принимать два значения: 0 и 1;
* <math>Y</math> — бит псевдослучайной последовательности (гаммы); то есть, переменная <math>Y</math> (бит) способна принимать два значения: 0 и 1;
* каждое из значений Y равновероятно; то есть, вероятности получить 0 или 1 равны 1/2.
* каждое из значений <math>Y</math> равновероятно; то есть, вероятности получить 0 или 1 равны 1/2.


Запишем [[функция распределения|закон распределения]] значений Y:
Запишем закон распределения значений <math>Y</math>:


{| class="wikitable"
{| class="wikitable"
!<math>Y</math>
! Y || 0 || 1
! <math>0</math>|| <math>1</math>
|-
|-
! Pi
!<math>Pi</math>
| <math>\frac 12</math>|| <math>\frac 12</math>
| 1/2 || 1/2
|}
|}


Иными словами, в качестве гаммы (Y) подаётся одинаковое количество нулей и единиц, или значения переменной Y имеют симметричный закон распределения.
Иными словами, в качестве гаммы (<math>Y</math>) подаётся одинаковое количество нулей и единиц, или значения переменной <math>Y</math> имеют симметричный закон распределения.


Пусть:
Пусть:
* Z — бит закрытого текста; то есть, переменная Z (бит) способна принимать два значения: 0 и 1;
* <math>Z</math> — бит закрытого текста; то есть, переменная <math>Z</math> (бит) способна принимать два значения: 0 и 1;
* значение Z вычисляется на основе значений X и Y по формуле:
* значение <math>Z</math> вычисляется на основе значений <math>X</math> и <math>Y</math> по формуле:
: Z = X+Y (mod 2)
: <math>Z=X+Y</math> (mod 2)
: или
: или
: Z = [[Сложение по модулю 2|xor]]( X, Y )
: Z = [[Сложение по модулю 2|xor]](X, Y)
: или
: или
: Z = X [[Сложение по модулю 2|⊕]] Y
: Z = X [[Сложение по модулю 2|⊕]] Y


Найдём следующие вероятности:
Найдём следующие вероятности:
* P(Z=0) — вероятность события, заключающегося в том, что переменная Z принимает значение 0;
* <math>P(Z=0)</math> — вероятность события, заключающегося в том, что переменная <math>Z</math> принимает значение 0;
* P(Z=1) — вероятность события, заключающегося в том, что переменная Z принимает значение 1.
* <math>P(Z=1)</math> — вероятность события, заключающегося в том, что переменная <math>Z</math> принимает значение 1.


Используем формулы:
Используем формулы:
* сложения вероятностей [[Несовместные события|несовместных событий]]:
* сложения вероятностей [[Несовместные события|несовместных событий]]:
: P(A+B) = P(A) + P(B);
: <math>P(A+B) = P(A) + P(B)</math>;
* умножения вероятностей [[Независимость (теория вероятностей)|независимых]] событий:
* умножения вероятностей [[Независимость (теория вероятностей)|независимых]] событий:
: P(A*B) = P(A) * P(B).
: <math>P(A*B) = P(A) * P(B)</math>.


Вероятность того, что переменная Z примет значение 0:
Вероятность того, что переменная <math>Z</math> примет значение 0:


P(Z=0) = P( X=0, Y=0 ) + P( X=1, Y=1 ) =
: <math>P(Z=0) = P( X=0, Y=0 ) + P( X=1, Y=1 ) = P(X=0) * P(Y=0) + P(X=1) * P(Y=1) = p * 1/2 + (1-p) * 1/2 = 1/2</math>.
= P(X=0) * P(Y=0) + P(X=1) * P(Y=1) =
= p * 1/2 + (1-p) * 1/2 = 1/2.


Вероятность того, что переменная Z примет значение 1:
Вероятность того, что переменная <math>Z</math> примет значение 1:


P(Z=1) = 1 - P(Z=0) = 1/2.
: <math>P(Z=1) = 1 - P(Z=0) = 1/2</math>.


Так как P(Z=0) и P(Z=1) не зависят от p, p может принимать любое значение.
Так как <math>P(Z=0)</math> и <math>P(Z=1)</math> не зависят от <math>p</math>, <math>p</math> может принимать любое значение.


Запишем [[функция распределения|закон распределения]] значений переменной Z:
Запишем [[функция распределения|закон распределения]] значений переменной <math>Z</math>:


{| class="wikitable"
{| class="wikitable"
!<math>Z</math>
! Z || 0 || 1
! <math>0</math>|| <math>1</math>
|-
|-
! Pi
!<math>Pi</math>
| <math>\frac 12</math>|| <math>\frac 12</math>
| 1/2 || 1/2
|}
|}


Закон распределения Z оказался симметричным, как и закон распределения гамма (Y) или шум. То есть, Z не содержит никакую информацию из X (в Z нет p). Это доказывает, что шифр является абсолютно стойким.
Закон распределения <math>Z</math> оказался симметричным, как и закон распределения гамма (<math>Y</math>) или шум. То есть, <math>Z</math> не содержит никакую информацию из <math>X</math><math>Z</math> нет <math>p</math>). Это доказывает, что шифр является абсолютно стойким.


== Требования к гамме ==
== Требования к гамме ==
* Для каждого сообщения использовать новую гамму (повторное использование гаммы недопустимо).
* Для шифрования каждого нового сообщения нужно использовать новую гамму. Повторное использование гаммы недопустимо ввиду свойств операции «[[Сложение по модулю 2|xor]]». Рассмотрим пример: с помощью одинаковой гаммы Y зашифрованы два [[открытый текст|открытых текста]] X₁ и X₂, получено две [[шифротекст|шифрограммы]] Z₁ и Z₂:
: <math>Z_1 = X_1 \oplus Y</math>
: <math>Z_2 = X_2 \oplus Y</math>
Выполним сложение двух шифрограмм, используя операцию «[[Сложение по модулю 2|xor]]»:
: <math>Z_1 \oplus Z_2 = ( X_1 \oplus Y ) \oplus ( X_2 \oplus Y ) = X_1 \oplus X_2</math>
Результат зависит от открытых текстов X₁ и X₂ и не зависит от гаммы Y. Ввиду избыточности [[Естественный язык|естественных языков]] результат поддаётся [[Частотный анализ|частотному анализу]], то есть открытые тексты можно подобрать, не зная гамму Y.


* Для формирования гаммы использовать [[Аппаратный генератор случайных чисел|аппаратные генераторы случайных чисел]] на основе физических процессов.
* Для формирования гаммы (последовательности псевдослучайных чисел) нужно использовать [[Аппаратный генератор случайных чисел|аппаратные генераторы случайных чисел]], основанные на физических процессах. Если гамма не будет случайной, для получения открытого текста потребуется подобрать только начальное состояние ({{lang-en|seed}}) генератора псевдослучайных чисел.
* Длина гаммы должна быть не меньше длины защищаемого сообщения (открытого текста). В противном случае для получения открытого текста потребуется подобрать длину гаммы, проанализировать блоки шифротекста угаданной длины, подобрать биты гаммы.

* Длина гаммы должна быть не меньше длины защищаемого сообщения.

<!-- == Терминология ==
* Открытый (исходный) текст — данные (не обязательно текстовые), передаваемые с использованием криптографии.

* Шифрованный (закрытый) текст — данные, полученные после применения криптосистемы с указанным [[ключ (криптография)|ключом]].
-->

== Примечания ==

{{примечания}}


== Литература ==
== Литература ==
* {{Книга|ссылка=https://books.google.com.ua/books?id=Li3hCgAAQBAJ|автор=|заглавие=Введение в криптографию|ответственный=под ред. Ященко|год=2017|язык=ru|издание=|место=|издательство=Litres|страницы=|страниц=349|isbn=978-5-457-91528-2}}

* Владимир Иванов ([[Яндекс]]). [https://events.yandex.ru/lib/talks/2337/ Видеолекция] о [[Криптография|криптографии]].
* Ященко В. В. Введение в криптографию.

== Ссылки ==


== См. также ==
== См. также ==

* [[Псевдослучайная последовательность]]
* [[Псевдослучайная последовательность]]
* [[Потоковый шифр]]
* [[Шифр Вернама]]


[[Категория:Криптография]]
[[Категория:Криптография]]

Текущая версия от 13:37, 1 мая 2023

Гамми́рование, или Шифр XOR, — метод симметричного шифрования, заключающийся в «наложении» последовательности, состоящей из случайных чисел, на открытый текст. Последовательность случайных чисел называется гамма-последовательностью и используется для зашифровывания и расшифровывания данных. Суммирование обычно выполняется в каком-либо конечном поле. Например, в поле Галуа суммирование принимает вид операции «исключающее ИЛИ (XOR)».

Визуальное представление

[править | править код]
Схема передатчика
Схема приёмника

Доказательство абсолютной стойкости Шеннона

[править | править код]

Клод Шеннон доказал, что при определённых свойствах гаммы этот метод шифрования является абсолютно стойким (то есть не поддающимся взлому).

Пусть , и  — дискретные случайные величины.

Пусть:

  •  — значение бита открытого текста; то есть, переменная (бит) способна принимать два значения: 0 и 1;
  •  — вероятность события, заключающегося в том, что переменная примет значение 0;
  •  — вероятность противоположного события (то есть, вероятность того, что переменная примет значение 1).

Запишем закон распределения значений :

Используем и , так как вероятность встретить одну букву в разных словах различна.

Пусть:

  •  — бит псевдослучайной последовательности (гаммы); то есть, переменная (бит) способна принимать два значения: 0 и 1;
  • каждое из значений равновероятно; то есть, вероятности получить 0 или 1 равны 1/2.

Запишем закон распределения значений :

Иными словами, в качестве гаммы () подаётся одинаковое количество нулей и единиц, или значения переменной имеют симметричный закон распределения.

Пусть:

  •  — бит закрытого текста; то есть, переменная (бит) способна принимать два значения: 0 и 1;
  • значение вычисляется на основе значений и по формуле:
(mod 2)
или
Z = xor(X, Y)
или
Z = X Y

Найдём следующие вероятности:

  •  — вероятность события, заключающегося в том, что переменная принимает значение 0;
  •  — вероятность события, заключающегося в том, что переменная принимает значение 1.

Используем формулы:

;
.

Вероятность того, что переменная примет значение 0:

.

Вероятность того, что переменная примет значение 1:

.

Так как и не зависят от , может принимать любое значение.

Запишем закон распределения значений переменной :

Закон распределения оказался симметричным, как и закон распределения гамма () или шум. То есть, не содержит никакую информацию из нет ). Это доказывает, что шифр является абсолютно стойким.

Требования к гамме

[править | править код]
  • Для шифрования каждого нового сообщения нужно использовать новую гамму. Повторное использование гаммы недопустимо ввиду свойств операции «xor». Рассмотрим пример: с помощью одинаковой гаммы Y зашифрованы два открытых текста X₁ и X₂, получено две шифрограммы Z₁ и Z₂:

Выполним сложение двух шифрограмм, используя операцию «xor»:

Результат зависит от открытых текстов X₁ и X₂ и не зависит от гаммы Y. Ввиду избыточности естественных языков результат поддаётся частотному анализу, то есть открытые тексты можно подобрать, не зная гамму Y.

  • Для формирования гаммы (последовательности псевдослучайных чисел) нужно использовать аппаратные генераторы случайных чисел, основанные на физических процессах. Если гамма не будет случайной, для получения открытого текста потребуется подобрать только начальное состояние (англ. seed) генератора псевдослучайных чисел.
  • Длина гаммы должна быть не меньше длины защищаемого сообщения (открытого текста). В противном случае для получения открытого текста потребуется подобрать длину гаммы, проанализировать блоки шифротекста угаданной длины, подобрать биты гаммы.

Литература

[править | править код]
  • Введение в криптографию / под ред. Ященко. — Litres, 2017. — 349 с. — ISBN 978-5-457-91528-2.
  • Владимир Иванов (Яндекс). Видеолекция о криптографии.