Тема: Шифр PJWJ
Вітаю всіх дописувачів форуму.
Літа минають, уже не молодий, та хочу щось залишити після себе для людей та своєї країни.
А тому вирішив опублікувати свою розробку. Довго думав чи це варто, чи це потрібно буде.
Та якщо так думати – то й нашу науку рухати вперед буде нікому.
На патент не претендую, мені це непотрібно. Можете використовувати, як бажаєте.
А можливо надихне на думки і хтось продовжить її.
Розробка - це шифр для шифрування повідомлень. Його придумав на початку 00-х років,
для шифрування тексту і обміну між двома адресатами – до прикладу: посольствами, військовими групами і таке інше.
Шифр PJWJ.
Шифрування:
На вході текст з малих літер українського алфавіту та розділові знаки ( 46 різних знаків)
46 букв – це алфавіт 33 літери (а,б,в,г,…, ю, я), та розділові і допоміжні знаки (« », «.»,…, «?»).
p1, p2, p3, …, pi, …, pn.
Де n – кількість букв та розділових знаків у тексті. Тобто «довжина» тексту.
(Максимальна довжина блоку відкритого тексту 65536 байт)
P-операція.
На вході
p1, p2, p3, …, pi, …, pn.
Р-оперція - це омофонічний шифр підстановки. На вході алфавіт 46 букв,
на виході алфавіт 256 символів ( 8 біт на символ). Ключем - є таблиця підстановки.
Декілька різних знаків можуть шифрувати 1 літеру. Знаки беруться випадковим чином із групи для літери.
Кількість знаків для літери залежить
від її частоти у текстах. (це сталі значення, по середньому значенню. Наприклад,
для літери «а» - 8 різних знаків, для літери «б» - 2 знаки, і т.д.)
На виході
y1, y2, y3, …, yi, …, yn.
256 символів – це 8 бітне кодування( 00000000, 00000001, …, 11111111).
Дана операція робить повторюваність знаків більше рівномірним.
Потім
x1 = y1, …, xn = yn.
J-операція 1.
На вході
x1, x2, x3, …, xi, …, xn.
Перестановка знаків.
За допомогою формули
Nj = f(xi+1, xi+2, xi+3, xi+4, …, xi+8).
Де f – одностороння функція яка повертає номер Nj від 0 до 2^16 (65 536).
Ключем параметри функції.
На вході f – 8*8=64 біт, на виході 2*8=16 біт.
Переставляємо символи на позиції ni та nj місцями.
Повторюємо для всіх i від 1 до n-8.
На виході
y1, y2, y3, …, yi, …, yn.
Дана операція виконує перестановку знаків.
W-операції 1-16.
На вході
x1, x2, x3, …, xi, …, xn.
Розділяємо кожен символ на два по 4 біти:
x11, x12, x21, x22, x31, x32, …, xi1, xi2, …, xn1, xn2.
Записуємо спочатку парні, потім непарні символи:
x11, x21, x31, …, xi1, …, xn1, x12, x22, x32, …, xi2, …, xn2.
Проста підстановка за допомогою 16 таблиць 16х16 знаків 2х4 біт = 256 байт.
Ключем є 16 таблиць підстановки для кожного раунду.
Для кожного раунду своя таблиця.
З допомогою S-box шифруємо по 2 символи, отримуємо
y11, y12, y21, y22, y31, y32, …, yi1, yi2, …, yn1, yn2.
Записуємо yi1, yi2 на вхід. Тобто xi1 = yi1, xi2 = yi2 і т.д.
Повторюємо 16 раз.
На виході
y1, y2, y3, …, yi, …, yn.
Дана операція забезпечує вплив одного знаку на всі інші знаки.
Максимальна довжина блоку 65 536 байт.
J-операція 2.
Повторюємо J-операцію.
XOR-операція.
На вході
x1, x2, x3, …, xi, …, xn.
Виконуємо XOR з знаками таблиці 256 різних випадкових символів.
Ключем є таблиця з 256 випадкових знаків.
yi = xi xor s[ i mod 256 ].
Повторюємо до n.
На виході
y1, y2, y3, …, yi, …, yn.
Результат
y1, y2, y3, …, yi, …, yn.
Необхідна для приховування знаків J-операції.
Розшифрування:
Виконуємо операції в оберненому порядку
Спочатку XOR,
далі J-операція 2,
W- операція 1-16,
J-операція 1,
P-операція.
Основа цього шифру W-операція.
Для прикладу візьмемо текст
« т е к с т »
Кодуємо його по 2 символи ( 1т = (1/2т) + (1/2т) т.д.):
« [(1/2т) (1/2т)] [(1/2е) (1/2е)] [(1/2к) (1/2к)] [(1/2с) (1/2с)] [(1/2т) (1/2т)] »
Записуємо спочатку парні, потім непарні символи:
« [(1/2т) (1/2е)] [(1/2к) (1/2с)] [(1/2т) (1/2т)] [(1/2е) (1/2к)] [(1/2с) (1/2т)] »
Далі, роста підстановка за допомогою 16 таблиць 16х16 знаків 2х4 біт = 256 байт:
« [(1/4т 1/4е) (1/4т 1/4е)] [(1/4к 1/4с) (1/4к 1/4с)] [(1/4т 1/4т) (1/4т 1/4т)] [(1/4е 1/4к) (1/4е 1/4к)] [(1/4с 1/4т) (1/4с 1/4т)] »
Записуємо спочатку парні, потім непарні символи:
« [(1/4т 1/4е) (1/4к 1/4с)] [(1/4т 1/4т) (1/4е 1/4к)] [(1/4с 1/4т) (1/4т 1/4е)] [(1/4к 1/4с) (1/4т 1/4т)] [(1/4е 1/4к) (1/4с 1/4т)] »
Далі, роста підстановка за допомогою 16 таблиць 16х16 знаків 2х4 біт = 256 байт:
« [(1/8т 1/8е 1/8к 1/8с) (1/8т 1/8е 1/8к 1/8с)] [(1/8т 1/8т 1/8е 1/8к) (1/8т 1/8т 1/8е 1/8к)] [(1/8с 1/8т 1/8т 1/8е) (1/8с 1/8т 1/8т 1/8е)] [(1/8к 1/8с 1/8т 1/8т) (1/8к 1/8с 1/8т 1/8т)] [(1/8е 1/8к 1/8с 1/8т) (1/8е 1/8к 1/8с 1/8т)] »
« [(1/8текс) (1/8текс)] [(1/8ттек) (1/8ттек)] [(1/8стте) (1/8стте)] [(1/8кстт) (1/8кстт)] [(1/8екст) (1/8екст)] »
Записуємо спочатку парні, потім непарні символи:
« [(1/8текс) (1/8ттек)] [(1/8стте) (1/8кстт)] [(1/8екст) (1/8текс)] [(1/8ттек) (1/8стте)] [(1/8кстт) (1/8екст)] »
Далі, проста підстановка за допомогою 16 таблиць 16х16 знаків 2х4 біт = 256 байт:
« [(1/16текс 1/16ттек) (1/16текс 1/16ттек)] [(1/16стте 1/16кстт) (1/16стте 1/16кстт)] [(1/16екст 1/16текс) (1/16екст 1/16текс)] [(1/16ттек 1/16стте) (1/16ттек 1/16стте)] [(1/16кстт 1/16екст) (1/16кстт 1/16екст)] »
« [(1/16тексттек) (1/16тексттек)] [(1/16сттекстт) (1/16сттекстт)] [(1/16ексттекс) (1/16ексттекс)] [(1/16ттекстте) (1/16ттекстте)] [(1/16ксттекст) (1/16ксттекст)] »
Таким чином, кожен знак шифр тексту не означає окрему літеру відкритого тексту,
а означає 1/4 частину всього тексту.
Отже,
« [1т] [1е] [1к] [1с] [1т] » =
« [(1/8тексттек)] [(1/8сттекстт)] [(1/8ексттекс)] [(1/8ттекстте)] [(1/8ксттекст)] » =
« [(1/4текст)] [(1/4текст)] [(1/4текст)] [(1/4текст)] [(1/4текст)] »
Найменша зміна вхідного початкового тексту приведе до повної зміни шифрованого тексту.