powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пятничная криптостойкость
25 сообщений из 137, страница 2 из 6
Пятничная криптостойкость
    #39790750
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Почему не AES?
Два байта мало, отправить 65536 пакетов и подобрать подпись слишком просто.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790757
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790782
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfDima T,

Почему не AES?
Это уже тяжелая артиллерия. Исходником не отделаться, придется либу какую-то использовать. Пока рассматриваю варианты с реализацией попроще.
scfДва байта мало, отправить 65536 пакетов и подобрать подпись слишком просто.
Это не подпись, а контрольная сумма пакета. Пытаюсь совместить шифрование и контроль целостности.
Т.к. CBC использует сами данные для шифрования, то проверив последние два байта я могу быть уверен что после расшифровки имеем то что было зашифровано. Вероятность 99.998%.
Атака с подбором тут невозможна и бессмысленна. 2 байта это защита от получения пакета предыдущей сессии.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790983
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИсходником не отделаться
Да ну, брось, там сотня строк на интринсиках:
Код: 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.
#pragma GCC push_options
#pragma GCC target("sse2")
#pragma GCC target("aes")

#include "aes-ni.h"
void AESNI_Key_Dec(const AES_KEY enc_key, AES_KEY dec_key)
{
	dec_key[10] = enc_key[0];
	dec_key[9] = _mm_aesimc_si128(enc_key[1]);
	dec_key[8] = _mm_aesimc_si128(enc_key[2]);
	dec_key[7] = _mm_aesimc_si128(enc_key[3]);
	dec_key[6] = _mm_aesimc_si128(enc_key[4]);
	dec_key[5] = _mm_aesimc_si128(enc_key[5]);
	dec_key[4] = _mm_aesimc_si128(enc_key[6]);
	dec_key[3] = _mm_aesimc_si128(enc_key[7]);
	dec_key[2] = _mm_aesimc_si128(enc_key[8]);
	dec_key[1] = _mm_aesimc_si128(enc_key[9]);
	dec_key[0] = enc_key[10];
}

static inline __m128i AES_128_ASSIST (__m128i temp1, __m128i temp2)
{
    __m128i temp3;
    temp2 = _mm_shuffle_epi32 (temp2 ,0xff);
    temp3 = _mm_slli_si128 (temp1, 0x4);
    temp1 = _mm_xor_si128 (temp1, temp3);
    temp3 = _mm_slli_si128 (temp3, 0x4);
    temp1 = _mm_xor_si128 (temp1, temp3);
    temp3 = _mm_slli_si128 (temp3, 0x4);
    temp1 = _mm_xor_si128 (temp1, temp3);
    temp1 = _mm_xor_si128 (temp1, temp2);
    return temp1;
}

void AESNI_Key_Expansion(const unsigned char *userkey, AES_KEY enc_key)
{
    __m128i temp1, temp2;
    __m128i *Key_Schedule = (__m128i*)enc_key;
    temp1 = _mm_loadu_si128((__m128i*)userkey);
    _mm_storeu_si128(&Key_Schedule[0], temp1);
    temp2= _mm_aeskeygenassist_si128 (temp1 ,0x1);
    temp1 = AES_128_ASSIST(temp1, temp2);
    _mm_storeu_si128(&Key_Schedule[1], temp1);
    temp2 = _mm_aeskeygenassist_si128 (temp1,0x2);
    temp1 = AES_128_ASSIST(temp1, temp2);
    _mm_storeu_si128(&Key_Schedule[2], temp1);
    temp2 = _mm_aeskeygenassist_si128 (temp1,0x4);
    temp1 = AES_128_ASSIST(temp1, temp2);
    _mm_storeu_si128(&Key_Schedule[3], temp1);
    temp2 = _mm_aeskeygenassist_si128 (temp1,0x8);
    temp1 = AES_128_ASSIST(temp1, temp2);
    _mm_storeu_si128(&Key_Schedule[4], temp1);
    temp2 = _mm_aeskeygenassist_si128 (temp1,0x10);
    temp1 = AES_128_ASSIST(temp1, temp2);
    _mm_storeu_si128(&Key_Schedule[5], temp1);
    temp2 = _mm_aeskeygenassist_si128 (temp1,0x20);
    temp1 = AES_128_ASSIST(temp1, temp2);
    _mm_storeu_si128(&Key_Schedule[6], temp1);
    temp2 = _mm_aeskeygenassist_si128 (temp1,0x40);
    temp1 = AES_128_ASSIST(temp1, temp2);
    _mm_storeu_si128(&Key_Schedule[7], temp1);
    temp2 = _mm_aeskeygenassist_si128 (temp1,0x80);
    temp1 = AES_128_ASSIST(temp1, temp2);
    _mm_storeu_si128(&Key_Schedule[8], temp1);
    temp2 = _mm_aeskeygenassist_si128 (temp1,0x1b);
    temp1 = AES_128_ASSIST(temp1, temp2);
    _mm_storeu_si128(&Key_Schedule[9], temp1);
    temp2 = _mm_aeskeygenassist_si128 (temp1,0x36);
    temp1 = AES_128_ASSIST(temp1, temp2);
    _mm_storeu_si128(&Key_Schedule[10], temp1);
}

