Форум: "Прочее";
Текущий архив: 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.073 c