Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 Создал свой алгоритм шифрования
Создал программу шифрования-дешифрования свой алгоритм
Тест провел на 1гб файле с нулями. Видео кодируется раскодируется тест на зашифрованный файл

>>> ЗАПУСК ПАРАЛЛЕЛЬНОГО АНАЛИЗА (7 ПОТОКОВ i7-2600K)
>>> Файл: test_1gb.encrypt.zas | Размер: 1024.0 MB
============================================================
1. ЭНТРОПИЯ (HEX) : 4.00000000
2. БАЛАНС БИТОВ : 0.50000289
3. ХИ-КВАДРАТ (X²): 253.14
4. ЧИСЛО ПИ (MC) : 3.132522
5. СКОРОСТЬ : 7.02 MB/s

============================================================

Нужна скомпиллярованная программа PractRand для виндовс 10 для жесткого теста

 Re: Создал свой алгоритм шифрования
Ничего не понятно. Здесь можно писать по-английски, а не пытаться переводить на русский кривыми переводчиками.

 Re: Создал свой алгоритм шифрования
realeugene в сообщении #1721495 писал(а):
Ничего не понятно.

Видимо, ТС просит совета как собрать PractRand под венду из исходников или где скачать готовое. :D
Исходники на C++ тут: https://sourceforge.net/projects/pracrand/files/
Программа нужна, видимо, для анализа похожести результата шифрования на случайную последовательность, получаемого после кодирования изобретённым ТС-ом алгоритмом шифрования.

 Re: Создал свой алгоритм шифрования
Спасибо за участие нашел скомпиленный https://github.com/MartyMacGyver/PractR ... G_test.exe

RNG_test using PractRand version 0.94
RNG = RNG_stdin64, seed = unknown
test set = expanded, folding = standard (64 bit)

rng=RNG_stdin64, seed=unknown
length= 64 megabytes (2^26 bytes), time= 2.7 seconds
no anomalies in 409 test result(s)

rng=RNG_stdin64, seed=unknown
length= 128 megabytes (2^27 bytes), time= 6.9 seconds
Test Name Raw Processed Evaluation
[Low1/64]FPF-14+6/32:cross R= -2.3 p =1-1.7e-4 unusual
...and 436 test result(s) without anomalies

rng=RNG_stdin64, seed=unknown
length= 256 megabytes (2^28 bytes), time= 13.7 seconds
no anomalies in 465 test result(s)

rng=RNG_stdin64, seed=unknown
length= 512 megabytes (2^29 bytes), time= 25.1 seconds
no anomalies in 494 test result(s)

rng=RNG_stdin64, seed=unknown
length= 1 gigabyte (2^30 bytes), time= 48.2 seconds
no anomalies in 526 test result(s)



============================================================
1. ЭНТРОПИЯ (HEX) : 3.99999999
2. БАЛАНС БИТОВ : 0.49999366
3. ХИ-КВАДРАТ (X²): 247.55
4. ЧИСЛО ПИ (MC) : 3.132479
5. СКОРОСТЬ : 6.85 MB/s
============================================================

 Re: Создал свой алгоритм шифрования
bob1955 писал(а):
Тест провел на 1гб файле с нулями. Видео кодируется раскодируется тест на зашифрованный файл

Для тестирования с PractRand надо шифровать шифром текст из одних нулей (символов с кодом 0) и подать его на вход PractRand. 1 ГиБ - это очень малая выборка, нужно хотя бы терабайт, а лучше десятки терабайт. И то для шифра даже петабайт в PractRand - это так, базовая проверка на пригодность, а не свидетельство криптостойкости. Также 7 МиБ/с - это очень медленно для шифра. Ещё в PractRand 0.96 добавили один новый и важный тест.

 Re: Создал свой алгоритм шифрования
.

-- 17.04.2026, 23:28 --

Код:
rng=RNG_stdin, seed=unknown
length= 4 terabytes (2^42 bytes), time= 335381 seconds
  no anomalies in 1052 test result(s)


-- 17.04.2026, 23:29 --

Код:
== ЧИСТЫЙ ЛАВИННЫЙ ТЕСТ (БЕЗ apply_diffusion) ===
Блок данных: 1024 байт (8192 бита)
Во входе изменён: 1 бит
Изменено бит в шифротексте: 2033 из 4096
Процент лавины по данным: 49.6338 %
Отклонение от идеала (50 %): 0.3662 %
Отличный лавинный эффект (по честному)


-- 17.04.2026, 23:29 --

Код:
=== ТЕСТ ЛАВИНЫ ПО КЛЮЧУ ===
Шифруем с Key1: 123456789
Шифруем с Key2: 123456788
Изменено бит: 4119 из 8192
Результат Key Avalanche: 50.2808 %
ИДЕАЛЬНО: Ключ полностью детонирует систему!

