powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничный pwdgen
25 сообщений из 188, страница 6 из 8
Тяпничный pwdgen
    #38811012
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНельзя сравнивать один некорректный адрес памяти и один корректный.круто ))) пока мы не сравнили, мы не знаем, корректный ли у нас адрес.
SashaMercury.Позже я составлю отдельный топик.ок, здесь это явный офф-топ
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811091
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как говорил Кристофер Уокен - Оки доки артишоки.

Подкину инфы на вентиллятор. Допустим у нас есть файлик
зашифрованный DES-ом. Для тех кто в танке. Это метод
при котором файл (условно) бъётся а блоки по 64бит.
И к каждому блоку применяется некая формула преобразования
после которой мы получаем новый уникальный блок. Совершенно
не похожий на исходный. Аргументами в этом отображении являются
ключ(Key) и вектор инициализации (IV). Это такие себе два байтовых
массивчика.

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

IV - вшивается в софт (обычно). А Key формируется на базе
парольной фразы. Есть более сложные схемы формирования
Key с использованием внешнего источника энтропии (часы),
координаты мышки на экране e.t.c. Есть попытки усложнения
парольной фразы путём подмешивания к ней Salt. Это для
устранения тривиальных pwd. Salt как и IV обычно вшивается
в софт.

Чаще всего ключ генерируется на основе парольной фразы.
key=F(pwd + 'Salt...');
Это 90% случаев.

Далее вопрос. Если мы знаем ПО которое выполнило des-преобразование
и знаем IV, Salt, и функцию F которая обеспечила генерацию key,
И знаем априорно что пользователь использовал короткий pwd.
порядка 3-4 символа и знаем также априорно что пользователь шифровал набор
стандартных часто-употребимых файлов (jpg, pdf, doc, xml).

Можем-ли мы восстановить оригинальный key?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811106
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однократный DES, вроде, без проблем ломается полным перебором.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811115
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый главный вопрос остался за кадром. В какой момент вы остановите перебор?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811121
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу вернуть вопрос: в какой момент поймёте, что пароль правильный?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811122
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправка. Мы ищем ключ а не пароль.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811132
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. перебрать ~40^4 вариантов дольше, чем искать ~56 битный ключ???
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811137
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovТ.е. перебрать ~40^4 вариантов дольше, чем искать ~56 битный ключ???
Ты пока не ответил на мой самый каверзный вопрос.
Как ты себе представляешь алгоритм т.н. "перебора" ?
Что у тебя будет являться критерием останова?

В скобках замечу что дешифрование блока никогда не выдаёт
ошибки. Оно всегда говорит - ОК!
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811165
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В условиях вброса предполагается, что в расшифрованном тексте есть общеизвестные куски. "По моему так".
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811223
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теплее вобщем. Метод открытого текста называется.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811231
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги. Давайте в топике оперировать фразами "алгоритм", "сопоставление".
"вектор ключа", "вектор инициализации".

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

Мы - бескорыстно. С позиции обучения инфо-безопасности изучаем
разные вопросы.

Вот как то в таком аспекте.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811239
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТы серьезно или троллишь?Абсолютно.
Вне зависимости от того, что ищется, тестирование результата расшифровки требует каких-то априорных знаний о зашифрованном тексте.
Если, дополнительно, указывается, что пароль заведомо слабый, то идея перебирать относительно длинный (двоичный) ключ вместо короткого (текстового) пароля - странная, мягко говоря.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811248
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПоправка. Мы ищем ключ а не пароль.
Стоп-стоп. Дима. Василий.

Я понял. Вы неправильно истолковали мою фразу. Мы действительно ищем ключ.
Но алгоритм генерации ключа на основе pwd фразы - проприетарен.

Как генерит его WinRar или WinZip - я не знаю. Но почти 100% они генерят
ключи по своему.

Конечно никто не будет перебирать DES ключи.

Я ставлю акценты на следующем.

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

