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

Задача: зашифровать пакет на отправителе, на получателе расшифровать и убедиться что верно расшифровано.

Сначала была классическая мысль посчитать хэш нешифрованных данных и добавить к данным, по получении после расшифровки снова посчитать и сравнить. Потом появилась мысль как-то совместить шифрование и подсчет хэша. Зачем четыре прохода делать вместо двух?

Шифрование CBC , т.е. данные влияют на то что в итоге получится. Ключ шифрования не обсуждаем, он передан безопасным способом.

В итоге пришел к выводу что достаточно в конец дописать пару байт константы (0x5AA5) и после дешифрования проверить. Вроде все отлично, но есть сомнения: не создал ли я дыру, через которую все расшифруют?

Исходники
Код: 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.
// CBC xor дешифрование буфера buf ключем key
void cbc_decrypt(const void* key, size_t key_len, void* buf, size_t buf_len) {
	const uint8_t* k = (const uint8_t*)key;
	uint8_t* b = (uint8_t*)buf;
	uint8_t* end = b + buf_len;
	uint8_t x = 0;
	uint8_t y = 0;
	size_t i = 0;
	while (b < end) {
		x = *b;
		*b ^= k[i] ^ y;
		y = x;
		i++;
		if (i == key_len) {
			i = 0;
		}
		b++;
	}
}

// CBC xor шифрование буфера buf ключем key
void cbc_encrypt(const void* key, size_t key_len, void* buf, size_t buf_len) {
	const uint8_t* k = (const uint8_t*)key;
	uint8_t* b = (uint8_t*)buf;
	uint8_t* end = b + buf_len;
	uint8_t y = 0;
	size_t i = 0;
	while (b < end) {
		*b ^= k[i] ^ y;
		y = *b;
		i++;
		if (i == key_len) {
			i = 0;
		}
		b++;
	}
}

void test(const char* text) {
	int len = strlen(text), size = len + 2;
	char key[] = "secretkey"; // Ключ шифрования
	// Заполнение буфера
	char* buf = new char[size];
	char* p = buf;
	memcpy(p, text, len);
	uint16_t *check = (uint16_t *)(p + len); // Последние два байта контрольное значение
	*check = 0x5AA5;  // Контрольное значение
	// Шифрование
	cbc_encrypt(key, sizeof(key), buf, size);
	printf("%04X ", *check);
	// Дешифрование
	cbc_decrypt(key, sizeof(key), buf, size);
	if (*check != 0x5AA5) printf("ERROR\n"); // Проверка
	printf("  %s\n", text);

	delete[] buf;
}

int main()
{
	test("12345");
	test("1234567890");
	test("abcde");
	return 0;
}



Результат
Код: plaintext
1.
2.
B382   12345
89B6   1234567890
E3D2   abcde
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790299
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В твоём протоколе все UDP пакеты независимые? Или образуют Stream?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790300
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ твоём протоколе все UDP пакеты независимые? Или образуют Stream?
Образуют Stream, в котором контролируется правильность полученного, это вложенный уровень, его не обсуждаем.
В данном случае надо просто понять что пакет был зашифрован тем же симметричным ключом, которым расшифрован, при этом не ослабить шифрование.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790301
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В каждый конец открытого текста пакета дописываются 0x5AA5 ?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790302
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ каждый конец открытого текста пакета дописываются 0x5AA5 ?
Да.

Результат выполнения кода
Код: plaintext
1.
2.
B382   12345
89B6   1234567890
E3D2   abcde
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790303
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Результат это то во что трансформировалось 0x5AA5
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790304
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юзай спокойно. При правильном использовании CBC тебе ничего не угрожает. В интрернетах
ходит миллиард пакетов с стандартной шапкой <html

И ничо.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790305
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то мне кажется, что зная что последние байты всегда константа, должно быть очень легко востановить часть пароля (2 байта пароля)

При разных длинах пакетов, будем востанавливать разные части пароля. Т.ч. накопив передачи с разной длиной пакетов, в какой-то момент можно будет реконструировать пароль

Хотя, возможно, мне это только кажется, C++ под руокй нет. т.ч. код не запустить и зашифрованные пакет не посмотреть.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790306
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TРезультат это то во что трансформировалось 0x5AA5
кроме того, во что трансфорировалось 0x5AA5 нужно еще и предыдущий байт(ы) видеть.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790307
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЮзай спокойно. При правильном использовании CBC тебе ничего не угрожает. В интрернетах
ходит миллиард пакетов с стандартной шапкой <html

И ничо.
У меня должен быть полный хаос в том что уходит в сеть, чтобы не было этого

PS на дату глянул, пять лет уже пишу, юбилей ))))
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790311
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevлегко востановить часть пароля (2 байта пароля)
Чтобы узнать 2 байта пароля надо знать исходные (шифруемые) данные. Я двумя байтами (вместо 4-х) ограничился из-за трафика, но как понимаю 2 байта приписки имеют выше криптостойкость по сравнению с 4-мя.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790314
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ итоге пришел к выводу что достаточно в конец дописать пару байт константы (0x5AA5) и после дешифрования проверить. Вроде все отлично, но есть сомнения: не создал ли я дыру, через которую все расшифруют?
А шифрование то реально такое, как в приведенном исходнике? Я бы скорее не за пару байт в конце беспокоился.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790317
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю как Дима распространяет ключи. Вручную. ? На флешке?
Но я бы позаботился о периодическом их обновлении.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790362
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneDima TВ итоге пришел к выводу что достаточно в конец дописать пару байт константы (0x5AA5) и после дешифрования проверить. Вроде все отлично, но есть сомнения: не создал ли я дыру, через которую все расшифруют?
А шифрование то реально такое, как в приведенном исходнике? Я бы скорее не за пару байт в конце беспокоился.
Шифрование реально такое, но ключ разовый на сессию, т.е. отправитель в начале отправки файла/сообщения генерит ключ и передает его в первом пакете. Собственно проблема из-за того что ключей много, и т.к. используется UDP, то может прилететь кусок предыдущей сессии и надо его распознать и проигнорировать.

Первый пакет содержит ключ сессии, он шифруется мастер-ключом (он постоянный), вот тут надо подумать чтобы по сессионному невозможно было мастер-ключ восстановить.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790384
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут старик Керхгофс бы неодобрительно нахмурил брови.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790400
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, ну хотя бы RC4 реализовали. Несмотря на известные слабые места, он гораздо лучше, чем такое.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790409
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ итоге пришел к выводу что достаточно в конец дописать пару байт константы (0x5AA5) и после дешифрования проверить. Вроде все отлично, но есть сомнения: не создал ли я дыру, через которую все расшифруют?
Если сообщение xor-ить случайной (псевдо) последовательностью, то ни разу не страшно. Главное последовательность не повторять, или повторять как-то очень редко, со сдвигами и т.д.

Если шифрование двуступенчатое (сначала асимметричное, потом симметричное), тогда первый этап, наверное, лучше без двух байт.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790431
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо ничего xor-ить. Xor на фоне шифрования - это бесполезная трата ваших ресурсов.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790456
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алгоритм:

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

Можно после первой пары байт давать смещение второй пары, что-б никто не догадался (с).
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790459
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneDima T, ну хотя бы RC4 реализовали. Несмотря на известные слабые места, он гораздо лучше, чем такое.
RC4 это потоковое шифрование, а у меня не поток, а фрагменты потока (UDP пакеты), которые будут частично теряться по дороге и надо будет их высылать повторно, следовательно придется их хранить до подтверждения доставки. Но это не самое страшное, пакет может не дойти никогда из-за рубки пакетов по сигнатуре 15824799 . Если я буду шифровать отдельно каждый пакет, то добавив в начало один случайный байт я эту проблему решаю. По этой причине выбран CBC, чтобы сменой первого байта изменить весь пакет до неузнаваемости.

С помощью RC4 можно растянуть ключ до размера пакета, станет немного получше.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790460
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555Алгоритм:

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