ЗАПУСК ГЛУБОКОГО SAC ТЕСТА КЛЮЧА (64 бита)
Проверка бита 0... OK
Проверка бита 16... OK
Проверка бита 32... OK
Проверка бита 48... OK

--- ИТОГИ SAC ТЕСТА КЛЮЧА ---
Средняя лавина: 50.1476 %
Разброс (Мин/Макс): 48.83% - 51.29%
Отклонение: 0.1476 %
>>> ГИПЕР-АНАЛИЗ (NUMBA + 7 ПОТОКОВ)
>>> Файл: test_32gb_ENC.dat | 32.00 GB
============================================================
ПРОГРЕСС: 97.5% | 31936 MB
============================================================
1. ЭНТРОПИЯ (HEX) : 4.00000000
2. БАЛАНС БИТОВ : 0.50000002
3. ХИ-КВАДРАТ (X²): 273.24
4. ЧИСЛО ПИ (MC) : 3.132514
5. СКОРОСТЬ : 114.67 MB/s
=============================


-- 17.04.2026, 23:32 --

Dig386 в сообщении #1721968 писал(а):
bob1955 писал(а):
Тест провел на 1гб файле с нулями. Видео кодируется раскодируется тест на зашифрованный файл

Для тестирования с PractRand надо шифровать шифром текст из одних нулей (символов с кодом 0) и подать его на вход PractRand. 1 ГиБ - это очень малая выборка, нужно хотя бы терабайт, а лучше десятки терабайт. И то для шифра даже петабайт в PractRand - это так, базовая проверка на пригодность, а не свидетельство криптостойкости. Также 7 МиБ/с - это очень медленно для шифра. Ещё в PractRand 0.96 добавили один новый и важный тест.

Код:
g:\_RUST_PROJECT\crypto_analysis>main.py
=== ЗАПУСК КРИПТОАНАЛИЗА ===
=== ГЕНЕРАЦИЯ ТЕСТОВЫХ ВЕКТОРОВ ===
Сгенерировано 20 векторов...
Сгенерировано 40 векторов...
Всего сгенерировано: 50 векторов
Векторы сохранены в: test_vectors_50.json

=== ТЕСТ ЛАВИННОГО ЭФФЕКТА ===
=== ЭТАЛОННЫЙ ТЕСТ ЛАВИНЫ ПО ДАННЫМ (10000 итераций) ===
  Данные: 2000/10000...
  Данные: 4000/10000...
  Данные: 6000/10000...
  Данные: 8000/10000...
  Данные: 10000/10000...
ИТОГ: Лавина по данным: 49.960346 %

=== ЭТАЛОННЫЙ ТЕСТ ЛАВИНЫ ПО КЛЮЧУ (10000 итераций) ===
  Ключ: 2000/10000...
  Ключ: 4000/10000...
  Ключ: 6000/10000...
  Ключ: 8000/10000...
  Ключ: 10000/10000...
ИТОГ: Лавина по ключу: 50.005641 % за 3.06с

=== ДИФФЕРЕНЦИАЛЬНЫЙ АНАЛИЗ ===
=== УЛЬТРА-БЫСТРЫЙ ДИФФЕРЕНЦИАЛЬНЫЙ ТЕСТ (25,000 пар) ===

Тестируем входную разницу типа: 1
  Уникальных разностей: 20000 из 25000
  Макс. повторений: 1
ПРОЙДЕНО: Диффузия идеальна.

Тестируем входную разницу типа: 8
  Уникальных разностей: 20000 из 25000
  Макс. повторений: 1
ПРОЙДЕНО: Диффузия идеальна.

Тестируем входную разницу типа: 255
  Уникальных разностей: 20000 из 25000
  Макс. повторений: 1
ПРОЙДЕНО: Диффузия идеальна.

=== ЛИНЕЙНЫЙ АНАЛИЗ ===
=== УЛЬТРА-БЫСТРЫЙ ЛИНЕЙНЫЙ КРИПТОАНАЛИЗ ===
Объем: 1,000,000 блоков. Порог шума (1σ): 0.00100
Раунд 1: Маски In[47, 8] -> Out[2, 30]
  Смещение (Bias): 0.00052
Линейных связей не обнаружено
Раунд 2: Маски In[103, 155] -> Out[48, 96]
  Смещение (Bias): 0.00002
Линейных связей не обнаружено
Раунд 3: Маски In[171, 110] -> Out[83, 184]
  Смещение (Bias): 0.00007