2) Любой анализ на сопоставление ключей возможен только
в том случае когда мы имеем КРИТЕРИЙ успеха. Если мы ищем
ключ для файла содержащего белый шум - то наша затея
обречена на провал. Невозможно написать правильный тест
на успех. Поэтому мы будем рассматривать только
http://www.garykessler.net/library/file_sigs.html
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811250
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима. ОК! Удалил.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811257
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё, я понял, свою (логическую) ошибку
Тогда, если есть достаточно (дискового) пространства и (исходный) блок, содержимое которого полностью известно, будет классическая атака по словарю :)
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811342
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже что можем. Но нам нужно наверняка знать, какой набор байт будет содержаться в дешифрованном сообщении. Дешифровали, проверили содержатся ли определенная информация в памяти, и т.д., когда она будет содержаться, цикл можно остановить
Для данного конкретного кейса - DES (одинарный) можно декодировать первые 64 бита
из трафика и уже на основании их принять решение - есть-ли стандартная сигнатура
или нет.

Это справедливо для PNG, RAR 5.0 первые 8 байт жёстко заданы стандартом. Это
удачное стечение обстоятельств. Но вот что делать с JPEG, PDF, GIF ? Не знаю.

Вот в этом направлении я сейчас думаю.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811355
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще если криптоалгоритм сильный, то открытый текст не нужен для проверки ключа.
По идее можно считать энтропию декодированного блока (или нескольких блоков).
Правильный ключ должен давать существенно более низкую энтропию.
Но это так, моя гипотеза. Я не в курсе насколько это применимо на практике.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811388
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, переписал на С, выкинул всё лишнее.
Перебирает диапазон n-m, остальные опции аналогичны твоему варианту.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *partLower    = "abcdefghijklmnopqrstuvwxyz";
char *partDigit    = "0123456789";
char *partHex      = "ABCDEF";
char *partUpper    = "GHIJLKMNOPQRSTUVWXWY";
char *partPunct    = "!@#$%^&()-=+.,~`;/\\?*:|\"<>_";

char alphabet[256];

size_t num[256];
size_t scale_of_notation[256];
char *alphabet_num[256];
size_t len;

/////////////////////////////////////
void run(size_t min, size_t max, char *alphabet)
{
    // инициализация
    len = min;
    for(size_t i=0; i < min; i++)
        num[i] = 1;

    for(size_t i=0; i <= max; i++)
    {
        alphabet_num[i]=alphabet;
        scale_of_notation[i]=strlen(alphabet);
    }

    while(len <= max)
    {
        //вывод num
        char str[256];
        str[0]=0;
        size_t i = 0;
        while(num[i])
        {
            //strcat(cstr,alphabet[i][num[i] - 1]);
            str[i]=alphabet[num[i] - 1];
            i++;
        }
        str[i]=0;
        puts(str);

        // увеличиваем num на 1
        i = 0;
        size_t carry = 0;
        do
        {
            num[i]++;
            if(num[i] > scale_of_notation[i])
            {
                num[i] = 1;
                carry = 1;
            }
            else
            {
                carry = 0;
            }

            i++;
        }
        while(carry);
        if(i > len) len=i;
    }
}
/////////////////////////////////////

struct option
{
    char *opt;
    size_t code;
};

struct option options[] = {
    {"lower",1},
    {"punct",2},
    {"upper",3},
    {"xdigit",4},
    {"digit",5},
    {"\0x00",0}
};