Можно после первой пары байт давать смещение второй пары, что-б никто не догадался (с).
Отличная идея. У меня первый байт и так случайный, можно его дважды в конце повторить.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790471
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
00 73 65 63 72 65 74 6B 65 79 69 7A 6D 6E 6F 67 61 62 75 6B 61 76  Ключ 
00 6D 65 73 73 61 67 65 20 6C 61 2D 6C 61 2D 6C 61 2E 2E 2E 00 00  Данные нешифрованные "message la-la-la..."
Шифрованные
00 1E 1E 0E 0F 0B 18 16 53 46 4E 19 18 17 55 5E 5E 12 49 0C 6D 1B
08 16 16 06 07 03 10 1E 5B 4E 46 11 10 1F 5D 56 56 1A 41 04 E5 13
10 0E 0E 1E 1F 1B 08 06 43 56 5E 09 08 07 45 4E 4E 02 59 1C 7C 0B
18 06 06 16 17 13 00 0E 4B 5E 56 01 00 0F 4D 46 46 0A 51 14 F4 03
20 3E 3E 2E 2F 2B 38 36 73 66 6E 39 38 37 75 7E 7E 32 69 2C 4F 3B
28 36 36 26 27 23 30 3E 7B 6E 66 31 30 3F 7D 76 76 3A 61 24 C7 33
30 2E 2E 3E 3F 3B 28 26 63 76 7E 29 28 27 65 6E 6E 22 79 3C 5E 2B
38 26 26 36 37 33 20 2E 6B 7E 76 21 20 2F 6D 66 66 2A 71 34 D6 23
40 5E 5E 4E 4F 4B 58 56 13 06 0E 59 58 57 15 1E 1E 52 09 4C 29 5B
48 56 56 46 47 43 50 5E 1B 0E 06 51 50 5F 1D 16 16 5A 01 44 A1 53
50 4E 4E 5E 5F 5B 48 46 03 16 1E 49 48 47 05 0E 0E 42 19 5C 38 4B
58 46 46 56 57 53 40 4E 0B 1E 16 41 40 4F 0D 06 06 4A 11 54 B0 43
60 7E 7E 6E 6F 6B 78 76 33 26 2E 79 78 77 35 3E 3E 72 29 6C 0B 7B
68 76 76 66 67 63 70 7E 3B 2E 26 71 70 7F 3D 36 36 7A 21 64 83 73
70 6E 6E 7E 7F 7B 68 66 23 36 3E 69 68 67 25 2E 2E 62 39 7C 1A 6B
78 66 66 76 77 73 60 6E 2B 3E 36 61 60 6F 2D 26 26 6A 31 74 92 63
80 9E 9E 8E 8F 8B 98 96 D3 C6 CE 99 98 97 D5 DE DE 92 C9 8C E5 9B
88 96 96 86 87 83 90 9E DB CE C6 91 90 9F DD D6 D6 9A C1 84 6D 93
90 8E 8E 9E 9F 9B 88 86 C3 D6 DE 89 88 87 C5 CE CE 82 D9 9C F4 8B
98 86 86 96 97 93 80 8E CB DE D6 81 80 8F CD C6 C6 8A D1 94 7C 83
A0 BE BE AE AF AB B8 B6 F3 E6 EE B9 B8 B7 F5 FE FE B2 E9 AC C7 BB
A8 B6 B6 A6 A7 A3 B0 BE FB EE E6 B1 B0 BF FD F6 F6 BA E1 A4 4F B3
B0 AE AE BE BF BB A8 A6 E3 F6 FE A9 A8 A7 E5 EE EE A2 F9 BC D6 AB
B8 A6 A6 B6 B7 B3 A0 AE EB FE F6 A1 A0 AF ED E6 E6 AA F1 B4 5E A3
C0 DE DE CE CF CB D8 D6 93 86 8E D9 D8 D7 95 9E 9E D2 89 CC A1 DB
C8 D6 D6 C6 C7 C3 D0 DE 9B 8E 86 D1 D0 DF 9D 96 96 DA 81 C4 29 D3
D0 CE CE DE DF DB C8 C6 83 96 9E C9 C8 C7 85 8E 8E C2 99 DC B0 CB
D8 C6 C6 D6 D7 D3 C0 CE 8B 9E 96 C1 C0 CF 8D 86 86 CA 91 D4 38 C3
E0 FE FE EE EF EB F8 F6 B3 A6 AE F9 F8 F7 B5 BE BE F2 A9 EC 83 FB
E8 F6 F6 E6 E7 E3 F0 FE BB AE A6 F1 F0 FF BD B6 B6 FA A1 E4 0B F3
F0 EE EE FE FF FB E8 E6 A3 B6 BE E9 E8 E7 A5 AE AE E2 B9 FC 92 EB
F8 E6 E6 F6 F7 F3 E0 EE AB BE B6 E1 E0 EF AD A6 A6 EA B1 F4 1A E3

Первый байт случайный, перебрал все варианты кратные 8-ми, он не шифруется, показан как есть, два последних производные от него.

Исходник
Код: 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.
void print(const uint8_t* buf, int size) {
	for (int i = 0; i < size; i++) printf("%02X ", buf[i]);
	printf("\n");
}

void test2(const char* text) {
	int len = strlen(text), size = len + 3;
	uint8_t key[] = "\0secretkeyizmnogabukav"; // Ключ шифрования
	print(key, size);
	uint8_t* buf = new uint8_t[size];
	uint8_t *check = (buf + size - 2); // Последние два байта контрольное значение
	for (int i = 0; i < 256; i += 8) {
		// Заполнение буфера
		*buf = (uint8_t)i;
		memcpy(buf + 1, text, len);
		check[0] = (i >> 4) | ((i << 4) & 0xF0);
		check[1] = check[0];
		if(i == 0) print(buf, size); // Вывод нешифрованного
		// Шифрование
		cbc_encrypt(key, sizeof(key), buf, size);
		print(buf, size);
		// Дешифрование для проверки
		cbc_decrypt(key, sizeof(key), buf, size);
		if (check[0] != ((i >> 4) | ((i << 4) & 0xF0)) || check[1] != check[0]) printf("ERROR\n"); // Проверка
	}
	delete[] buf;
}


int main()
{
	test2("message la-la-la...");
	return 0;
}

...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790574
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПервый байт случайный, перебрал все варианты кратные 8-ми, он не шифруется
Ну тогда может его не первым слать? А первым - просто случайный байт, ни от чего не зависящий и ни на что не влияющий, и пусть его все читают.

Так же и про последний, если и он влияет. Опять же про случайное смещение второго не забываем - тоже вариант.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790646
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже на number used once.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39790652
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Размышлял про RC4. Хотелось бы задействовать, но резко усложняется решение в целом, т.к. невозможно зашифровать произвольное место потока. Пришел к выводу что даже если кто-то подслушивающий расшифрует несколько сессионных ключей - это не критично. Это будет достаточно сложно если с помощью RC4 нарастить ключ до размера пакета.

Главная проблема в том чтобы не засветить мастер-ключ (МК), который шифрует сессионные. Он постоянный и его расшифровка сводит все шифрование к нулю.
Как вариант рассматриваю добавление соли: посчитать MD5(МК+соль) и полученный хэш использовать для шифрования сессионного ключа. Соответственно передавать соль + шифрованный сессионный.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #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
Пятничная криптостойкость
    #39792485
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonalex55555, погугли Архиватор Бабушкина.
Погуглил. Не вставило.

А должно было?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39792491
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да так. Просто.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39792585
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555maytonalex55555, погугли Архиватор Бабушкина.
Погуглил. Не вставило.

А должно было?
Наверно должно, т.к.
alex55555бесконечный коэффициент сжатия
основан на тех же принципах что и Архиватор Бабушкина и вечный двигатель
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39792594
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555scfНе говоря уже о никакой криптостойкости, например, если шифровать поток нулевых байт.
А что не так с криптостойкостью xor-a случайной последовательности и нулей?Со настоящей случайной последовательностью то всё хорошо. Вот только в изначальном варианте там было циклическое повторение (видимо не очень длинного) ключа.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39792839
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Talex55555пропущено...

Погуглил. Не вставило.

А должно было?
Наверно должно, т.к.
alex55555бесконечный коэффициент сжатия
основан на тех же принципах что и Архиватор Бабушкина и вечный двигатель
Если взять алгоритм х=х+1 и запустить его в бесконечном цикле, то получим бесконечное количество чисел. На хранение информации о бесконечном количестве чисел нам при этом потребовалось 5 байт (длина строки х=х+1).

Архивирование с бесконечным коэффициентом сжатия невозможно в общем случае, но в частных - легко, в том числе и в случае корней и иррациональных чисел. Поэтому последовательность знаков в иррациональном числе имеет смысл изучать.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39792846
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneСо настоящей случайной последовательностью то всё хорошо. Вот только в изначальном варианте там было циклическое повторение (видимо не очень длинного) ключа.
Понял, спасибо.

А вы не в курсе, как по последовательности xor-енных с данными байт из иррационального числа дешифровать данные? Даже если распределение нормальное или какое-нибудь пуассоновское, то как это поможет дешифрованю?

Если точно знать, что в некотором месте шифрованных данных есть нули, то можно получить часть иррационального числа - можно по произвольной части иррационального числа определить всё число? Ну или его квадрат, для простоты?

