Алгоритм синусоидального шифрования Yozhix-6969
Автор: Артемьев Эдуард Иосифович

                                             Посвящается мировым спецслужбам :)


КРАТКОЕ ОПИСАНИЕ ПРОГРАММЫ YOZHIX
(ДЛЯ ВСЕХ ПОЛЬЗОВАТЕЛЕЙ)

Чтобы хоть как-то обезопасить свою переписку по открытым каналам сети Интернет, 
её надо хорошо шифровать. Программы для шифрования часто бывают недоступны сторонам, 
ведущим переписку, в таком случае очень может помочь программа Yozhix.

yozhix.html

Yozhix - это браузерная программа, предназначенная для шифрования сообщений прямо 
в браузере пользователя. Т.е., имея любой популярный интернет-браузер 
(FireFox, Chrome, Opera, Netscape Navigator, Internet Explorer и др.), 
Вы можете шифровать свои сообщения и после размещать их на любом открытом 
сетевом сервисе. Теперь их сможет прочитать только адресат, знающий ключевое слово 
(пароль), а не агенты матрицы и админы серверов. 

ВНИМАНИЕ! Yozhix - это алгоритм шифрования с закрытым ключом! Это значит, что ключ 
ни в коем случае не должен пересылаться по сети, чтоб не стать известным посторонним 
лицам. Ключ можно заранее шёпотом оговорить при личной встрече или использовать 
в качестве ключа какие-то секретные факты. Например, "пятое слово из нашего любимого 
стихотворения", но ни в коем случае "номер моего дома" или "твоя фамилия" - это 
слишком очевидные ключи.

Многие сетевые сервисы не позволяют размещать слишком длинные наборы букв, 
поэтому в программе предусмотрена возможность разбивки шифровок на короткие строки. 
Инструмент "Разбить зашифрованный текст на строки" Вы можете найти в боковом 
выпадающем меню.

И ещё, постарайтесь не переусердствовать с излишней конспирацией. Разговоры о погоде 
или новых веяниях в мире моды вполне можно вести открытым текстом. Yozhix создан для 
того чтобы обезопасить передачу конфиденциальных данных или скрыть любовную переписку. 
;)







ПОДРОБНОЕ ОПИСАНИЕ АЛГОРИТМА СИНУСОИДАЛЬНОГО ШИФРОВАНИЯ YOZHIX-6969
(ДЛЯ СПЕЦИАЛИСТОВ)

Yozhix-6969 - симметричный метод шифрования, заключающийся в увеличении UTF-кодов 
шифруемых символов на величины соответствующих значений гармонической функции.

Для описания метода шифрования введём обозначения.
M — количество символов в шифруемом сообщении.
0, 1, ... , N — нумерация символов в сообщении. Здесь N=M-1.
p0, p1, ... , pN — это коды символов исходного текста.
r0, r1, ... , rN — это изменённые коды символов, которые будут записаны в шифровке.

Вычисление изменённых кодов происходит по формулам:
r0=(p0 + round(abs(f(0)))%65536) % 65536,
r1=(p1 + round(abs(f(1)))%65536) % 65536,
...
rN=(pN + round(abs(f(N)))%65536) % 65536.
Здесь "%" — операция арифметическая операция вычисления остатка от целочисленного деления, 
round(x) — функция вычисления округлённого значения x,
abs(x) — вычисление модуля x.
Функцию f(x) рассмотрим подробнее, т.к. она является нестандартной жемчужиной всего алгоритма.

Функция f(x) — это "высокочастотная" гармоническая функция, 
состояшая из 8 волновых составляющих:
f(x)=A0*sin(B0*x+C0)+A1*sin(B1*x+C1)+...+A7*sin(B7*x+C7).

Коэффициенты Ai, Bi, Ci функции f(x) задают её сложность и секретность для оппонента, 
пытающегося разгадать шифровку. Рассмотрим, каковы значения этих коэффициентов.

Bi — частотные коэффициенты. Эти коэфиициенты не являются секретными. 
В качестве частотных коэффициентов я взял первые 8 простых чисел, 
которые содержат в своей записи цифровую последовательность "6969" 
(отсюда и название алгоритма "Yozhix-6969"). Вот эти коэффициенты:
B0=69691, B1=69697, B2=86969, B3=116969, B4=169691, B5=169693, B6=296969, B7=356969. 

Ai — амплитудные коэффициенты. Эти коэффициенты являются секретными,
т.к. их значения получаются из ключа (секретного слова).
Вкратце о вычислении Ai:
1) Вычисляем MD5-образ ключа. Это 16-байтовая последовательность.
2) Полученный MD5 разбиваем на 8 двубайтовых целых чисел. 
Это и будут коэффициенты Ai.

Таким образом коэффициенты Ai являются целыми числами,
изменяющимися в диапазоне от 0 до 65535.

Пример вычисления Ai.
Пусть ключом является цифровая последовательность "1234".
MD5 ключа: 81dc9bdb52d04dc20036dbd8313ed055    
Разбиваем на 2-байтовые целые числа:
81dc --> A0=33244
9bdb --> A1=39899 
52d0 --> A2=21200
4dc2 --> A3=19906 
0036 --> A4=54 
dbd8 --> A5=56280 
313e --> A6=12606 
d055 --> A7=53333

Ci — фазовые коэффициенты. Эти коэффициенты не являются секретными.
Они вычисляются аналогично Ai, но на основе MD5-образа исходного текста.
К слову, MD5-код исходного текста, открыто записывается в шифровку.
Это необходимо для обратной расшифровки и проверки её правильности.

Рассмотрим пример формирования шифрованного сообщения.

Ключ: "1234"
Исходный текст: "Мама мыла раму" (14 символов)
Программа создаёт шифровку: 
058612fb51737ad91f285e746d1ae5b9
ea3460a778af882f530679621096a459
5f301aa023951aae2385dd7e

Рассмотрим шифровку подробнее:
058612fb51737ad91f285e746d1ae5b9 - MD5-образ текста "Мама мыла раму"
ea34 - r0 (шестнадцатеричная запись)
60a7 - r1
78af - r2
882f - r3
5306 - r4
7962 - r5
1096 - r6
a459 - r7
5f30 - r8
1aa0 - r9
2395 - r10
1aae - r11
2385 - r12
dd7e - r13

Как видим, первые 32 символа шифровки являются MD5-кодом исходного текста.
Остальная часть шифровки отводится под 4-значные 16-теричные записи
изменённых кодов.

Остаётся добавить, что процесс шифрования обратим.
Расшифровка производится следующим обратным преобразованием: 
p0=(r0 + 65536 -round(abs(f(0)))%65536) % 65536,
p1=(r1 + 65536 -round(abs(f(1)))%65536) % 65536,
...
pN=(rN + 65536 -round(abs(f(N)))%65536) % 65536.

(c)Артемьев Э.И.,2013