Линейных связей не обнаружено
Раунд 4: Маски In[96, 62] -> Out[12, 27]
  Смещение (Bias): 0.00055
Линейных связей не обнаружено
Раунд 5: Маски In[82, 119] -> Out[66, 132]
  Смещение (Bias): 0.00034
Линейных связей не обнаружено

Тест завершен за 51.34 сек.

=== ТЕСТ ПРЕДСКАЗУЕМОСТИ ===
=== УЛУЧШЕННЫЙ ТЕСТ НА ПРЕДСКАЗУЕМОСТЬ ===
Уникальность разностей: 100.00%
ПРОЙДЕНО: Разности между блоками хаотичны.

Автокорреляция (лаги 1-5):
  Лаг 1: 0.067817
  Лаг 2: 0.051514
  Лаг 3: 0.177815
  Лаг 4: 0.056826
  Лаг 5: 0.087296


=== АТАКА НА КЛЮЧ ===
=== БРУТФОРС ТЕСТ (24 бит) ===
Цель: найти ключ для CT: 5fdd3daf2f5feae7...
Проверено: 499 ключей. Скорость: 50 к/сек
Ключ не найден в первых 500 попытках (это нормально)

=== ТЕСТ УТЕЧКИ (KNOWN PLAINTEXT) ===
Уникальных XOR-масок: 50 из 50
Прямых связей между PT и CT не обнаружено

=======ЗАПУСК МАТРИЧНОГО SAC-ТЕСТА (БИТ-К-БИТУ)====================
Анализ влияния 1-го байта входа на 15-й байт выхода
Итераций: 1000

-----------------------------------------------------------------------------
Вход B0 \ Выход B15 |  b0  |  b1  |  b2  |  b3  |  b4  |  b5  |  b6  |  b7  |
-----------------------------------------------------------------------------
   In_Bit 0     | 0.48 | 0.50 | 0.50 | 0.47 | 0.49 | 0.50 | 0.51 | 0.52 |
   In_Bit 1     | 0.53 | 0.51 | 0.49 | 0.50 | 0.49 | 0.53 | 0.49 | 0.47 |
   In_Bit 2     | 0.51 | 0.52 | 0.50 | 0.50 | 0.53 | 0.49 | 0.46 | 0.49 |
   In_Bit 3     | 0.50 | 0.48 | 0.48 | 0.48 | 0.51 | 0.51 | 0.54 | 0.50 |
   In_Bit 4     | 0.52 | 0.48 | 0.51 | 0.49 | 0.50 | 0.46 | 0.52 | 0.51 |
   In_Bit 5     | 0.47 | 0.52 | 0.49 | 0.49 | 0.52 | 0.51 | 0.51 | 0.49 |
   In_Bit 6     | 0.51 | 0.52 | 0.50 | 0.51 | 0.49 | 0.52 | 0.48 | 0.46 |
   In_Bit 7     | 0.50 | 0.49 | 0.51 | 0.51 | 0.48 | 0.50 | 0.49 | 0.50 |
-----------------------------------------------------------------------------
Среднее отклонение от 0.5: 0.013656
Время: 0.37 сек.


=== ГЕНЕРАЦИЯ СТАТИСТИЧЕСКИХ ДАННЫХ ===
=== ГЕНЕРАЦИЯ СТАТИСТИЧЕСКИХ ДАННЫХ ===
Генерация 100,000 байт для тестов
Сгенерировано: 32,000 / 100,000 байт
Сгенерировано: 64,000 / 100,000 байт
Сгенерировано: 96,000 / 100,000 байт
Статистические данные сохранены в: statistical_data_100KB.bin
Используйте для тестов PractRand или Dieharder

=== ВСЕ ТЕСТЫ ЗАВЕРШЕНЫ ===

 Re: Создал свой алгоритм шифрования
Изображение

 Re: Создал свой алгоритм шифрования
как только базовая версия на RUST, пройдет рубеж 8тб. Запущу 0.96 версию Ранд. А пока комп занят, параллельно запустил 4 варианта теста для пробы, коротких.

Код:
RNG_test_096.exe stdin64 -te 10 -multithreaded
>>> МОНОЛИТ RUST:

RNG_test_096.exe using PractRand version 0.96
RNG = RNG_stdin64, seed = unknown
test set = special (Birthday), folding = standard (64 bit)

rng=RNG_stdin64, seed=unknown
length= 64 megabytes (2^26 bytes), time= 3.7 seconds

rng=RNG_stdin64, seed=unknown
length= 128 megabytes (2^27 bytes), time= 7.1 seconds

rng=RNG_stdin64, seed=unknown
length= 256 megabytes (2^28 bytes), time= 14.5 seconds