Случайные последовательности ведь специально исследовались именно на предмет шифрования и почему-то предпочли именно чисто случайные, а не последовательность в иррациональном числе. Почему?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39792866
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555Если взять алгоритм х=х+1 и запустить его в бесконечном цикле, то получим бесконечное количество чисел. На хранение информации о бесконечном количестве чисел нам при этом потребовалось 5 байт (длина строки х=х+1).
И как с помощью этого алгоритма передать конкретное число? Например 48.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39792947
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИ как с помощью этого алгоритма передать конкретное число? Например 48.
Речь же шла об архивировании всех чисел. Все числа успешно архивируются и передаются при помощи 5 байт. А как выделить конкретное из них - это уже другой алгоритм, за него я не брался отвечать. Хотя если принимающая сторона в курсе алгоритма разархивирования, то можно передать число 3, которое принимающая сторона умножит на 16. Сжатие в 2 раза.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793137
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно считать что double тоже архивирует любое целое число в разрядную сетку из 64 бит.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793185
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы до какой-то хрени договорились. Тогда уж все числа (но не известно какое в точности), вполне можно заархивировать одним битом 1 - если какое-то число, 0 - нет числа

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

"У нас есть ТАКИЕ приборы! Но мы вам о них не расскажем" ( C )


Меня укусила акула, когда я стоял в океане.
Но я оставался спокоен, терпел, но закончил работу.
Потом прибежали ребята, и эта акула узнала,
Что значат румяные парни из третьей ремонтной бригады.
Аквалангисты - это хорошо!
И взрослые знают, и дети - мы радость творим на планете.
Аквалангисты - это не игра!
Сиреневым пламенем дышат большие кирпичные домны.
Противник на нашу погибель готовит подводные лодки.
Но мы тоже люди не промах. Мы прячемся в черные дыры.
У нас есть ТАКИЕ приборы! Но мы вам о них не расскажем.
Аквалангисты - это не игра!
И взрослые знают, и дети - мы радость творим на планете.
Аквалангисты - это хорошо!
Когда мы выходим на берег, то девочки радостно стонут.
И мы начинаем рассказы про разные трудности моря.
Но хватит! Завыла сирена. И мы быстро прыгаем в воду.
Мы жить не привыкли на суше, мы любим нырять и купаться.
Аквалангисты - это не игра!
И взрослые знают, и дети - мы радость творим на планете.
Аквалангисты - это хорошо!
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793234
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555Речь же шла об архивировании всех чисел. Все числа успешно архивируются и передаются при помощи 5 байт. А как выделить конкретное из них - это уже другой алгоритм, за него я не брался отвечать. Хотя если принимающая сторона в курсе алгоритма разархивирования, то можно передать число 3, которое принимающая сторона умножит на 16. Сжатие в 2 раза.
Зачем архивировать все числа? Как быть с отрицательными числами? С дробными? ... К чему эта ересь?

Если идея базируется на принципе: заменить произвольную последовательность байт на код, генерирующий эту последовательность, то код будет длиннее.

Например как сделать генератор такой последовательности?
Код: 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.
5B 71 75 6F 74 20 61 6C │ 65 78 35 35 35 35 35 5D
90 A5 E7 EC 20 A6 A5 20 │ E8 AB A0 20 AE A1 20 A0
E0 E5 A8 A2 A8 E0 AE A2 │ A0 AD A8 A8 20 A2 E1 A5
E5 20 E7 A8 E1 A5 AB 2E │ 20 82 E1 A5 20 E7 A8 E1
AB A0 20 E3 E1 AF A5 E8 │ AD AE 20 A0 E0 E5 A8 A2
A8 E0 E3 EE E2 E1 EF 20 │ A8 20 AF A5 E0 A5 A4 A0
EE E2 E1 EF 20 AF E0 A8 │ 20 AF AE AC AE E9 A8 20
35 20 A1 A0 A9 E2 2E 20 │ 80 20 AA A0 AA 20 A2 EB
A4 A5 AB A8 E2 EC 20 AA │ AE AD AA E0 A5 E2 AD AE
A5 20 A8 A7 20 AD A8 E5 │ 20 2D 20 ED E2 AE 20 E3
A6 A5 20 A4 E0 E3 A3 AE │ A9 20 A0 AB A3 AE E0 A8
E2 AC 2C 20 A7 A0 20 AD │ A5 A3 AE 20 EF 20 AD A5
20 A1 E0 A0 AB E1 EF 20 │ AE E2 A2 A5 E7 A0 E2 EC
2E 20 95 AE E2 EF 20 A5 │ E1 AB A8 20 AF E0 A8 AD
A8 AC A0 EE E9 A0 EF 20 │ E1 E2 AE E0 AE AD A0 20
A2 20 AA E3 E0 E1 A5 20 │ A0 AB A3 AE E0 A8 E2 AC
A0 20 E0 A0 A7 A0 E0 E5 │ A8 A2 A8 E0 AE A2 A0 AD
A8 EF 2C 20 E2 AE 20 AC │ AE A6 AD AE 20 AF A5 E0
A5 A4 A0 E2 EC 20 E7 A8 │ E1 AB AE 20 33 2C 20 AA
AE E2 AE E0 AE A5 20 AF │ E0 A8 AD A8 AC A0 EE E9
A0 EF 20 E1 E2 AE E0 AE │ AD A0 20 E3 AC AD AE A6
A8 E2 20 AD A0 20 31 36 │ 2E 20 91 A6 A0 E2 A8 A5
20 A2 20 32 20 E0 A0 A7 │ A0 2E 5B 2F 71 75 6F 74
5D 0D 0A 80 20 A7 A0 E7 │ A5 AC 20 A0 E0 E5 A8 A2
A8 E0 AE A2 A0 E2 EC 20 │ A2 E1 A5 20 E7 A8 E1 AB
A0 3F 20 8A A0 AA 20 A1 │ EB E2 EC 20 E1 20 AE E2
E0 A8 E6 A0 E2 A5 AB EC │ AD EB AC A8 20 E7 A8 E1
AB A0 AC A8 3F 20 91 20 │ A4 E0 AE A1 AD EB AC A8
3F 20 2E 2E 2E 20 8A 20 │ E7 A5 AC E3 20 ED E2 A0
20 A5 E0 A5 E1 EC 3F 0D │ 0A 0D 0A 85 E1 AB A8 20
A8 A4 A5 EF 20 A1 A0 A7 │ A8 E0 E3 A5 E2 E1 EF 20
AD A0 20 AF E0 A8 AD E6 │ A8 AF A5 3A 20 A7 A0 AC
A5 AD A8 E2 EC 20 AF E0 │ AE A8 A7 A2 AE AB EC AD
E3 EE 20 AF AE E1 AB A5 │ A4 AE A2 A0 E2 A5 AB EC
AD AE E1 E2 EC 20 A1 A0 │ A9 E2 20 AD A0 20 AA AE
A4 2C 20 A3 A5 AD A5 E0 │ A8 E0 E3 EE E9 A8 A9 20
ED E2 E3 20 AF AE E1 AB │ A5 A4 AE A2 A0 E2 A5 AB
EC AD AE E1 E2 EC 2C 20 │ E2 AE 20 AA AE A4 20 A1
E3 A4 A5 E2 20 A4 AB A8 │ AD AD A5 A5 2E 20 0D 0A
0D 0A 84 AB EF 20 AF E0 │ A8 AC A5 E0 A0 20 AF E0
A8 A4 E3 AC A0 A9 20 AA │ A0 AA 20 A7 A0 AA AE A4
A8 E0 AE A2 A0 E2 EC 20 │ ED E2 AE 0D 0A
Это содержимое данного поста в кодировке 866
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793279
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМожно считать что double тоже архивирует любое целое число в разрядную сетку из 64 бит.
Архивирует не сам дабл, а алгоритм, заполняющий значения типа дабл.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793281
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВы до какой-то хрени договорились. Тогда уж все числа (но не известно какое в точности), вполне можно заархивировать одним битом 1 - если какое-то число, 0 - нет числа
Есть принцип - корень из короткого числа даёт бесконечную последовательность. Алгоритм нахождения последовательности займёт от силы килобайт. Итого коэффициент сжатия при необходимости получить шифрующую последовательность любой длинны равен длине последовательности делённой на длину короткого числа.

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

Для вычисления интегралов нужны бесконечно малые величины, а с ним - сама бесконечность. Всё это ересь с точки зрения обывателя, но тогда обыватель не получит айфон, в котором живут интегралы.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793331
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555Это теория. При переходе к практике она бывает полезной.
Пример пользы на практике можно посмотреть?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793333
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555Leonid KudryavtsevВы до какой-то хрени договорились. Тогда уж все числа (но не известно какое в точности), вполне можно заархивировать одним битом 1 - если какое-то число, 0 - нет числа
Есть принцип - корень из короткого числа даёт бесконечную последовательность. Алгоритм нахождения последовательности займёт от силы килобайт. Итого коэффициент сжатия при необходимости получить шифрующую последовательность любой длинны равен длине последовательности делённой на длину короткого числа.

А нули и единицы для шифрования всех чисел дают углублённое понимание того, что написано выше.

Вы - всё таки успешный последователь идей Бабушкина. Давайте я еще подкину несколько тезисов.

Это то что я помню из курса дискретки и теории чисел.

