Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Занимательная криптография   Найти похожие ветки 

 
Сергей М. ©   (2012-04-11 15:03) [0]

В результате двойного последовательного шифрования некоего текста с использованием некоей заведомо неизвестной шифр-решетки Кардано 8х8 получена дословно след.матрица:

в р и е а ь и Л
р е е ы п ы п а
о с н л х а л Н
ы н ф и о о п т
е р г ь р д г ц
Р е ф й и с ж д
О а и т и с ж д
н о л и х р е и

Задача : найти текст исходного сообщения.

Полагаю что при данной вводной без перебора всех возможных решеток с последующим привлечением лингвоанализатора к результатам декодирования для каждой из решеток не обойтись.

А вы как думаете ?


 
БарЛог ©   (2012-04-11 15:11) [1]

в р и е а ь и Л
р е е ы п ы п а
о с н л х а л Н
ы н ф и о о п т
е р г ь р д г ц
Р е ф й и с ж д
О а и т и с ж д
н о л и х р е и


 
Kerk ©   (2012-04-11 17:42) [2]

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


 
KilkennyCat ©   (2012-04-11 19:49) [3]

Если заглавные буквы не просто так...


 
Сергей М. ©   (2012-04-11 20:04) [4]


> Если заглавные буквы не просто так...


Меня вот тоже сей факт застеснял ..


 
KilkennyCat ©   (2012-04-11 20:12) [5]

Меня смущает факт двойной перестановки. учитывая, что решетка одна и та же (а даже и разные), скорее всего, расшифровка будет за один раз, но другой решеткой.


 
Сергей М. ©   (2012-04-11 21:14) [6]


> но другой решеткой


По условиям решетка одна и та же ..


 
oldman ©   (2012-04-11 21:26) [7]


> Если заглавные буквы не просто так...


Тогда где знаки препинания? Хотя бы точка?


 
Inovet ©   (2012-04-11 21:30) [8]

> [7] oldman ©   (11.04.12 21:26)
> Тогда где знаки препинания? Хотя бы точка?

зпт тчк


 
Сергей М. ©   (2012-04-12 09:24) [9]


> зпт тчк


И такое ведь не исключено ..


 
oldman ©   (2012-04-12 09:52) [10]

http://www.cyberforum.ru/cpp-beginners/thread339793.html
:)


 
Сергей М. ©   (2012-04-12 10:22) [11]


> oldman ©   (12.04.12 09:52) [10]


Ценнейшее обсуждение)


 
oldman ©   (2012-04-12 10:32) [12]


> Задача : найти текст исходного сообщения.
>
> Полагаю что при данной вводной без перебора всех возможных
> решеток с последующим привлечением лингвоанализатора к результатам
> декодирования для каждой из решеток не обойтись.


Ответов может быть несколько. )))


> Например, врядли в сообщении могут идти буквы "фй"


"штоф йода"


 
KilkennyCat ©   (2012-04-12 10:33) [13]

кайф Йоды


 
Inovet ©   (2012-04-12 10:40) [14]

> [10] oldman ©   (12.04.12 09:52)
> http://www.cyberforum.ru/cpp-beginners/thread339793.html

У меня ФФ поперхнулся и странным стал, по Alt+F4 закрыл, так как в заголовке кнопок не было. Потм нормально стал есть. Что это было? Вчера у меня Silverlight с обновлениями установился, может он чего проинициализировал.


 
oldman ©   (2012-04-12 11:28) [15]

шифр-решетка Кардано для квадратных матриц вообще забавная штука.
наложив решетку на матрицу получаем ПЕРВУЮ часть фразы,
повернув решетку на 90 градусов - ВТОРУЮ... и т.д.
используя и зеркальную решетку фраза может состоять из ВОСЬМИ фрагментов


 
AV ©   (2012-04-12 12:10) [16]


> Полагаю что при данной вводной без перебора всех возможных
> решеток с последующим привлечением лингвоанализатора к результатам
> декодирования для каждой из решеток не обойтись.
>
> А вы как думаете ?

так же


 
brother ©   (2012-04-12 12:13) [17]