rng=RNG_stdin64, seed=unknown
length= 512 megabytes (2^29 bytes), time= 27.5 seconds

rng=RNG_stdin64, seed=unknown
length= 1 gigabyte (2^30 bytes), time= 52.8 seconds

rng=RNG_stdin64, seed=unknown

length= 2 gigabytes (2^31 bytes), time= 104 seconds

======================================
| RNG_test_096.exe stdin64 -tf 1 -multithreaded
>>> МОНОЛИТ RUST:

RNG_test_096.exe using PractRand version 0.96
RNG = RNG_stdin64, seed = unknown
test set = core, folding = standard (64 bit)

rng=RNG_stdin64, seed=unknown
length= 64 megabytes (2^26 bytes), time= 3.1 seconds
  no anomalies in 172 test result(s)

rng=RNG_stdin64, seed=unknown
length= 128 megabytes (2^27 bytes), time= 6.4 seconds
  no anomalies in 185 test result(s)

rng=RNG_stdin64, seed=unknown
length= 256 megabytes (2^28 bytes), time= 12.8 seconds
  no anomalies in 199 test result(s)

rng=RNG_stdin64, seed=unknown
length= 512 megabytes (2^29 bytes), time= 24.9 seconds
  no anomalies in 213 test result(s)

rng=RNG_stdin64, seed=unknown
length= 1 gigabyte (2^30 bytes), time= 48.5 seconds
  no anomalies in 227 test result(s)
===================================

| RNG_test_096.exe stdin64 -te 1 -tf 2 -multithreaded
>>> МОНОЛИТ RUST:

RNG_test_096.exe using PractRand version 0.96
RNG = RNG_stdin64, seed = unknown
test set = expanded, folding = extra

rng=RNG_stdin64, seed=unknown
length= 32 megabytes (2^25 bytes), time= 3.0 seconds
  no anomalies in 1520 test result(s)

rng=RNG_stdin64, seed=unknown
length= 64 megabytes (2^26 bytes), time= 23.4 seconds
  no anomalies in 1632 test result(s)

rng=RNG_stdin64, seed=unknown
length= 128 megabytes (2^27 bytes), time= 45.8 seconds
  no anomalies in 1741 test result(s)

rng=RNG_stdin64, seed=unknown
length= 256 megabytes (2^28 bytes), time= 73.7 seconds
  no anomalies in 1842 test result(s)

rng=RNG_stdin64, seed=unknown
length= 512 megabytes (2^29 bytes), time= 108 seconds
  no anomalies in 1945 test result(s)

rng=RNG_stdin64, seed=unknown
length= 1 gigabyte (2^30 bytes), time= 161 seconds
  no anomalies in 2053 test result(s)
==================================

| RNG_test_096.exe stdin64 -ttseed -multithreaded
>>> МОНОЛИТ RUST:
RNG_test_096.exe using PractRand version 0.96
warning - -ttseed enabled, seed size autodetected, no seed size metadata available, defaulting to 128 bit seeds
RNG = SeedingTester(RNG_stdin64), seed = 0x6ebc4a03
test set = core, folding = standard (64 bit)

rng=SeedingTester(RNG_stdin64), seed=0x6ebc4a03
length= 64 megabytes (2^23 seeds), time= 3.6 seconds
  no anomalies in 172 test result(s)

rng=SeedingTester(RNG_stdin64), seed=0x6ebc4a03
length= 128 megabytes (2^24 seeds), time= 7.3 seconds
  no anomalies in 185 test result(s)

rng=SeedingTester(RNG_stdin64), seed=0x6ebc4a03
length= 256 megabytes (2^25 seeds), time= 14.9 seconds
  no anomalies in 199 test result(s)

rng=SeedingTester(RNG_stdin64), seed=0x6ebc4a03
length= 512 megabytes (2^26 seeds), time= 28.5 seconds
  no anomalies in 213 test result(s)

rng=SeedingTester(RNG_stdin64), seed=0x6ebc4a03
length= 1 gigabyte (2^27 seeds), time= 55.2 seconds
  no anomalies in 227 test result(s)

 Re: Создал свой алгоритм шифрования
Главная проблема с алгоритмами шифрования не в том, чтобы придумать какой-то алгоритм.
Основная проблема - доказательство криптостойкости и отсутствия уязвимостей.

 Re: Создал свой алгоритм шифрования
andsm_2 в сообщении #1722659 писал(а):
Главная проблема с алгоритмами шифрования не в том, чтобы придумать какой-то алгоритм.
Основная проблема - доказательство криптостойкости и отсутствия уязвимостей.