1) Множество целых чисел - бесконечно.
2) Множество рациональных чисел (вида m/n) - тоже бесконечно но по мощности больше чем множество целых.
3) Множество иррациональных чисел (это корни рациональной степени из целого) тоже бесконечны и покрывают рациональные.
4) Множество трансцедентных чисел (это числа Пи и е) и все прочее что не выводятся из конечного числа операций на полиномах.
Также кроет козырной карто множество иррациональных.
5) Множество вещественных чисел. Кроет всё остальное. (Здесь я не 100% уверен насчет того есть ли между (4) и (5) еще какой-то
уровень чисел) Пускай математики подскажут.

Теперь по поводу сжатия и Бабушкиных. Рискну предположить что вы играете где-то на 3 уровне этой структуры.
Отсюда вытекают ограничения.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793574
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Talex55555Это теория. При переходе к практике она бывает полезной.
Пример пользы на практике можно посмотреть?
Ну так генерация последовательности для шифрования. В асиметричном режиме обмениваемся парой чисел и далее симметрично ксорим двумя последовательностями (корни из первого и второго чисел).

Я могу так зашифровать, а вы сможете взломать такой шифр?

Даю 1000 р. за взлом моего шифра. Кто рискнёт?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793576
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТеперь по поводу сжатия и Бабушкиных. Рискну предположить что вы играете где-то на 3 уровне этой структуры.
Отсюда вытекают ограничения.
Какие ограничения? На что они влияют? Каким образом?

Если ответить на эти вопросы, то предположение может измениться в обратную сторону.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793584
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цитата
авторАрхивирование с бесконечным коэффициентом сжатия невозможно в общем случае, но в частных - легко, в том числе и в случае корней и иррациональных чисел. Поэтому последовательность знаков в иррациональном числе имеет смысл изучать.
И мой камент был к ней.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793623
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555Dima Tпропущено...

Пример пользы на практике можно посмотреть?
Ну так генерация последовательности для шифрования. В асиметричном режиме обмениваемся парой чисел и далее симметрично ксорим двумя последовательностями (корни из первого и второго чисел).

Я могу так зашифровать, а вы сможете взломать такой шифр?

Даю 1000 р. за взлом моего шифра. Кто рискнёт?Есть более быстрые способы генерации случайной последовательности.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793664
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555Dima Tпропущено...

Пример пользы на практике можно посмотреть?
Ну так генерация последовательности для шифрования. В асиметричном режиме обмениваемся парой чисел и далее симметрично ксорим двумя последовательностями (корни из первого и второго чисел).

Я могу так зашифровать, а вы сможете взломать такой шифр?

Даю 1000 р. за взлом моего шифра. Кто рискнёт?
Я не рискну. Но предположу.

Скажу что подобный взлом проходит в несколько этапов.
И в 1-м идет анализ вас и вашего ПО если таковое есть в исходном коде.
Согласно закона Керхгофса рано или поздно ваша идея становится обще
известной. Во 2-м этапе идет отработка гипотез на тему того что вы за сообщения
пересылаете. Обычно сетевые протоколы имеют регулярную структуру (JMS)
и дальнейшая атака основывается на статистических принципах. Мы берем
зашифрованное сообщение и применяем к нему известный (уже) генератор
до тех пор пока регулярные структуры в нем не проявятся.
После этого множество проявленных открытых текстов надо
будет проверить на то что это интересующая нас информация.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793765
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Размышлял тут про скорость аппаратного AES, подумал а почему бы не добавить к нему CBC и получить полноценную замену моему CBC XOR? И добавил.
Потестил скорость на разных процах. Шифрование 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/sAES-128 + CBC1390 ms 1405 Mb/s2709 ms 720 Mb/s2488 ms 785 Mb/s
Исходники обновил, там же есть готовый exe если кто просто запустить захочет. Компилятор MS VC 2017.

По скорости AES+CBC обгоняет мою самоделку (кроме одного компа), функционал получается тот же, все свои задачи я порешаю плюс полноценное шифрование получу, выравнять размер данных на 16 байт не проблема.

Все хорошо, но что делать там где проц не поддерживает AES ? Это не только ARMов касается. Интел поддержку AES включил только в 2008 и то не на всех процах.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793766
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555На хранение информации о бесконечном количестве чисел нам при этом потребовалось 5 байт (длина строки х=х+1).
Архивирование с бесконечным коэффициентом сжатия невозможно в общем случае, но в частных - легко, ... после таких перлов бесконечность в гробу перевернётся.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793779
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не собралось.

Код: ruby
1.
2.
3.
4.
5.
6.
7.
/sql.ru/dima/crypt_speed$ ./make.sh 
In file included from crypt_speed.cpp:9:0:
aes128.h: In member function ‘void aes128_t::cbc_encrypt(void*, size_t)’:
aes128.h:144:52: error: lvalue required as unary ‘&’ operand
    aes128_enc(key_schedule, &_mm_xor_si128(*p, prev), p);
                                                    ^
./make.sh: line 4: ./crypt_speed: No such file or directory
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793799
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНе собралось.
Поправил, проверяй.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793803
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЦитата
авторАрхивирование с бесконечным коэффициентом сжатия невозможно в общем случае, но в частных - легко, в том числе и в случае корней и иррациональных чисел. Поэтому последовательность знаков в иррациональном числе имеет смысл изучать.
И мой камент был к ней.
Тогда я не понял, какова связь. Можно записать число 11? Можно взять корень? Можно получить бесконечную последовательность? Коэффициент сжатия 2 к бесконечности не очевиден?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793805
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneЕсть более быстрые способы генерации случайной последовательности.
Поделитесь?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793813
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМы берем зашифрованное сообщение и применяем к нему известный (уже) генератор до тех пор пока регулярные структуры в нем не проявятся.
То есть решаем перебором. Но ведь чисел, из которых можно взять корень, очень много. Если брать числа хотя бы в районе от 2 64 и до 2 64 +2 64 , то перебор займёт уже очень приличное время. Но 64 - это далеко не самое маленькое число, которое я могу придумать.

Да, и в каждом сеансе я меняю сеансовый ключ, то есть беру пару новых чисел.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793834
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TРазмышлял тут про скорость аппаратного AES
Пусть грубо 2ГБ в секунду. Память может отдавать данные много быстрее, то есть имеем ожидание из-за вычислений. 256-битный xor выполняется, примерно за пару тактов. Ну пусть будет 3 для гарантии, хотя весьма вероятно, что за один такт. Пусть система о 3 гигагерцах. Тогда имеем 32 байта за наносекунду. Пусть xor выполняется два раза (для двух коней), тогда имеем 16 байт за наносекунду или 16ГБ в секунду. При этом второе (третье, четвёртое, ...) ядро вычисляет две последовательности. Для вычисления память не нужна (почти). Вычисление итеративное, из предыдущих данных получаются новые. Вычисление довольно простое. Если два-три ядра успеют вычислять со скоростью генерации 16 ГБ в секунду, то получаем теоретический предел 16 ГБ. Если не успеют - предел меньше. Но по сравнению с 2 ГБ/с есть запас. Делим 16 на 4 загружаемых ядра - всё равно будет двойной запас. И работает без требования о наличии железных команд, считающих AES.

Не в плане кого-то убеждать, но альтернатива интересная.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793839
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555Да, и в каждом сеансе я меняю сеансовый ключ, то есть беру пару новых чисел.
Подумал, понял, что не знаю, можно или нет статистически обнаружить отклонение от известного распределения при наличии конкретного шаблона в сообщении. Поэтому из-за незнания придётся усложнить алгоритм перепутыванием байт в сообщении по закону, который меняется на каждом сеансе.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793847
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВсе хорошо, но что делать там где проц не поддерживает AES ? Это не только ARMов касается. Интел поддержку AES включил только в 2008 и то не на всех процах.
Под рукой нашлись два ноута где нет AES, процы: i3-2310M и AMD A8-3510MX.

PS В вики немного врут, на i3-7100U есть AES.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793871
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonНе собралось.
Поправил, проверяй.
Спасибо. Вечером повторю. Кстати на днях ко мне заедет 6-ядерный
Ryzen. Можно будет погонять на нем карточный трассировщик луча.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793925
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555maytonМы берем зашифрованное сообщение и применяем к нему известный (уже) генератор до тех пор пока регулярные структуры в нем не проявятся.
То есть решаем перебором. Но ведь чисел, из которых можно взять корень, очень много. Если брать числа хотя бы в районе от 2 64 и до 2 64 +2 64 , то перебор займёт уже очень приличное время. Но 64 - это далеко не самое маленькое число, которое я могу придумать.

Да, и в каждом сеансе я меняю сеансовый ключ, то есть беру пару новых чисел.
В чем заключается твоя идея? Вместо ключа длиной 256 бит который генерируется
обычно секюрными генераторами, или хешом от парольной фразы, ты предлагаешь
заведомо узкую по области значений и сурьективную функцию которая пространство
ключей сужает от 256 до 64 бит.