> У меня ФФ поперхнулся и странным стал

не подтверждаю, все гуд...

Комментарий модератора silent_1991
Больше подобным образом названия тем не выделяем!


моэет это?


 
Сергей М. ©   (2012-04-12 12:19) [18]


> используя и зеркальную решетку фраза может состоять из ВОСЬМИ
> фрагментов


это если решетка с 8-ю дырками.

а с 16-ю дырками речь о зеркальном ее использовании речь идти не может и исходное сообщение может состоять не более чем из 4-х фрагментов.

Для иллюстрации - фрагмент кода для генерации уникальной 16-дырочной решетки из 4-х миллиардов возможных при матрице 8x8:

const
 MatrixSize = 8;

type
 TMask = array[0..15] of Integer; // тип для описания индексов дырок в матирице

const

BaseMask: TMask = (1,2,3,4,5,6,7,10,11,12,13,14,19,20,21,28);

RotVectors: array[1..MatrixSize*MatrixSize, 0..3] of Integer =
((1,8,64,57),(2,16,63,49),(3,24,62,41),(4,32,61,33),
(5,40,60,25),(6,48,59,17),(7,56,58,9),(8,64,57,1),
(9,7,56,58),(10,15,55,50),(11,23,54,42),(12,31,53,34),
(13,39,52,26),(14,47,51,18),(15,55,50,10),(16,63,49,2),
(17,6,48,59),(18,14,47,51),(19,22,46,43),(20,30,45,35),
(21,38,44,27),(22,46,43,19),(23,54,42,11),(24,62,41,3),
(25,5,40,60),(26,13,39,52),(27,21,38,44),(28,29,37,36),
(29,37,36,28),(30,45,35,20),(31,53,34,12),(32,61,33,4),
(33,4,32,61),(34,12,31,53),(35,20,30,45),(36,28,29,37),
(37,36,28,29),(38,44,27,21),(39,52,26,13),(40,60,25,5),
(41,3,24,62),(42,11,23,54),(43,19,22,46),(44,27,21,38),
(45,35,20,30),(46,43,19,22),(47,51,18,14),(48,59,17,6),
(49,2,16,63),(50,10,15,55),(51,18,14,47),(52,26,13,39),
(53,34,12,31),(54,42,11,23),(55,50,10,15),(56,58,9,7),
(57,1,8,64),(58,9,7,56),(59,17,6,48),(60,25,5,40),
(61,33,4,32),(62,41,3,24),(63,49,2,16),(64,57,1,8));

procedure QuickSort(var Mask: TMask; L, R: Integer);
var
 I, J: Integer;
 P, T: Integer;
begin
 repeat
   I := L;
   J := R;
   P := Mask[(L + R) shr 1];
   repeat
     while Mask[I] < P do
       Inc(I);
     while Mask[J] > P do
       Dec(J);
     if I <= J then
     begin
       T := Mask[I];
       Mask[I] := Mask[J];
       Mask[J] := T;
       Inc(I);
       Dec(J);
     end;
   until I > J;
   if L < J then
     QuickSort(Mask, L, J);
   L := I;
 until I >= R;
end;

// генерация уникальной маски
// Id - индекс уникальной маски, записываемой в Mask
procedure BuildMask(var Mask: TMask; Id: DWord);
var
 i: Integer;

begin
 i := 0;
 repeat
   Mask[i] := RotVectors[BaseMask[i], Id and 3];
   Id := Id shr 2;
   Inc(i)
 until i > High(Mask);
 QuickSort(Mask, 0, High(Mask))
end;

// однократное вращение маски на 90 град. по час.стрелке
procedure RotateMask(var Mask: TMask);
var
 i: Integer;
begin
 i := 0;
 repeat
   Mask[i] := RotVectors[Mask[i], 1];
   Inc(i)
 until i > High(Mask);
 QuickSort(Mask, 0, High(Mask))
end;

// вывод маски в текст.виде
function MaskToStr(var Mask: TMask): String;
var
 i,r: Integer;
begin
 Result := "";
 for i := 0 to High(Mask) do begin
   if i > 0 then
     Result := Result + ",";
   Result := Result + IntToStr(Mask[i]);
 end;