«Безусловно, экспериментальные данные не заменяют формального доказательства стойкости. Однако представленные результаты линейного и дифференциального анализа (на скрине) подтверждают, что в структуре Nexus-слоя отсутствуют базовые уязвимости, которыми "ломаются" слабые алгоритмы. Моя цель сейчас — подтвердить практическую стойкость на дистанции 8 ТБ PractRand и возможно если терпения хватит до 32тб, что само по себе является серьезным фильтром».

 Re: Создал свой алгоритм шифрования
Тест оптимизированного кода на пайтон, для переноса на RUST

g:\_RUST_PROJECT\crypto_analysis>main.py
=== ПОЛНЫЙ АУДИТ МОНОЛИТА (SUPREME 8-LAYER / ALL FIXED) ===
=== ГЕНЕРАЦИЯ ТЕСТОВЫХ ВЕКТОРОВ ===
Сгенерировано 20 векторов...
Сгенерировано 40 векторов...
Всего сгенерировано: 50 векторов
Векторы сохранены в: test_vectors_50.json
=== ЭТАЛОННЫЙ ТЕСТ ЛАВИНЫ ПО ДАННЫМ (1000000 итераций) ===
Данные: 50000/1000000...
Данные: 1000000/1000000...
ИТОГ: Лавина по данным: 49.951694 %

=== ЭТАЛОННЫЙ ТЕСТ ЛАВИНЫ ПО КЛЮЧУ (1000000 итераций) ===
Ключ: 50000/1000000...
Ключ: 1000000/1000000...
ИТОГ: Лавина по ключу: 50.001824 % за 350.15с
=== УЛЬТРА-БЫСТРЫЙ ДИФФЕРЕНЦИАЛЬНЫЙ ТЕСТ (1,000,000 пар) ===

Тестируем входную разницу типа: 1
Уникальных разностей: 1000000 из 1000000
Макс. повторений: 1
✅ ПРОЙДЕНО: Диффузия идеальна.

Тестируем входную разницу типа: 8
Уникальных разностей: 1000000 из 1000000
Макс. повторений: 1
✅ ПРОЙДЕНО: Диффузия идеальна.

Тестируем входную разницу типа: 255
Уникальных разностей: 1000000 из 1000000
Макс. повторений: 1
✅ ПРОЙДЕНО: Диффузия идеальна.
=== УЛЬТРА-БЫСТРЫЙ ЛИНЕЙНЫЙ КРИПТОАНАЛИЗ (1,000,000) ===
Объем: 1000000 блоков. Порог шума: 0.00100
Раунд 1: In[1, 46] -> Out[29, 49] | Bias: 0.00055
✅ Линейных связей не обнаружено
Раунд 2: In[71, 87] -> Out[95, 1] | Bias: 0.00023
✅ Линейных связей не обнаружено
Раунд 3: In[56, 76] -> Out[45, 97] | Bias: 0.00021
✅ Линейных связей не обнаружено
Раунд 4: In[65, 32] -> Out[61, 84] | Bias: 0.00072
✅ Линейных связей не обнаружено
Раунд 5: In[107, 115] -> Out[7, 90] | Bias: 0.00028
✅ Линейных связей не обнаружено
Тест завершен за 241.18 сек.
=== УЛУЧШЕННЫЙ ТЕСТ НА ПРЕДСКАЗУЕМОСТЬ ===
Уникальность разностей: 100.00%
✅ ПРОЙДЕНО: Разности между блоками хаотичны.

Автокорреляция (лаги 1-5):
Лаг 1: 0.000093
Лаг 2: 0.000021
Лаг 3: 0.000030
Лаг 4: 0.000019
Лаг 5: 0.000003
✅ ПРОЙДЕНО: Корреляция ниже шума (< 0.0001)
=== БРУТФОРС ТЕСТ (24 бит) ===
Цель: найти ключ для CT: 4e6b89aa8b84440b...
Проверено: 499 ключей. Скорость: 75 к/сек
✅ Ключ не найден в первых 500 попытках (это нормально)

=== ТЕСТ УТЕЧКИ (KNOWN PLAINTEXT) ===
Уникальных XOR-масок: 100000 из 100000
✅ Прямых связей между PT и CT не обнаружено
>>> ЗАПУСК МАТРИЧНОГО SAC-ТЕСТА (БИТ-К-БИТУ)
Анализ влияния 1-го байта входа на 15-й байт выхода
Итераций: 100000

