Декомпозиция сомнительных утвержденийна более мелкие составляющие дает возможностьсоздания коллоидного раствора, в мути которого легкоуйти от прямого ответа.
(Из моих не отредактированных премудростей)
Глава 1. Решітка Кардано
1.1. Постановка задачі
Перш ніж поринути у таємничий світ бібліотек та інструментів мови С, давайте спробуємо уявити собі реальність, у якій ще майже нічого не створено: світ тільки народжується, а навколо лише безмежна і холодна пустеля, якою у ранкових багряних сутінках інколи промайне поодиноке програмне створіння на мові асемблера…
Все це більше схоже на сюжет для науково-фантастичного роману, тому будемо вважати, що в цій реальності ми непогано озброєні, бо в нашому розпорядженні є компілятор і стандартна бібліотека мови С, а також непереборне бажання впоратися із завданням, суть якого полягає в наступному. Необхідно розробити програму, яка реалізує алгоритм шифрування "Решітка Кардано".
1.2. Генерація решітки Кардано
1 2 3 4 13 9 5 15 6 7 8 14 10 6 29 10 11 12 15 11 7 313 14 15 16 16 12 8 44 8 12 16 16 15 14 133 7 11 15 12 11 10 92 6 10 14 8 7 6 51 5 9 13 4 3 2 1
void init_quarters(int (*arr)[SIDE]) {
const int dim = SIDE/2;
int x = 1;
for (int i = 0; i < dim; i++) {
for (int j = 0; j < dim; j++) {
arr[i][j] = x; // 1 quarter
arr[j][SIDE-1-i] = x; // 2 quarter
arr[SIDE-1-j][i] = x; // 3 quarter
arr[SIDE-1-i][SIDE-1-j] = x; // 4 quarter
x++;
}
}
1 2 3 4 13 9 5 15 6 7 8 14 10 6 29 10 11 12 15 11 7 313 14 15 16 16 12 8 44 8 12 16 16 15 14 133 7 11 15 12 11 10 92 6 10 14 8 7 6 51 5 9 13 4 3 2 1
Зверніть увагу, що крім
0 0 0 0 0 1 0 00 0 0 0 0 0 0 00 0 0 0 0 1 0 01 0 0 0 0 1 0 01 1 0 0 1 0 1 01 0 0 1 0 0 1 01 1 0 0 0 1 0 10 0 0 0 0 0 0 1
Слід взяти до уваги те, що в коді використовується генератор випадкових чисел, тому при кожному запуску програми будуть створюватися нові решітки.
1.3. Шифрування та дешифрування за допомогою решітки Кардано
Це ще не все. У повідомленні можуть бути пробіли між словами, розділові знаки і великі літери. Якщо залишити їх у зашифрованому повідомленні, це теж знизить стійкість зашифрованого повідомлення до злому. Отже, необхідно виключити із зашифрованого повідомлення такі символи. Великі літери слід замінити малими.
1.4. Відновлення решітки
Наше завдання полягає тепер у пошуку решітки, яка використовувалася для отримання зашифрованого повідомлення.
Основна складність полягає у послідовному переборі варіантів решіток. Відомо, що решітка – це 16 унікальних “віконець” у базовій матриці. Базову матрицю було розглянуто у першій частині завдання:
1 2 3 4 13 9 5 15 6 7 8 14 10 6 29 10 11 12 15 11 7 313 14 15 16 16 12 8 44 8 12 16 16 15 14 133 7 11 15 12 11 10 92 6 10 14 8 7 6 51 5 9 13 4 3 2 1
Нагадую, базова матриця складається з 4-х субматриць, отриманих шляхом послідовного повороту матриці 4х4 за годинниковою стрілкою. Якщо розглядати кожну з 4 матриць як 16-розрядне ціле число без знака і використовувати його розряди для того, щоб забезпечити унікальність віконців у кожній решітці, то тоді можна використати бітову арифметику для перевірки унікальності віконців у кожній із згенерованих решіток.
Комментариев нет:
Отправить комментарий