end;


 
Inovet ©   (2012-04-12 12:24) [19]

> [17] brother ©   (12.04.12 12:13)
> моэет это?

Не знаю, после нормально стало.


 
oldman ©   (2012-04-12 12:29) [20]


> это если решетка с 8-ю дырками.


не факт...
нигде не сказано, что искомая фраза состоит из 64 символов.
на решетке может быть 4 дырки, но поворачивать надо всего 3 раза.
12 букв. остальные генерируются случайно.
зависит от инструкции к кодированию.


 
Сергей М. ©   (2012-04-12 12:45) [21]


> oldman ©   (12.04.12 12:29) [20]


цитирую вводную дословно:

Для зашифрования текста шифром «Поворотная решетка» из бумажного квадрата размером 8на8 клеток изготавливают трафарет. Вырезанные клетки выбирают так , что при наложении трафарета на лист бумаги того же размера четырьмя возможными способами каждая клетка листа «открывается» ровно один раз. Первые 16 букв текста сообщения вписываются в прорези трафарета (по одной в каждую), потом трафарет поворачивается на 90 градусов, вписываются следующие 16 букв и т.д.Для повышения сложности шифра процедуру зашифрования провели дважды. Найдите текст исходного сообщения.


 
Сергей М. ©   (2012-04-12 12:48) [22]

и ниже прилагается 5 различных образцов матриц 8x8, заполненных символами из набора ["A".."Я", "а".."я"]

первую из 5-ти я процитировал в топикстарте


 
oldman ©   (2012-04-12 12:57) [23]

Я знаю первую букву!!!
Это Л.

При условии, что заглавные буквы не просто так. И что в искомой фразе 64 символа.


 
oldman ©   (2012-04-12 13:00) [24]


> что при наложении трафарета на лист бумаги того же размера
> четырьмя возможными способами каждая клетка листа «открывается»
> ровно один раз


Количество вариантов уменьшается...
Для каждого отверстия всего 4 возможных положения.
Всего то 4^16 вариантов.


 
Inovet ©   (2012-04-12 13:01) [25]

> [23] oldman ©   (12.04.12 12:57)
> Это Л.

Т.е. в решётке в первом ряду единственная дырка в углу?


 
oldman ©   (2012-04-12 13:03) [26]


> Inovet ©   (12.04.12 13:01) [25]


видимо да


 
Сергей М. ©   (2012-04-12 13:05) [27]


> oldman ©   (12.04.12 12:57) [23]
>
> Я знаю первую букву!!!
> Это Л.


"Ленина помнят рассветы и вёсны" ?)))


> При условии, что заглавные буквы не просто так


А нет такого условия как видишь)
Мож не просто так, а мож и для запутывания вражеской разведки)


> И что в искомой фразе 64 символа


Ну а сколько же еще , если не 64 ?
Даже если меньше - значит недостающие были каким-то образом выбраны для дополнения до 64.


 
oldman ©   (2012-04-12 13:07) [28]

)))
а если еще в алгоритм запихать правила языка типа "жи"-"ши"...
)))


 
oldman ©   (2012-04-12 13:08) [29]


> а мож и для запутывания вражеской разведки)


Вражеская разведка давно пользуется E-mail и не парится )))


 
Сергей М. ©   (2012-04-12 13:18) [30]


> а если еще в алгоритм запихать правила языка типа "жи"-"ши".
> ..


а если еще и сотню-другую даже самых простых и очевидных правил запихать, то работать этот "брут-фильтр" на 4 млрд. вариантах решеток будет до морковкиного заговения)


 
AV ©   (2012-04-12 16:42) [31]


> Для повышения сложности шифра процедуру зашифрования провели
> дважды

не понял. Как это?
Пусть имеем фразу word: string = "QWERT..", length(word) = 64
зашифровали сеткой, получили матрицу
M:array[0..7][0..7] of char =
Q А V Р S ..
...

как второй раз зашифровать?


 
AV ©   (2012-04-12 16:54) [32]