-----------------------------------------------------------------------------
Вход B0 \ Выход B15 | b0 | b1 | b2 | b3 | b4 | b5 | b6 | b7 |
-----------------------------------------------------------------------------
In_Bit 0 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 |
In_Bit 1 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 |
In_Bit 2 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 |
In_Bit 3 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 |
In_Bit 4 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 |
In_Bit 5 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 |
In_Bit 6 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 |
In_Bit 7 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 | 0.50 |
-----------------------------------------------------------------------------
Среднее отклонение от 0.5: 0.001253
Время: 65.59 сек.
=== ГЕНЕРАЦИЯ СТАТИСТИЧЕСКИХ ДАННЫХ ===
Генерация 1,000,000 байт для тестов
Сгенерировано: 32,000 / 1,000,000 байт
......................
Сгенерировано: 992,000 / 1,000,000 байт
Статистические данные сохранены в: statistical_data_1000KB.bin
Используйте для тестов PractRand или Dieharder

=== ВСЕ ТЕСТЫ ЗАВЕРШЕНЫ ===

 Re: Создал свой алгоритм шифрования
Изображение
Изображение Изображение

 Re: Создал свой алгоритм шифрования
«Мне 70 лет. Технарь, связист. 20 марта меня посетило озарение: я увидел алгоритм шифрования не как поток цифр, а как многогранный кристалл.
Моей целью было создать систему, настолько структурно целостную, чтобы теоретически если шифр поврежден, по одному зашифрованному слову можно было восстановить весь текст — если есть ключ.
В основе лежит геометрия ромбододекаэдра: 12 граней и 13 вершин. Мой поиск привел к формуле: 12 структурных единиц, помноженные на 22, дали 264 ячейки — это чуть больше классического S-бокса в 256 бит, что создает необходимый "запас прочности" для нелинейных замен.

Ядро S-бокса помещено внутрь большого кристалла, состоящего из слоев этих многогранников. Вся система работает в противофазе: грани и коды при инициализации ключа мгновенно занимают свои места в пространстве, создавая уникальную конфигурацию для каждой сессии.
Интуитивно, через поиск баланса "произведения кол-ва таблиц на 256 минус 1", я пришел к архитектуре из 32 параллельных таблиц по модулю 8191 (число Мерсенна). Чтобы полностью исключить предсказуемость, я использую 64 цикла разогрева на 8 слоях глубокого перемешивания.

И вот что из этогоо вышло.

Результаты испытаний на i7-2700K:

PractRand: Облегченная 5-слойная версия прошла 4 ТБ без аномалий (no anomalies).

Линейный анализ: На глубине 10 млн итераций Bias составил < 0.0001 (ниже порога шума).

Автокорреляция: Лаг 1 на 10 млн блоков — рекордные 0.000026.
Я шел не за учебниками, а за логикой кристалла. Монолит Supreme 32-64-8 готов для дальнейших тестов, которые буду проводить.

Но мысль о самовосстановлении еще осталась! :)
Буд рад услышать любое мнение или совет,

 Re: Создал свой алгоритм шифрования