Зачем это? Что мы на этом экономим?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793934
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мысли вслух, может кто что подскажет: там где AES не поддерживается, то перейти на cbc xor, но тут две проблемы:

1. Определить что AES аппаратно не поддерживается, не гуглил, но это вроде как можно определить что поддеживает проц перед использованием.

2. Переключиться на xor если одна из сторон не может использовать аппаратный AES. Тут выравнивание по 16 байт заставляет шифровать все 1472 байта (максимум для UDP). В конец пакета добавлено два байта 0xA55A, по которым можно проверить корректность расшифровки, поэтому видится только что получатель на первый пакет либо сообщает отправителю что не в состоянии расшифровать (нет поддержки AES), либо не расшифровав с AES расшифровывает с XOR.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793935
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TМысли вслух, может кто что подскажет: там где AES не поддерживается, то перейти на cbc xor, но тут две проблемы:

1. Определить что AES аппаратно не поддерживается, не гуглил, но это вроде как можно определить что поддеживает проц перед использованием.

2. Переключиться на xor если одна из сторон не может использовать аппаратный AES. Тут выравнивание по 16 байт заставляет шифровать все 1472 байта (максимум для UDP). В конец пакета добавлено два байта 0xA55A, по которым можно проверить корректность расшифровки, поэтому видится только что получатель на первый пакет либо сообщает отправителю что не в состоянии расшифровать (нет поддержки AES), либо не расшифровав с AES расшифровывает с XOR.
Технически. Тебе проще собирать и поддерживать 2 бинарника.
- с аппаратной поддержкой AES для модных процессоров.
- с программной эмуляцией того-же AES для старых жлобских Пенитиумов и Ардуино.
Выбор сделать сразу на фазе инсталляции.

Усложнять протокол добавлением выбора - ябы не стал.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793937
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima TМысли вслух, может кто что подскажет: там где AES не поддерживается, то перейти на cbc xor, но тут две проблемы:

1. Определить что AES аппаратно не поддерживается, не гуглил, но это вроде как можно определить что поддеживает проц перед использованием.

2. Переключиться на xor если одна из сторон не может использовать аппаратный AES. Тут выравнивание по 16 байт заставляет шифровать все 1472 байта (максимум для UDP). В конец пакета добавлено два байта 0xA55A, по которым можно проверить корректность расшифровки, поэтому видится только что получатель на первый пакет либо сообщает отправителю что не в состоянии расшифровать (нет поддержки AES), либо не расшифровав с AES расшифровывает с XOR.
Технически. Тебе проще собирать и поддерживать 2 бинарника.
- с аппаратной поддержкой AES для модных процессоров.
- с программной эмуляцией того-же AES для старых жлобских Пенитиумов и Ардуино.
Выбор сделать сразу на фазе инсталляции.

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

Да, вариант программной реализации AES я умолчал, погуглю тоже, но и так понятно что это будет тормоз на слабом железе. Я за скорость, и ради скорости готов пожертвовать криптостойкостью. Как вариант можно предусмотреть сборку бинарника не поддерживающего слабое xor шифрование.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793938
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут пишут про детектор команд AES new instructions:

https://stackoverflow.com/questions/38798818/within-my-c-program-is-there-a-way-to-check-if-the-cpu-has-aes-ni

Можно в рантайме проверять.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793945
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЗачем это? Что мы на этом экономим?
Получаем скорость. Если AES реализовали в железе, то уж вычисление "длинного" корня там и подавно легко добавить, тогда скорость будет в разы больше.

При этом ключ будет равен длине пакета. А число, из которого берётся корень, есть лишь способ сжатия информации о ключе. В начале сеанса шлём число, а не всю последовательность для шифрования. Число может быть маленьким, в разы меньше 256 бит, ибо перебором и 64 бита будут месяцами на мега-кластере считать.

Но это не готовое предложение, это из разряда "мысли вслух". Потому что полноценно обосновывать это всё мне времени жалко.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793947
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555maytonЗачем это? Что мы на этом экономим?
Получаем скорость. Если AES реализовали в железе, то уж вычисление "длинного" корня там и подавно легко добавить, тогда скорость будет в разы больше.
Почему ты вообще в тему втащил "корень" ? Как его считать? Методом Ньютона? Метод Ньютона
потребует массы арифметики над длинным (нет не длинным а бесконечно растущим числом).

И почему ты решил что твой метод дешевле чем просто генерация криптобезопасного случайного ключа?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793948
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T1. Определить что AES аппаратно не поддерживается, не гуглил, но это вроде как можно определить что поддеживает проц перед использованием.
авторBefore an application attempts to use AESNI instructionsor PCLMULQDQ, the application should follow the steps
illustrated in Section 11.6.2, “Checking for SSE/SSE2 Support.” Next, use the additional step provided below:
Check that the processor supports AESNI (if CPUID.01H:ECX.AESNI[bit 25] = 1); check that the processor
supports PCLMULQDQ (if CPUID.01H:ECX.PCLMULQDQ[bit 1] = 1).
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793949
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПочему ты вообще в тему втащил "корень" ?
Потому что был вопрос про шифрование.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793983
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonНе собралось.
Поправил, проверяй.
Хехе. На жлобском i3.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
mayton@mayton-HP-250-G4-Notebook-PC:/sql.ru/dima/crypt_speed$ ./make.sh 
compile Mar 30 2019 00:33:23
test speed fill 4096 blocks of 500000 bytes each ... 
filled 1953 Mb in 4827122 ms 404 Mb/s   
test speed CBC XOR encrypt 4096 blocks of 500000 bytes each ... 
3674763 ms 531 Mb/s
test speed RC4 encrypt 4096 blocks of 500000 bytes each ... 
10483649 ms 186 Mb/s
test speed AES-128 encrypt 4096 blocks of 500000 bytes each ... 
1072579 ms 1820 Mb/s
test speed AES-128 + CBC encrypt 4096 blocks of 500000 bytes each ... 
5079565 ms 384 Mb/s
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793995
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только заметил, я с выводом немного накосячил:
1. не "4096 blocks of 500000 bytes each" а 500000 блоков по 4096 байт
2. В линуксе время вывелось в мкс, но скорость правильно посчиталась.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39793997
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonХехе. На жлобском i3.
Добавлю в общую таблицу
Алгоритмi7-6700Ki7-3770Ki5-660mayton i3CBC xor1784 ms 1094 Mb/s2298 ms 849 Mb/s3429 ms 569 Mb/s3674 ms 531 Mb/sRC42689 ms 726 Mb/s4794 ms 407 Mb/s4897 ms 398 Mb/s10483 ms 186 Mb/sAES-128311 ms 6280 Mb/s648 ms 3014 Mb/s1102 ms 1772 Mb/s1072 ms 1820 Mb/sAES-128 + CBC1390 ms 1405 Mb/s2709 ms 720 Mb/s2488 ms 785 Mb/s5079 ms 384 Mb/s

Странно что добавление CBC так сильно замедляет. На некоторых процах становится AES+CBC даже медленнее чем CBC xor. Хотя код не сильно меняется.
Просто AES
Код: plaintext
1.
2.
3.
4.
5.
6.
	void encrypt(void *buffer, size_t size) {
		__m128i *end = ((__m128i *)buffer) + size / 16;
		for (__m128i *p = (__m128i *)buffer; p < end; p++) {
			aes128_enc(key_schedule, p, p);
		}
	}

AES+CBC
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
	void cbc_encrypt(void *buffer, size_t size) {
		__m128i *end = ((__m128i *)buffer) + size / 16;
		__m128i prev = { 0 };
		for (__m128i *p = (__m128i *)buffer; p < end; p++) {
			__m128i v = _mm_xor_si128(*p, prev);
			aes128_enc(key_schedule, &v, p);
			prev = *p;
		}
	}


Добавились две простые операции: XOR двух блоков и копирование блока. По сравнению с aes128_enc() это легкие операции, но скорость почему-то падает в разы.
aes128_enc()
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
static void aes128_enc(__m128i *key_schedule, __m128i *plainText, __m128i *cipherText) {
	__m128i m = _mm_loadu_si128(plainText);

	m = _mm_xor_si128(m, key_schedule[0]);
	m = _mm_aesenc_si128(m, key_schedule[1]);
	m = _mm_aesenc_si128(m, key_schedule[2]);
	m = _mm_aesenc_si128(m, key_schedule[3]);
	m = _mm_aesenc_si128(m, key_schedule[4]);
	m = _mm_aesenc_si128(m, key_schedule[5]);
	m = _mm_aesenc_si128(m, key_schedule[6]);
	m = _mm_aesenc_si128(m, key_schedule[7]);
	m = _mm_aesenc_si128(m, key_schedule[8]);
	m = _mm_aesenc_si128(m, key_schedule[9]);
	m = _mm_aesenclast_si128(m, key_schedule[10]);
	_mm_storeu_si128(cipherText, m);
}