void AESNI_encrypt_BCB(const uint8_t *in, uint8_t *out, unsigned length, const AES_KEY enc_key)
{
    __m128i tmp;
    __m128i iv;

    iv = _mm_set1_epi8(0x5a);

    while (length >= CRYPTO_ABYTES)
    {
        tmp = _mm_loadu_si128 ((__m128i*)in);
        tmp = _mm_xor_si128 (tmp,iv);
        tmp = _mm_xor_si128 (tmp,enc_key[0]);
        tmp = _mm_aesenc_si128 (tmp, enc_key[1]);
        tmp = _mm_aesenc_si128 (tmp, enc_key[2]);
        tmp = _mm_aesenc_si128 (tmp, enc_key[3]);
        tmp = _mm_aesenc_si128 (tmp, enc_key[4]);
        tmp = _mm_aesenc_si128 (tmp, enc_key[5]);
        tmp = _mm_aesenc_si128 (tmp, enc_key[6]);
        tmp = _mm_aesenc_si128 (tmp, enc_key[7]);
        tmp = _mm_aesenc_si128 (tmp, enc_key[8]);
        tmp = _mm_aesenc_si128 (tmp, enc_key[9]);
        iv = _mm_aesenclast_si128 (tmp, enc_key[10]);

        _mm_storeu_si128 ((__m128i*)out,iv);

        in += CRYPTO_ABYTES;
        out += CRYPTO_ABYTES;
        length -= CRYPTO_ABYTES;
    }
}

void AESNI_decrypt_BCB(const uint8_t *in, uint8_t *out, unsigned length, const AES_KEY dec_key)
{
    __m128i tmp;
    __m128i new_iv;
    __m128i iv;

    iv = _mm_set1_epi8(0x5a);

    while (length >= CRYPTO_ABYTES)
    {
        new_iv = _mm_loadu_si128 ((__m128i*)in);
        tmp = _mm_xor_si128 (new_iv,dec_key[0]);

        tmp = _mm_aesdec_si128 (tmp,dec_key[1]);
        tmp = _mm_aesdec_si128 (tmp,dec_key[2]);
        tmp = _mm_aesdec_si128 (tmp,dec_key[3]);
        tmp = _mm_aesdec_si128 (tmp,dec_key[4]);
        tmp = _mm_aesdec_si128 (tmp,dec_key[5]);
        tmp = _mm_aesdec_si128 (tmp,dec_key[6]);
        tmp = _mm_aesdec_si128 (tmp,dec_key[7]);
        tmp = _mm_aesdec_si128 (tmp,dec_key[8]);
        tmp = _mm_aesdec_si128 (tmp,dec_key[9]);
        tmp = _mm_aesdeclast_si128 (tmp,dec_key[10]);
        tmp = _mm_xor_si128 (tmp,iv);

        _mm_storeu_si128 ((__m128i*)out,tmp);
        iv = new_iv;

        in += CRYPTO_ABYTES;
        out += CRYPTO_ABYTES;
        length -= CRYPTO_ABYTES;
    }
}


Другой вопрос, что тебе придётся с выравниванием блоков заморочиться.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791110
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо потестить этот AES, но как-то сложно все с ним, часа два читал инет и толком не понял как им пользоваться.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791137
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все блочные шифры работают примерно одинаково с точки зрения API.
Или ты пытаешсья понят как устроен алгоритм? Зачем? Бери используй.
Просто следу best-practices.