root@CORE-I7:/mnt/g/_RUST_PROJECT/3_zas_monolith_32_64_8/target/release# ./zas_monolith.exe | dieharder -g 200 -a
>>> МОНОЛИТ RUST SUPREME: 8-LAYER / DYNAMIC RESONANCE
#=============================================================================#
# dieharder version 3.31.1 Copyright 2003 Robert G. Brown #
#=============================================================================#
rng_name |rands/second| Seed |
stdin_input_raw| 3.31e+06 |3601177856|
#=============================================================================#
test_name |ntup| tsamples |psamples| p-value |Assessment
#=============================================================================#
diehard_birthdays| 0| 100| 100|0.83512676| PASSED
diehard_operm5| 0| 1000000| 100|0.74600466| PASSED
diehard_rank_32x32| 0| 40000| 100|0.08845919| PASSED
diehard_rank_6x8| 0| 100000| 100|0.02955140| PASSED
diehard_bitstream| 0| 2097152| 100|0.45030236| PASSED
diehard_opso| 0| 2097152| 100|0.34601680| PASSED
diehard_oqso| 0| 2097152| 100|0.37328045| PASSED
diehard_dna| 0| 2097152| 100|0.34870691| PASSED
diehard_count_1s_str| 0| 256000| 100|0.00416565| WEAK
diehard_count_1s_byt| 0| 256000| 100|0.97884543| PASSED
diehard_parking_lot| 0| 12000| 100|0.96026595| PASSED
diehard_2dsphere| 2| 8000| 100|0.35141392| PASSED
diehard_3dsphere| 3| 4000| 100|0.91218803| PASSED
diehard_squeeze| 0| 100000| 100|0.09296455| PASSED
diehard_sums| 0| 100| 100|0.63398358| PASSED
diehard_runs| 0| 100000| 100|0.50357917| PASSED
diehard_runs| 0| 100000| 100|0.47702825| PASSED
diehard_craps| 0| 200000| 100|0.24492888| PASSED
diehard_craps| 0| 200000| 100|0.01367494| PASSED
marsaglia_tsang_gcd| 0| 10000000| 100|0.75827683| PASSED
marsaglia_tsang_gcd| 0| 10000000| 100|0.77316377| PASSED
sts_monobit| 1| 100000| 100|0.54471791| PASSED
sts_runs| 2| 100000| 100|0.79940546| PASSED
sts_serial| 1| 100000| 100|0.16278352| PASSED
sts_serial| 2| 100000| 100|0.87723862| PASSED
sts_serial| 3| 100000| 100|0.63940462| PASSED
sts_serial| 3| 100000| 100|0.88179798| PASSED
sts_serial| 4| 100000| 100|0.53468296| PASSED
sts_serial| 4| 100000| 100|0.95329569| PASSED
sts_serial| 5| 100000| 100|0.75902305| PASSED
sts_serial| 5| 100000| 100|0.37334116| PASSED
sts_serial| 6| 100000| 100|0.78029396| PASSED
sts_serial| 6| 100000| 100|0.80933131| PASSED
sts_serial| 7| 100000| 100|0.16227810| PASSED
sts_serial| 7| 100000| 100|0.10863427| PASSED
sts_serial| 8| 100000| 100|0.01949762| PASSED
sts_serial| 8| 100000| 100|0.04031489| PASSED
sts_serial| 9| 100000| 100|0.53681379| PASSED
sts_serial| 9| 100000| 100|0.40336538| PASSED
sts_serial| 10| 100000| 100|0.40041647| PASSED
sts_serial| 10| 100000| 100|0.46042687| PASSED
sts_serial| 11| 100000| 100|0.56832890| PASSED
sts_serial| 11| 100000| 100|0.27080796| PASSED
sts_serial| 12| 100000| 100|0.99077039| PASSED
sts_serial| 12| 100000| 100|0.92213177| PASSED
sts_serial| 13| 100000| 100|0.38984818| PASSED
sts_serial| 13| 100000| 100|0.54089841| PASSED
sts_serial| 14| 100000| 100|0.98607739| PASSED
sts_serial| 14| 100000| 100|0.74322881| PASSED
sts_serial| 15| 100000| 100|0.65683575| PASSED
sts_serial| 15| 100000| 100|0.33337938| PASSED
sts_serial| 16| 100000| 100|0.56396550| PASSED
sts_serial| 16| 100000| 100|0.73529997| PASSED
rgb_bitdist| 1| 100000| 100|0.07128057| PASSED
rgb_bitdist| 2| 100000| 100|0.30301326| PASSED
rgb_bitdist| 3| 100000| 100|0.42166078| PASSED
rgb_bitdist| 4| 100000| 100|0.95171901| PASSED
rgb_bitdist| 5| 100000| 100|0.98730372| PASSED
rgb_bitdist| 6| 100000| 100|0.11871282| PASSED
rgb_bitdist| 7| 100000| 100|0.89117226| PASSED
rgb_bitdist| 8| 100000| 100|0.34284146| PASSED
rgb_bitdist| 9| 100000| 100|0.35930458| PASSED
rgb_bitdist| 10| 100000| 100|0.08506454| PASSED
rgb_bitdist| 11| 100000| 100|0.10867586| PASSED
rgb_bitdist| 12| 100000| 100|0.04535370| PASSED
rgb_minimum_distance| 2| 10000| 1000|0.44173343| PASSED
rgb_minimum_distance| 3| 10000| 1000|0.43761358| PASSED
rgb_minimum_distance| 4| 10000| 1000|0.87722401| PASSED
rgb_minimum_distance| 5| 10000| 1000|0.23001292| PASSED
rgb_permutations| 2| 100000| 100|0.79490161| PASSED
rgb_permutations| 3| 100000| 100|0.25433732| PASSED
rgb_permutations| 4| 100000| 100|0.73304371| PASSED
rgb_permutations| 5| 100000| 100|0.97529378| PASSED
rgb_lagged_sum| 0| 1000000| 100|0.05240197| PASSED
rgb_lagged_sum| 1| 1000000| 100|0.76094318| PASSED
rgb_lagged_sum| 2| 1000000| 100|0.60990637| PASSED
rgb_lagged_sum| 3| 1000000| 100|0.27188666| PASSED
rgb_lagged_sum| 4| 1000000| 100|0.88602111| PASSED
rgb_lagged_sum| 5| 1000000| 100|0.57148220| PASSED
rgb_lagged_sum| 6| 1000000| 100|0.64573192| PASSED
rgb_lagged_sum| 7| 1000000| 100|0.56134550| PASSED
rgb_lagged_sum| 8| 1000000| 100|0.18640517| PASSED
rgb_lagged_sum| 9| 1000000| 100|0.62232374| PASSED
rgb_lagged_sum| 10| 1000000| 100|0.12790945| PASSED
rgb_lagged_sum| 11| 1000000| 100|0.77601529| PASSED
rgb_lagged_sum| 12| 1000000| 100|0.93806773| PASSED
rgb_lagged_sum| 13| 1000000| 100|0.91325400| PASSED
rgb_lagged_sum| 14| 1000000| 100|0.23260342| PASSED
rgb_lagged_sum| 15| 1000000| 100|0.18717696| PASSED
rgb_lagged_sum| 16| 1000000| 100|0.51438790| PASSED
rgb_lagged_sum| 17| 1000000| 100|0.57577210| PASSED
rgb_lagged_sum| 18| 1000000| 100|0.91844567| PASSED
rgb_lagged_sum| 19| 1000000| 100|0.89202254| PASSED
rgb_lagged_sum| 20| 1000000| 100|0.56095923| PASSED
rgb_lagged_sum| 21| 1000000| 100|0.14441660| PASSED
rgb_lagged_sum| 22| 1000000| 100|0.73877865| PASSED
rgb_lagged_sum| 23| 1000000| 100|0.71197035| PASSED
rgb_lagged_sum| 24| 1000000| 100|0.86849506| PASSED
rgb_lagged_sum| 25| 1000000| 100|0.98763975| PASSED
rgb_lagged_sum| 26| 1000000| 100|0.94955638| PASSED
rgb_lagged_sum| 27| 1000000| 100|0.57917242| PASSED
rgb_lagged_sum| 28| 1000000| 100|0.94226652| PASSED
rgb_lagged_sum| 29| 1000000| 100|0.50591677| PASSED
rgb_lagged_sum| 30| 1000000| 100|0.01485989| PASSED
rgb_lagged_sum| 31| 1000000| 100|0.85905358| PASSED
rgb_lagged_sum| 32| 1000000| 100|0.55052510| PASSED
rgb_kstest_test| 0| 10000| 1000|0.48727337| PASSED
dab_bytedistrib| 0| 51200000| 1|0.16366571| PASSED
dab_dct| 256| 50000| 1|0.39204593| PASSED
Preparing to run test 207. ntuple = 0
dab_filltree| 32| 15000000| 1|0.75868358| PASSED
dab_filltree| 32| 15000000| 1|0.32631306| PASSED
Preparing to run test 208. ntuple = 0
dab_filltree2| 0| 5000000| 1|0.15328250| PASSED
dab_filltree2| 1| 5000000| 1|0.87763614| PASSED
Preparing to run test 209. ntuple = 0
dab_monobit2| 12| 65000000| 1|0.58689879| PASSED
root@CORE-I7:/mnt/g/_RUST_PROJECT/3_zas_monolith_32_64_8/target/release#

 Re: Создал свой алгоритм шифрования