Асм мельком глянул, серьезной разницы в коде нет.
Единственное подозрение что предсказатель в проце распараллеливает просто AES, предугадывая какой блок будет обсчитываться следующим, а после добавления CBC параллелить невозможно.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794010
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил дешифрование AES с CBC
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	void cbc_decrypt(void *buffer, size_t size) {
		__m128i *end = ((__m128i *)buffer) + size / 16;
		__m128i prev = { 0 };
		for (__m128i *p = (__m128i *)buffer; p < end; p++) {
			__m128i v, b = *p;
			aes128_dec(key_schedule, p, &v);
			*p = _mm_xor_si128(v, prev);
			prev = b;
		}
	}



Просто AES
Код: plaintext
1.
2.
3.
4.
5.
6.
	void decrypt(void *buffer, size_t size) {
		__m128i *end = ((__m128i *)buffer) + size/16;
		for (__m128i *p = (__m128i *)buffer; p < end; p++) {
			aes128_dec(key_schedule, p, p);
		}
	}



Затестил скорость и она такая же как у просто AES
На всякий случай добавил тест скорости дешифрования AES, она не отличается от шифрования.
ОперацияСкоростьAES.encrypt()6009 Mb/sAES.decrypt()5847 Mb/sAES.cbc_encrypt()1380 Mb/sAES.cbc_decrypt()5991 Mb/s

PS Потестил в линуксе - тоже тормозит cbc_encrypt(). И в линуксе почему-то почти вдвое медленнее чем в виндовсе, хотя обе виртуалки на одном хосте.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794029
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел классический исходник AES, т.е. без спец.команд проца. Затестил шифрование им. В 100 раз медленнее. На слабеньком i3-2310M скорость 21 Мб/сек. Думаю ARM вообще захлебнется.
Вобщем не вариант использовать AES там где нет его поддержки процом.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794044
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри утилита OpenSSL имеет встроенные бенчмарки.
Возможно есть симметричка попроще чем AES по мегафлопам
но посильнее чем "Хорь".
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794053
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа такого. AES против DES. Насколько я понимаю каждый тест ограничен в 3 секунды. И
меряется количество блоков которые удалось успеть отработать с учотом вариативной длины
блока. При этом насколько я понял это не блок шифрования а блок одной операции OpenSSL.
Например внизу указана скорость DES для 16к блока.
Код: sql
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.
mayton@mayton-HP-250-G4-Notebook-PC:~$ openssl speed aes-128-cbc
Doing aes-128 cbc for 3s on 16 size blocks: 13832691 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 64 size blocks: 3787056 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 256 size blocks: 967555 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 1024 size blocks: 243699 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 8192 size blocks: 30517 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 16384 size blocks: 15282 aes-128 cbc's in 3.00s
OpenSSL 1.1.0g  2 Nov 2017
built on: reproducible build, date unspecified
options:bn(64,64) rc4(16x,int) des(int) aes(partial) blowfish(ptr) 
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/lib/ssl\"" -DENGINESDIR="\"/usr/lib/x86_64-linux-gnu/engines-1.1\"" 
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-128 cbc      73774.35k    80790.53k    82564.69k    83182.59k    83331.75k    83460.10k
mayton@mayton-HP-250-G4-Notebook-PC:~$ 
mayton@mayton-HP-250-G4-Notebook-PC:~$ openssl speed des-cbc
Doing des cbc for 3s on 16 size blocks: 7752213 des cbc's in 3.00s
Doing des cbc for 3s on 64 size blocks: 1997533 des cbc's in 3.00s
Doing des cbc for 3s on 256 size blocks: 502666 des cbc's in 3.00s
Doing des cbc for 3s on 1024 size blocks: 125918 des cbc's in 2.99s
Doing des cbc for 3s on 8192 size blocks: 15747 des cbc's in 3.00s
Doing des cbc for 3s on 16384 size blocks: 7849 des cbc's in 3.00s
OpenSSL 1.1.0g  2 Nov 2017
built on: reproducible build, date unspecified
options:bn(64,64) rc4(16x,int) des(int) aes(partial) blowfish(ptr) 
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/lib/ssl\"" -DENGINESDIR="\"/usr/lib/x86_64-linux-gnu/engines-1.1\"" 
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
des cbc          41345.14k    42614.04k    42894.17k    43123.76k    42999.81k    42866.01k
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794055
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСтранно что добавление CBC так сильно замедляет.
Ничего странного. ECB аппаратно распараллеливается, СВС этого не может в принципе.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794062
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TСтранно что добавление CBC так сильно замедляет.
Ничего странного. ECB аппаратно распараллеливается, СВС этого не может в принципе.
Что-то я затупил. Понял почему расшифровка не тормозит - она параллелится.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794070
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докину в топик картинку. Для себя. И для всех.

...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794094
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТипа такого. AES против DES. Насколько я понимаю каждый тест ограничен в 3 секунды. И
меряется количество блоков которые удалось успеть отработать с учотом вариативной длины
блока. При этом насколько я понял это не блок шифрования а блок одной операции OpenSSL.
Например внизу указана скорость DES для 16к блока.
Код: sql
1.
2.
3.
4.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-128 cbc      73774.35k    80790.53k    82564.69k    83182.59k    83331.75k    83460.10k
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
des cbc          41345.14k    42614.04k    42894.17k    43123.76k    42999.81k    42866.01k


80 Мб/сек как-то совсем грустно. Глянь выше 21847664 , твой ноут выдал 531 Мб/сек. на аппаратном AES с cbc
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794101
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну прекрасно. Значит тот дистрибутив OpenSSL который шел в репозитариях убунты не поддержал AES-NI.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794102
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прогони у себя аналогичный тест.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794108
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПрогони у себя аналогичный тест.
А смысл? Если есть поддержка AES-NI, то и у меня все отлично, а если нет то и так ясно что все плохо.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794117
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придумал как ускорить тормоз шифрования AES+CBC 21847716 . Сначала сделать CBC потом кодирование. Я понимаю что это совсем не CBC, но у меня цели шире шифрования 21844612 . Думаю криптостойкость остается достаточная.
Назвал это xor_crypt()
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	// Шифрование данных XOR с предыдущим (оно же дешифрование)
	void xor_crypt(void* buf, size_t size) {
		__m128i *end = ((__m128i *)buf) + size/16;
		for (__m128i *p = ((__m128i *)buf) + 1; p < end; p++) {
			*p = _mm_xor_si128(*p, *(p - 1));
		}
	}


Само шифрование идет в два шага
Код: plaintext
1.
2.
		aes.xor_crypt(buf, block_size);
		aes.encrypt(buf, block_size);


Производительность повысилась
ОперацияСкоростьAES.encrypt()6009 Mb/sAES.decrypt()5847 Mb/sAES.cbc_encrypt()1380 Mb/sAES.cbc_decrypt()5991 Mb/sAES.xor_encrypt()3792 Mb/sAES.xor_decrypt()3919 Mb/s
Правда несильно, если сложить encrypt+decrypt, то имеем 7371 для CBC и 7711 для xor. Чуть менее 5%. Но с другой стороны равномерная нагрузка у отправителя и получателя.

PS Я еще могу это запараллелить, т.е. один поток выполняет aes.xor_crypt(), другой aes.encrypt()
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794123
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты можешь усложнить прикладной протокол и считать файл набором независимых кусков. Чанков.
И тогда - параллелить шифрование чанков по ядру процессора на каждый чанк.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794128
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТы можешь усложнить прикладной протокол и считать файл набором независимых кусков. Чанков.
И тогда - параллелить шифрование чанков по ядру процессора на каждый чанк.
Хорошая мысль, и менять особо ничего не надо. У меня уже набор независимых чанков (UDP-пакетов), можно их шифровать параллельно и отправлять по мере готовности, т.к. UDP не гарантирует порядок доставки пакетов.