По выравниванию... да. Есть такое. Ну добъешь пакет до кратной длины.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791145
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня тупо ничего не запустилось, а то что запустилось оказалось какой-то ерундой: расшифровалось не то что я шифровал. Еще погуглю, как-то плохо все с примерами кода про AES, а в других алгоритмах достаточно копипаста кода с википедии.
Мне просто надо пример кода С/С++ как зашифровать и как расшифровать.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791146
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНадо потестить этот AES, но как-то сложно все с ним, часа два читал инет и толком не понял как им пользоваться.Ну можно что-нибудь попроще
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791147
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TУ меня тупо ничего не запустилось, а то что запустилось оказалось какой-то ерундой: расшифровалось не то что я шифровал. Еще погуглю, как-то плохо все с примерами кода про AES, а в других алгоритмах достаточно копипаста кода с википедии.
Мне просто надо пример кода С/С++ как зашифровать и как расшифровать.
А что исходник Сибирякова? Не взлетел?

Кстати тебе, как любителю высоких скоростей будет интересно что AES встроен в современные процессоры.
В этом смысле он все равно лучше чем самопальные свистульки.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791148
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneDima TНадо потестить этот AES, но как-то сложно все с ним, часа два читал инет и толком не понял как им пользоваться.Ну можно что-нибудь попроще
А зачем компромиссы? RC4 прост и понятен. AES интересен тем что аппаратно поддерживается, это плюс порядок в производительности, еще поразбираюсь с ним.

PS Можно пятничный бенчмарк поднять, скорость шифрования померять.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791157
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА что исходник Сибирякова? Не взлетел?
Там, как понимаю, не исходник, а кусок из GCC. Нагуглил альтернативу под MS VC , но пока не попробовал.
maytonКстати тебе, как любителю высоких скоростей будет интересно что AES встроен в современные процессоры.
В этом смысле он все равно лучше чем самопальные свистульки.
Выше уже написал про пятничный тестдрайв )))
Но есть у меня такая штука как сервер для бэкапов, хотелось бы чтобы там тоже работало.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791161
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИли ты пытаешсья понят как устроен алгоритм? Зачем? Бери используй.
ИМХО неправильный подход. Тот же CBC, я просто перепутал encrypt и decrypt, а оно оказывается работает если сначала расшифровать, потом зашифровать, но если глянуть в то что посредине это ужас, расшифровывается школьником в тетрадке.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791164
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonИли ты пытаешсья понят как устроен алгоритм? Зачем? Бери используй.
ИМХО неправильный подход. Тот же CBC, я просто перепутал encrypt и decrypt, а оно оказывается работает если сначала расшифровать, потом зашифровать, но если глянуть в то что посредине это ужас, расшифровывается школьником в тетрадке.
Хм... CBC - это вообще не шифр. Это способ "сцепления" вагончиков-блоков любого шифрующего алгоритма.
Наверное ты что-то другое имел в виду.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791165
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВыше уже написал про пятничный тестдрайв )))
Но есть у меня такая штука как сервер для бэкапов, хотелось бы чтобы там тоже работало.
А приходилось тебе иметь дело с Raspberry Pi ?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791175
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima TВыше уже написал про пятничный тестдрайв )))
Но есть у меня такая штука как сервер для бэкапов, хотелось бы чтобы там тоже работало.
А приходилось тебе иметь дело с Raspberry Pi ?
Нет, но вроде как это такая же хрень что и моя, мне тот девайс просто подарили, но у моей есть SATA разъем, куда я полноценный HDD воткнул и бэкапы туда лью. Уже лет пять работает, недавно сгорел блок питания, точнее обычный зарядник для телефонов с USB выходом, поставил первый под руку попавшийся и опять все работает.

PS Недавно было по новостям про спутники на железе от телефонов, так я верю этому, у меня железо непонятно из чего отлично выполняет роль сервера, пусть сервера бэкапов, но круглосуточно проработало 5+ лет.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791178
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да мощности этих устройств еще 10 лет назад хватало для файл-серверов. Габариты были не те правда.
Я вот с удивлением узнал что мой роутер TP-Link вполне себе может быть файл-сервером. Надо было просто
воткнуть в него "карман с винтом". И всё.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791270
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima Tпропущено...