bob1955 в сообщении #1722660 писал(а):
andsm_2 в сообщении #1722659 писал(а):
Главная проблема с алгоритмами шифрования не в том, чтобы придумать какой-то алгоритм.
Основная проблема - доказательство криптостойкости и отсутствия уязвимостей.

«Безусловно, экспериментальные данные не заменяют формального доказательства стойкости. Однако представленные результаты линейного и дифференциального анализа (на скрине) подтверждают, что в структуре Nexus-слоя отсутствуют базовые уязвимости, которыми "ломаются" слабые алгоритмы. Моя цель сейчас — подтвердить практическую стойкость на дистанции 8 ТБ PractRand и возможно если терпения хватит до 32тб, что само по себе является серьезным фильтром».

PractRand - это не средство криптоанализа, а базовые проверки на равномерность распределения для определения пригодности применения ГПСЧ в методе Монте-Карло. Его легко проходит на 32 ТиБ вот такой вот линейный конгруэнтный генератор с 64-битным состоянием и небольшой постобработкой выхода: https://cas.ee.ic.ac.uk/people/dt10/res ... wc64x.html. Ещё его проходит SplitMix, состояние которого вообще восстанавливается по 1-2 выходам. Порой PractRand проходят совершенно анекдотичные генераторы вроде аддитивных генераторов Фибоначчи с запаздыванием.

О скорости Вашего генератора: он выдаёт 1 Гиб за 40-50 секунд, что раз в 100 медленнее аппаратно ускоренных AES, ChaCha и даже ThreeFish.

 [ Сообщений: 30 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group