Но в итоге всего-лишь увеличим скорость в N раз, где N это количество доступных ядер, поэтому скорость шифрования все-равно важна. Но мысль замечательная, обязательно использую.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794133
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надеюсь скорость диска и сети достаточная.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794138
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНадеюсь скорость диска и сети достаточная.
Одна из целей выжать гигабит из гигабитной сети, 128 Мб/сек. Я уже пробовал, но TCP победил с большим перевесом, надеюсь наверстать, но думаю для рекорда придется шифрование отключить, т.к. TCP тоже не шифруется. Но если я победю с шифрованием - это будет круто.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794142
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНадеюсь скорость диска и сети достаточная.
Про скорость диска - купи уже SSD, на современных SSD (NMVE) скорость чтения 2-3 Гб/сек. Ты вроде мамку новую покупаешь, посмотри чтобы NMVE поддерживала. Но скорость чтения из кэша ОС, т.е. из памяти 5 Гб/сек., поэтому не покупаю сверхскоростные SSD, т.к. иметь много оперативки лучше для чтения.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794149
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня сейчас ASUS prime B450. На борту есть слот M.2 который я пока еще не использую но как только прикуплю
хороший SSD - поставлю. Пока у меня - основные задачи перенос архивов.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794151
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот скриншотик с топа. Всего 6 ядер. Видятся как 12 логических CPU.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794193
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВот скриншотик с топа. Всего 6 ядер. Видятся как 12 логических CPU.
Надо как-нибудь затестить насколько логическое ядро AMD отличается от Intel. У последнего два логических как 1.4 реальных.
Можно кардтрейсером параллельным померить.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794194
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас мультипоточка адаптирована только
В dotNet и Java реализациях
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794195
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794201
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отлично.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794202
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты мог-бы пушнуть это в мой репозитарий?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794302
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще статистика по твоей крипте. На процессоре AMD Ryzen-5

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
mayton@mayton-ryzen:/sql.ru/dima/crypt_speed$ ./make.sh 
compile Mar 31 2019 19:32:24
test speed fill 300000 blocks of 4096 bytes each ... 
filled 1171 Mb in 1394 ms 840 Mb/s   
test speed CBC XOR encrypt 300000 blocks of 4096 bytes each ... 
1211 ms 966 Mb/s
test speed RC4 encrypt 300000 blocks of 4096 bytes each ... 
3666 ms 319 Mb/s
test speed AES-128 encrypt 300000 blocks of 4096 bytes each ... 
131 ms 8943 Mb/s
test speed AES-128 decrypt 300000 blocks of 4096 bytes each ... 
126 ms 9243 Mb/s
test speed AES-128 + CBC encrypt 300000 blocks of 4096 bytes each ... 
873 ms 1342 Mb/s
test speed AES-128 + CBC decrypt 300000 blocks of 4096 bytes each ... 
148 ms 7878 Mb/s
test speed AES-128 + XOR encrypt 300000 blocks of 4096 bytes each ... 
316 ms 3700 Mb/s
test speed AES-128 + XOR decrypt 300000 blocks of 4096 bytes each ... 
313 ms 3741 Mb/s
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794303
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И чтобы быть последовательным. Я еще раз перегенерирую статистику встроенного шифровальщика на новом железе.
Условия те-же. Сравниваем АЕС и Дес в режиме сцепления блоков.

Код: sql
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.
mayton@mayton-ryzen:/sql.ru/dima/crypt_speed$ openssl speed aes-128-cbc
Doing aes-128 cbc for 3s on 16 size blocks: 27863103 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 64 size blocks: 7423093 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 256 size blocks: 1939084 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 1024 size blocks: 972469 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 8192 size blocks: 122911 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 16384 size blocks: 61556 aes-128 cbc's in 3.00s
OpenSSL 1.1.0g  2 Nov 2017
built on: reproducible build, date unspecified
options:bn(64,64) rc4(8x,int) des(int) aes(partial) blowfish(ptr) 
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/lib/ssl\"" -DENGINESDIR="\"/usr/lib/x86_64-linux-gnu/engines-1.1\"" 
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
aes-128 cbc     148603.22k   158359.32k   165468.50k   331936.09k   335628.97k   336177.83k
mayton@mayton-ryzen:/sql.ru/dima/crypt_speed$ openssl speed des-cbc
Doing des cbc for 3s on 16 size blocks: 14539255 des cbc's in 2.99s
Doing des cbc for 3s on 64 size blocks: 3800282 des cbc's in 3.00s
Doing des cbc for 3s on 256 size blocks: 953938 des cbc's in 3.00s
Doing des cbc for 3s on 1024 size blocks: 240635 des cbc's in 3.00s
Doing des cbc for 3s on 8192 size blocks: 29992 des cbc's in 3.00s
Doing des cbc for 3s on 16384 size blocks: 15037 des cbc's in 3.00s
OpenSSL 1.1.0g  2 Nov 2017
built on: reproducible build, date unspecified
options:bn(64,64) rc4(8x,int) des(int) aes(partial) blowfish(ptr) 
compiler: gcc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/lib/ssl\"" -DENGINESDIR="\"/usr/lib/x86_64-linux-gnu/engines-1.1\"" 
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
des cbc          77802.03k    81072.68k    81402.71k    82136.75k    81898.15k    82122.07k
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794305
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТы мог-бы пушнуть это в мой репозитарий?
Закину, надо чуть поправить вывод.

maytonЕще статистика по твоей крипте. На процессоре AMD Ryzen-5
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
mayton@mayton-ryzen:/sql.ru/dima/crypt_speed$ ./make.sh 
compile Mar 31 2019 19:32:24
test speed fill 300000 blocks of 4096 bytes each ... 
filled 1171 Mb in 1394 ms 840 Mb/s   
test speed CBC XOR encrypt 300000 blocks of 4096 bytes each ... 
1211 ms 966 Mb/s
test speed RC4 encrypt 300000 blocks of 4096 bytes each ... 
3666 ms 319 Mb/s


Тут проигрывает интелу 21847357
mayton
Код: sql
1.
2.
3.
4.
test speed AES-128 encrypt 300000 blocks of 4096 bytes each ... 
131 ms 8943 Mb/s
test speed AES-128 decrypt 300000 blocks of 4096 bytes each ... 
126 ms 9243 Mb/s


А тут интел порван, там было 6000, т.е. тут в полтора раза быстрее.
mayton
Код: sql
1.
2.
test speed AES-128 + CBC encrypt 300000 blocks of 4096 bytes each ... 
873 ms 1342 Mb/s


Тут также как на интеле. Это не параллелится.

Похоже AMD в полтора раза глубже параллелит чем интел.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794307
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я соберусь с силами и перетещу все бенчмарки Рей-Трейсера. Но это не главная задача.

У меня щас идея - перетащить всю конфигурацию Рей-Тресера в Docker. Хороший
challenge. +Сравним есть ли разница между native-call наших компилляторов
и сред исполнения и para-virtualization.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794309
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ соберусь с силами и перетещу все бенчмарки Рей-Трейсера. Но это не главная задача.

У меня щас идея - перетащить всю конфигурацию Рей-Тресера в Docker. Хороший
challenge. +Сравним есть ли разница между native-call наших компилляторов
и сред исполнения и para-virtualization.
Разницы не будет. Там нагрузка только на проц.
Я все тесты запускал в виртуалках на одном хосте и на самом хосте. Виртуализация проца идет аппаратно, производительность не проседает. В виртуалках проседает IO диска и сети.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39794313
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда тем более. Сам бог велел нам собирать Docker c полным комплектом компилляторов.

Процедура инсталляции среды упрощается до двух действий. Установить докер. И установить
образ всего проекта.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39795416
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут фигню намерил 21847923 , алгоритм xor кривой оказался. Поправил исходники
ОперацияСкоростьAES.encrypt()6009 Mb/sAES.decrypt()5847 Mb/sAES.cbc_encrypt()1380 Mb/sAES.cbc_decrypt()5991 Mb/sAES.xor_encrypt()4942 Mb/sAES.xor_decrypt()6103 Mb/s
mayton, если не трудно, запусти код на своем AMD и результат сюда запости.

PS _mm_xor_si128() очень быстро работает. Как узнать что эта функция поддерживается процом и компилятором?
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39795431
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Пожалуйста.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
mayton@mayton-ryzen:/sql.ru/dima/crypt_speed$ ./make.sh 
compile Apr  2 2019 21:25:37
test speed fill 500000 blocks of 1472 bytes each ... 
filled 701 Mb in 848 ms 827 Mb/s   
test speed CBC XOR encrypt 500000 blocks of 1472 bytes each ... 
704 ms 995 Mb/s
test speed RC4 encrypt 500000 blocks of 1472 bytes each ... 
2175 ms 322 Mb/s
test speed RC4rand256 encrypt 500000 blocks of 1472 bytes each ... 
380 ms 1844 Mb/s
test speed AES-128 encrypt 500000 blocks of 1472 bytes each ... 
62 ms 11211 Mb/s
test speed AES-128 decrypt 500000 blocks of 1472 bytes each ... 
68 ms 10237 Mb/s
test speed AES-128 + XOR encrypt 500000 blocks of 1472 bytes each ... 
98 ms 7141 Mb/s
test speed AES-128 + XOR decrypt 500000 blocks of 1472 bytes each ... 
62 ms 11158 Mb/s
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39795509
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересные цифры. Тут 21848374 AES шифрование было 9 Гб/сек, стало 11 Гб/сек. Я всего лишь размер блока уменьшил до 1472 байт. На моем i7-6700K как было 6 Гб/сек, так и осталось.

AES-128 + XOR отличный результат на обоих процах. Это замена тормозного AES-128 + CBC, т.е. сначала CBC, точнее XOR с предыдущим как в CBC, но без шифрования, затем AES шифрование.