/////////////////////////////////////
size_t find_option(char *option)
{
    size_t result = 0;

    for(size_t i=0; *options[i].opt; i++)
        if (strcmp( option, options[i].opt) == 0)
        {
            result = options[i].code;
            options[i].code = 0;
            break;
        }

    return result;
}
/////////////////////////////////////
int main(int argc,char **arg, char **env)
{
    if (argc < 3)
    {
        fprintf(stderr,"\nPassword Generation 2.0 (c) m_Sla and SQL.RU. Written in 'C' :)\n");
        fprintf(stderr,"Special thnx to: Mayton, Dima T.\n");
        fprintf(stderr,"\nUsage: pwdgen [n] [m] [options..] \n");
        fprintf(stderr,"\nWhere: options:\n");
        fprintf(stderr,"\n       lower  - Lowercase alphabetic characters [a..z]");
        fprintf(stderr,"\n       punct  - Punctuation characters [,!?..]");
        fprintf(stderr,"\n       upper  - Uppercase alphabetic characters [A..Z]");
        fprintf(stderr,"\n       xdigit - Hexidecimal characters");
        fprintf(stderr,"\n       digit  - Numeric digits [0..9]");
        fprintf(stderr,"\n");
        return -1;
    }
    else
    {
        int n = 0;
        n = atoi(arg[1]);
        int m = 0;
        m = atoi(arg[2]);
        if(m < n)
        {
            fprintf(stderr,"\n[m] cannot be less than [n]!\n");
            return -3;
        }
        if (m > 0 && n > 0)
        {
            if (argc==3)
            {
                strcat(alphabet, partLower);
                run( n, m, alphabet);
                return 0;
            }
            else
            {
                size_t i = 3;
                while(i<argc)
                {
                    switch(find_option(arg[i]))
                    {
                    case 1: // lower
                        strcat(alphabet,partLower);
                        break;
                    case 2: // punct
                        strcat(alphabet,partPunct);
                        break;
                    case 3: // upper
                        strcat(alphabet,partHex);
                        strcat(alphabet,partUpper);
                        break;
                    case 4: // xdigit
                        strcat(alphabet,partDigit);
                        strcat(alphabet,partHex);
                        break;
                    case 5: // digit
                        strcat(alphabet,partDigit);
                        break;
                    }
                    i++;
                }
                if(strlen(alphabet))
                    run( n, m, alphabet);
            }
        }
        else
        {
            fprintf(stderr,"\nArgument cannot be less than 0 or not a number!\n");
            return -2;
        }
    }
    return 0;
}
/////////////////////////////////////

...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811391
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорости твоего и моего варианта примерно равны.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811658
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНо это так, моя гипотеза. Я не в курсе насколько это применимо на практике.Если криптографическое ПО - сильное, то перед шифрованием оно упаковывает данные и убирает заголовки, если таковые имеются.
Именно для того, чтобы затруднить статистический анализ.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811757
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Sla, svn-ом умеешь пользоваться? Давай добавлю тебя в разработчики.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811764
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_SlaСкорости твоего и моего варианта примерно равны.
О. Круть. На выходных подниму нормальный Linux с человеческим лицом
и погоняю бенчмарки. Правда железяка старая. Celeron 32bit.
Вчера пропатчил на ноуте Windows MinGW до 4.10.0 дак он теперь язык "C"
не понимает. Каких то либ не хватает.

Подниму отдельным топиком.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811772
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovAnatoly MoskovskyНо это так, моя гипотеза. Я не в курсе насколько это применимо на практике.Если криптографическое ПО - сильное, то перед шифрованием оно упаковывает данные и убирает заголовки, если таковые имеются.
Именно для того, чтобы затруднить статистический анализ.
Да. Такой факт возможен. Но я такого ПО не знаю. И кроме того... старый пьяница Керхгофс
нам что-то талдычил про абсолютную информированность злоумышленника в плане ПО.
Ему неизвестен только ключик. Всё остальное - известно.

P.S. Просто чтобы не уходить в дебри...
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811804
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь - возможно баг. Или поведение отличается от моего сорца.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 case 4: // xdigit
                        strcat(alphabet,partDigit);
                        strcat(alphabet,partHex);
                        break;
                    case 5: // digit
                        strcat(alphabet,partDigit);
                        break;
                    }



В идеале я могу указывать набор чар-сетов.

Например:

Код: plaintext
1.
pwdgen 1-3 digit xdigit



Но здесь мы возможно получим дублирование символов 0..9 и как следствие - лишние холостые
обороты алгоритма.

Just IMHO.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811868
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа. Такой факт возможен. Но я такого ПО не знаю.PGP, вообще-то.
...
Рейтинг: 0 / 0
25 сообщений из 188, страница 6 из 8
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничный pwdgen
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]