ИМХО неправильный подход. Тот же CBC, я просто перепутал encrypt и decrypt, а оно оказывается работает если сначала расшифровать, потом зашифровать, но если глянуть в то что посредине это ужас, расшифровывается школьником в тетрадке.
Хм... CBC - это вообще не шифр. Это способ "сцепления" вагончиков-блоков любого шифрующего алгоритма.
Наверное ты что-то другое имел в виду.
Да, не совсем правильно назвал. У меня шифрование xor с ключом побайтно и CBC блоками в 1 байт.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791283
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потестил исходник AES отсюда . Встроенный тест прошел (aes128_self_test). Скомпилировался в виндовсе и линуксе.
На ARM-е не скомпилировался. Может в компиляторе проблема, обновил но он все равно старый
Код: plaintext
1.
g++ (Debian 4.6.3-14) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
Можно пока без него потестить производительность.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791634
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потестил скорость на разных процах. Шифрование 500 000 блоков по 4096 байт.

Алгоритмi7-6700Ki7-3770Ki5-660CBC xor1784 ms 1094 Mb/s2298 ms 849 Mb/s3429 ms 569 Mb/sRC42689 ms 726 Mb/s4794 ms 407 Mb/s4897 ms 398 Mb/sAES-128311 ms 6280 Mb/s648 ms 3014 Mb/s1102 ms 1772 Mb/s
Исходники . Компилятор MS VC 2017.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39791945
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

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

Если речь не идет о проекте "в стол" для разминки ума или высокоскоростной сети на слабом железе, я бы взял нормальное шифрование (AES) и подписывал бы зашифрованные пакеты (HMAC).

Либо гуглил конкретные алгоритмы authenticated encryption, например, можно взять TLS за основу.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39792035
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен, мое cbc xor шифрование так себе.

Сама задача: передать в открытом инете по UDP большое сообщение/файл, разбив его на UDP пакеты, затем собрав обратно. Для каждой передачи отправитель генерит сессионный ключ и шифрует его мастер ключом.

Я с помощью этого "шифрования" UDP-пакета пытался решить сразу четыре подзадачи:
1. Добавить энтропию в содержание пакета. В итоге меняя 5 бит первого байта получаю 32 разных представления одного и того же пакета.
2. Проверить контрольную сумму пакета, т.к. возможно получение пакетов от предыдущих сессий. И просто для защиты от ошибок в реализации протокола обмена.
3. Ограничить прием сообщений только от отправителей знающих мастер-ключ получателя.
4. Защитить данные от прослушки канала.

Для п.3 достаточно максимально усложнить восстановление мастер-ключа по сессионному ключу, например так 21842187

п.4 не удался. Т.е. топик получился ни о чем, криптостойкости изначально нет, поэтому нечего ослаблять. Зато помог навести порядок в голове.

Поразмышлял немного: криптостойко зашифровать передаваемые данные надо решать как отдельную подзадачу. Надо в архитектуре предусмотреть отдельный слой шифрования, чтобы добавить шифрование туда когда оно действительно потребуется.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39792141
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С точки зрения случайного наблюдателя - твой трафик будет вполне себе шифрован
и если нет какого-либо сурового финансового или любого другого интереса
то никто его ломать из любопытсва не будет. И для малого бизнеса xor-вполне
себе вариант.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39792164
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scfНе говоря уже о никакой криптостойкости, например, если шифровать поток нулевых байт.
А что не так с криптостойкостью xor-a случайной последовательности и нулей?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39792167
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и теория для получения последовательностей - на сколько сложно вычислять иррациональное число до n-ного знака? Какая там зависимость? Экспонента или полином?

По простому - как эффективно вычислять корень до n-ного знака? Если можно это делать быстро, то вычисляем до знака, соответствующего длине пакета, а сам получившийся ключ хранить не нужно, ибо есть исходное число, из которого берётся корень - экономия, практически бесконечный коэффициент сжатия. Или последовательность будет неслучайная? Неповторяющаяся, но при этом неслучайная. Такое возможно? А каков тогда характер распределения?

Может кто-то курил тему, было бы интересно узнать.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39792421
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555, погугли Архиватор Бабушкина.
...
Рейтинг: 0 / 0
25 сообщений из 137, страница 2 из 6
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пятничная криптостойкость
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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