И очень странный результат RC4rand256, это просто побайтный XOR с ключевой последовательностью смещенной N байт, где N значение первого байта шифруемого.
Как-то сложно описал, проще исходник показать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
void rc4rand256_speed(int block_size, int block_count) {
	rc4_t rc4("My secret key", 13); // Инициализация ключевой последовательности
	uint8_t *buf = new uint8_t[block_size]; // буфер под данные
	uint8_t *key = new uint8_t[block_size + 256]; // буфер под ключевую последовательность
	rc4.crypt(key, block_size + 256); // Заполнение ключевой последовательности
	fill_data(0, 0, 12345); // Инициализация генератора данных
	int cs = 0;
	printf("test speed RC4rand256 encrypt %d blocks of %d bytes each ... \n", block_count, block_size);
	uint32_t start = clock(); // Начало замера
	for (int i = 0; i < block_count; i++) {
		fill_data(buf, block_size);
		uint8_t *k = key + buf[0]; // Начало последовательности для шифрования текущего блока
		buf[0] ^= k[0]; // buf[0] нельзя шифровать, а если цикл начать с 1 почему-то медленнее работает
		for (size_t i = 0; i != block_size; i++) buf[i] ^= k[i]; // Шифрование
		cs += checksum(buf, block_size); // Расчет контрольной суммы чтобы оптимизатор ничего не убрал
	}
	// Вывод результата
	int time = clock() - start - time_fill;
	if (time == 0) time = 1;
	int64_t total = (int64_t)block_size * block_count;
	printf("%d ms %d Mb/s\n%u\r", time / ((int)CLOCKS_PER_SEC / 1000), (int)((total * CLOCKS_PER_SEC / time) >> 20), cs);
}


Это я ищу быструю альтернативу хотя бы спрятать, там где полноценно зашифровать не удается из-за отсутствия поддержки AES-NI.

У меня RC4rand256 дает какие-то фантастические скорости: в виндовсе в 6-7 раз быстрее чем AES, но в линуксе в 2 раза медленнее, у тебя в линуксе в 6.5 раз медленнее.
Похоже меня компилятор MSVC обхитрил, что-то соптимизировал там где я не ожидал, надо изобретать другой способ тестирования.
Также есть сомнения в точности замера AES, т.к. по идее результат должен быть одинаков в виндовсе и линуксе, но в линуксе почти вдвое медленнее.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39795537
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй у себя ещё парочку компиляторов.
Тогда мы точнее поймём где идёт влияние железа.
И где влияют конкретные возможности оптимизаций.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39795793
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТакже есть сомнения в точности замера AES, т.к. по идее результат должен быть одинаков в виндовсе и линуксе, но в линуксе почти вдвое медленнее.
Если Линукс на виртуалке, то в некоторых версиях QEMU, например, был баг когда CPUID AЕS флаг пробрасывался в гостевую систему некорректно (точнее никак).
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39795797
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TТакже есть сомнения в точности замера AES, т.к. по идее результат должен быть одинаков в виндовсе и линуксе, но в линуксе почти вдвое медленнее.
Если Линукс на виртуалке, то в некоторых версиях QEMU, например, был баг когда CPUID AЕS флаг пробрасывался в гостевую систему некорректно (точнее никак).
Виртуалки под VirtualBox. Я флаг AES проверяю. Да и непохоже что программно считается, программно раз в 100 медленнее, а тут всего в 2 раза.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39795974
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TТакже есть сомнения в точности замера AES, т.к. по идее результат должен быть одинаков в виндовсе и линуксе, но в линуксе почти вдвое медленнее.
Если Линукс на виртуалке, то в некоторых версиях QEMU, например, был баг когда CPUID AЕS флаг пробрасывался в гостевую систему некорректно (точнее никак).
Линукс на железе.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39796013
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDimitry Sibiryakovпропущено...

Если Линукс на виртуалке, то в некоторых версиях QEMU, например, был баг когда CPUID AЕS флаг пробрасывался в гостевую систему некорректно (точнее никак).
Линукс на железе.
Я так понял что речь про мой линукс в виртуалке.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39797528
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предыдущие замеры строились на замере времени пустого цикла и вычитание его из времени цикла с полезной нагрузкой. Тут похоже компилятор меня перехитрил соптимизировав циклы.

Переделал все на акторы, т.е. многопоточно. Замер времени от и до без вычетов.

АлгоритмРезультат i7-6700KПустой прогон125 ms 11230 Mb/sXOR SHIFT198 ms 7089 Mb/sXOR SHIFT + CBC556 ms 2524 Mb/sRC42253 ms 623 Mb/sAES-128 encrypt486 ms 2888 Mb/sAES-128 decrypt514 ms 2731 Mb/sAES-128 + CBC encrypt1181 ms 1188 Mb/sAES-128 + CBC decrypt512 ms 2741 Mb/sXOR128 + CBC encrypt183 ms 7671 Mb/sXOR128 + CBC decrypt182 ms 7713 Mb/s

Многопоточно тестить в виртуалке - какая-то ерунда получается, дал линуксу три ядра - он стал работать медленнее чем с одним. Но в однопроцовой виндовс-виртуалке медленнее чем на вин-хосте.

mayton , пожалуйста, запусти тест на своем AMD и результат напиши.

PS Однопроцевые виртуалки виндовса и линукса дают похожие результаты.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39797702
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хопа. Привет. Только добрался до компа.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39797716
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Готово.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
mayton@mayton-ryzen:/sql.ru/dima/crypt_speed$ ./make.sh 
compile Apr  6 2019 21:58:23
21:58:25 test speed send to next 1000000 blocks of 1472 bytes each ...
21:58:25 581 ms 2416 Mb/s
21:58:25 test speed XOR SHIFT crypt 1000000 blocks of 1472 bytes each ...
21:58:26 395 ms 3553 Mb/s
21:58:26 test speed XOR SHIFT + CBC encrypt 1000000 blocks of 1472 bytes each ...
21:58:26 424 ms 3310 Mb/s
21:58:26 test speed RC4 crypt 1000000 blocks of 1472 bytes each ...
21:58:32 6130 ms 229 Mb/s
21:58:32 test speed AES-128 encrypt 1000000 blocks of 1472 bytes each ...
21:58:33 606 ms 2316 Mb/s
21:58:33 test speed AES-128 decrypt 1000000 blocks of 1472 bytes each ...
21:58:33 492 ms 2853 Mb/s
21:58:33 test speed AES-128 + CBC encrypt 1000000 blocks of 1472 bytes each ...
21:58:35 1964 ms 714 Mb/s
21:58:35 test speed AES-128 + CBC decrypt 1000000 blocks of 1472 bytes each ...
21:58:36 465 ms 3018 Mb/s
21:58:36 test speed XOR128 + CBC encrypt 1000000 blocks of 1472 bytes each ...
21:58:36 366 ms 3835 Mb/s
21:58:36 test speed XOR128 + CBC decrypt 1000000 blocks of 1472 bytes each ...
21:58:37 348 ms 4033 Mb/s



Еще под катом информация о процессоре. Хм.. странно что частота как-то плавает. Возможно надо
заниматься оверклокингом. Чем я еще пока не занимался. Вобщем обещаю чуть позже посмотреть
как райзен ее вообще регулирует.

Код: sql
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.
mayton@mayton-ryzen:/sql.ru/dima/crypt_speed$ cat /proc/cpuinfo
processor	: 0
vendor_id	: AuthenticAMD
cpu family	: 23
model		: 1
model name	: AMD Ryzen 5 1600 Six-Core Processor
stepping	: 1
microcode	: 0x8001137
cpu MHz		: 1374.456
cache size	: 512 KB
physical id	: 0
siblings	: 12
core id		: 0
cpu cores	: 6
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb hw_pstate sme ssbd sev ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 xsaves clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif overflow_recov succor smca
bugs		: sysret_ss_attrs null_seg spectre_v1 spectre_v2 spec_store_bypass
bogomips	: 6387.31
TLB size	: 2560 4K pages
clflush size	: 64
cache_alignment	: 64
address sizes	: 43 bits physical, 48 bits virtual
power management: ts ttp tm hwpstate eff_freq_ro [13] [14]

...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39797813
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonХм.. странно что частота как-то плавает.
Похоже проц прогревается постепенно, пустой цикл медленнее чем нагруженный.
Наверно для точности замеров надо запускать несколько раз подряд. Но и этот результат подойдет, мне точно не надо, этих данных вполне достаточно чтобы определиться. Спасибо.
...
Рейтинг: 0 / 0
Пятничная криптостойкость
    #39797819
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуйста. Но я ещё покручу регуляторы.
Просто повода не было.
...
Рейтинг: 0 / 0
137 сообщений из 137, показаны все 6 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пятничная криптостойкость
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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