а..
или получили тогда
word: string = "QАVРS..", length(word) = 64
обходя матрицу лево-право, верх-низ

а это слово опять зашифровали сеткой..

так?


 
Сергей М. ©   (2012-04-12 16:54) [33]


> как второй раз зашифровать?


подготавливаемая к повторному шифрованию строка последовательно слева направо заполняется символами из матрицы по правилу:

word[i] := M[(i - 1) div 8, (i - 1) mod 8]


 
Сергей М. ©   (2012-04-12 16:55) [34]


> так?


ну судя по вводной именно так дело и было)


 
Inovet ©   (2012-04-12 18:19) [35]

> [34] Сергей М. ©   (12.04.12 16:55)
> ну судя по вводной именно так дело и было)

Интересно, а это реально повышает стойкость? Как-то сомнительно.


 
Sha ©   (2012-04-12 19:35) [36]

> Сергей М.

Я правильно понял, что процедура преобразования текста следующая:
- написали текст в решетку 8х8
- наложили трафарет с 16 дырками
- выписали 16 открытых букв в 2 строчки по 8 букв
- повернули трафарет на 90 градусов по часовой стрелке
- выписали 16 открытых букв в следующие 2 строчки по 8 букв
- повернули трафарет на 90 градусов по часовой стрелке
- выписали 16 открытых букв в следующие 2 строчки по 8 букв
- повернули трафарет на 90 градусов по часовой стрелке
- выписали 16 открытых букв в следующие 2 строчки по 8 букв
- с 8-ю получившимися строчками по 8 букв повторили описанную процедуру
- в результате получена решетка из [1]


 
Сергей М. ©   (2012-04-12 20:15) [37]


> Sha ©   (12.04.12 19:35) [36]


Я понимаю вводную так:

1. Есть исх.строка S текста из 64 символов в вышепроцитированном диапазоне.

2. На подготовленную "пустую" матрицу M приложен Кардано-трафарет X с 16-ю дырками. В каждую из дырок слева направо сверху вниз вписаны символы 1..16 исх.строки.

3. Трафарет повернут на 90 град по часовой, в "дырки" вписаны символы 17..32 исх.строки.

4. Трафарет повернут на 90 град по часовой, в "дырки"  вписаны символы 17..32 исх.строки.

5. Трафарет повернут на 90 град по часовой, в "дырки"  вписаны символы 33..48 исх.строки.

6. Трафарет повернут на 90 град по часовой, в "дырки"  вписаны символы 49..64 исх.строки.

------------------------------------------------------------------

7. Из полученной матрицы М сформирована строка S1 из 64 символов, полученная посимвольным чтением элементов матрицы в порядке обхода по строкам/столбцам сверху вниз и слева направо соответсвенно.

8. Строка S1 подвергнута преобразованиям с 2 по 6.

9. Результат преобразований в п.8 представлен во вводной.


 
Сергей М. ©   (2012-04-12 20:15) [38]


> - в результате получена решетка из [1]
>


Похоже что так)


 
Сергей М. ©   (2012-04-12 20:19) [39]


> в вышепроцитированном диапазоне


Имелось ввиду : что вижу - то и пою)
Символы вых.матрицы именно в этом диапазоне, если не синдром мартышки к старости.


 
Сергей М. ©   (2012-04-12 20:21) [40]


> 3. Трафарет повернут на 90 град по часовой, в "дырки" вписаны
> символы 17..32 исх.строки.


зарапортовался-закопипастился)))
это не считается, ессно..



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.061 c
15-1338124044
Loginov Dmitry
2012-05-27 17:07
2013.03.22
Лабораторные работы по языку Pascal. Методические указания


2-1329216786
AV
2012-02-14 14:53
2013.03.22
TidTelnet и метод Disconnect;


2-1332500814
alex810810
2012-03-23 15:06
2013.03.22
Передача параметра со значение NULL


15-1328778240
Baks
2012-02-09 13:04
2013.03.22
Как и где правильно хранить настройки и изменяемые файлы программ


2-1347507525
turbo
2012-09-13 07:38
2013.03.22
Как перевести дату в нормальный формат?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский