воскресенье, 14 июня 2020 г.

Релиз моего шифратора Cryptos 2.3

Событие настолько радостное, что без юмора никак!

После тяжёлых и продолжительных мучений мне удалось довести до готового к рабочему применению состояния вторую версию шифратора Cryptos. Умри Павел Дуров от зависти! Теперь в любая личная переписка любых двух козлов будет нечитабельна для всех остальных, пока один из этих двух козлов не потеряет ключ.

Релиз на SourceForge: https://sourceforge.net/projects/cryptos-encoder/

Релиз на GitHub: https://github.com/alexwolf1975/CryptosEncoder

Убейтесь головой об стену ФСБ, ЦРУ, Моссад, СБУ и Ми-6! Вы теперь мои шифровки будете до нового Большого Взрыва расшифровывать! Бизнесмены, сценаристы, писатели, ценных идей изобретатели, программисты, кодеры и прочие теперь могут быть уверены, что их информацию никто не расшифрует без их личного ключа.

Принцип работы: многоступенчатое шифрование. Сначала весь объём информации перемешивается по ключу и трём хэширующим последовательность значениям. Потом накладывается битовый шум на всю длину по ключу и с хэширующей длину сообщения функцией. Потом вся последовательность умножается на хэшированное от его длины значение ключа длинной арифметикой, при этом один из множителей является очень большим простым числом. Потом снова накладывается битовый шум, аналогично первому и снова происходит перемешивание, аналогичное первому. А теперь не имея ключа попробуйте расшифровать!

Рассмотрим работу на конкретном примере. Возьмём любой файл с любым содержанием. Чтобы понять было проще, возьмём просто небольшой текст.

Этот файл содержит ужасные оскорбления всех, за которые автора обязательно посадят!
А здесь вообще государственная тайна! Тут — военная! Здесь — номера банковских счетов,
может быть, в швейцарском банке. А это компромат на всё правительство.


Чтобы никто и никогда, кроме владельцев ключа, не расшифровал это послание, мы его зашифруем. Для этого можно воспользоваться генератором SHA и создать ключ из произвольной строки, а можно поступить гораздо интереснее и создать ключ самим шифратором из ваших любимых фраз. Напишем эти фразы и сохраним в Послание.txt.

Сотрудник мой — КОЗЁЛ!!! Ребёнок мой — урод! Жена моя — паскуда и тёща моя — тварь!

Нормальный человек до таких гадостей точно не додумается, поэтому повторить высказывание будет некому. Зашифруем это ключевое послание хоть номером вашего телефона 322323223322, который мы точно помним и поместим в файл Шифр.txt.

>: python3 cryptos2.3.py -e -mpn -c Шифр.txt -b16 -i Послание.txt -o Послание.txt.crp

Открываем файл Послание.txt.crp и превращаем его в шифр просто заменив первые два символа в строке на 0X. Можно и просто приписать спереди 0X, на ваше усмотрение. Получается вот такой ключ в файле Шифр.txt.

0XDB7F2A070217C7318226A88B07822C9056B400DA29A168FC930DCA792F1704
3C33B5B7CE39F06FD9CB7E791725815564C6A2EB04E0D3CAAEFE0143A9FD585C
4C7C4CF927FD60939007BBD196A11AE07CCBDE069AAAF6A6AED503828F9D537E
0CD531FBACA73FE1564DA194D73E827E4ABD5C850A4B88D0BD7999C6D224AC9B
ED3F66D8883B908CE82A94D1F06778DC2F3DC1A3FA520ECA5E609AD4

А теперь кладём в Послание.txt всё, что нам нужно зашифровать и шифруем! Чем длиннее секретный ключ, тем дольше происходит шифрование при ключе запуска -mpn.

>: python3 cryptos2.3.py -e -mpn -c Шифр.txt -b64 -i Послание.txt -o Послание.txt.crp

В итоге получаем файл Послание.txt.crp следующего содержания.

-b64
dUh0aRDpNDQzwfkdMvf8bWkEngvuQAUQmsb2Vw3vaDo5tLANMxYxRgUdQYdRDRrL
jvpjy56zbCd6jc+1tE0ErHfoPqfZUHNh2yEfu18yfGqcFwcFAE6Rhyha8XFoGxiR
tu40tIuysXT2wRisBP6HzTYsPvSE0LiS2XVhqyfG99NdmxONbo8Y7xlr0ytJEC+L
sMVG8MGtKk0V9TX9lGIRHbHwKrTpLBPysGE1eswfYB1O5DKcfqnlonCVYNqi0DeB
IBORlwg3HATgLTefc9xg5OiVJHGVTzcbcbcKUP+QlgLseX3t4xvKr9VMKgV+c6r+
lI+D8UFG3wvg2A22yfv7sAFr6O12MXPm6A6VROGA7KW1FvxFKFG/FulS8SarEkmg
f/PTV1/oKm2ibzkIMifjsblLXMl3pzfXcmor5/XfcrNPDhYi8BZ3W42C1byOfoDH
0i0HOmOk2aBpDKGQBrYpRhnkuty8Z10yBg65cxwvKpdPRnvqN3f7qJfb3TRQHqRb
PSV/q7LvG1oa0WKLdIJ8qSmjKBXh/RTSnGcKv1MVJ9V47lE1NczY1anpN+e9gwqj
zkcZBVs9Ha/shrCcAK6tKpj9CgZjwLBi9Kf+q5pX+p0oK3sCCyi0C8iOUM55lLnx
YiMJliflcmt4F281HV1tkbtGSNUe+X+EvdPg7Vmhy4t0E6b4q2q3NQu0UcP22mly
5hWEomaE6M8TKCHdX7BlqomLLg7WbxBfqIdm5NDFSiUPHivOAtmHNHuIZk5e216W
eclscf4NixvZzQ+SphZjqVWGmDJoVUg=

Можете хоть посылать почтой, хоть выкладывать на сайт в открытый доступ. Расшифровать это без ключа не получится! Только надо не перепутать кодировки windows-1251 или UTF-8 в редакторе и ключи -b16 или -b64, если захочется восстановить ключ по памяти. А когда понадобится расшифровать файл Послание.txt.crp выполняем обратное действие с выводом в Послание.txt.dcd.

>: python3 cryptos2.3.py -d -mpn -c Шифр.txt -b64 -i Послание.txt.crp -o Послание.txt.dcd

Открывая файл Послание.txt.dcd находим в нём сакраментальную фразу.

Этот файл содержит ужасные оскорбления всех, за которые автора обязательно посадят!
А здесь вообще государственная тайна! Тут — военная! Здесь — номера банковских счетов,
может быть, в швейцарском банке. А это компромат на всё правительство.


Но это ещё не всё! Ключом -mpn удобно шифровать маленькие файлы, которые по длине сравнимы с длиной шифра потому, что в алгоритме при этом используется умножение на очень большое простое число. Если надо зашифровать файл в десятки раз превышающий длину ключа, то можно сделать это ещё надёжнее с ключом -cns, который шифрует уже делением на очень большое, получаемое из шифра число, переводя содержимое файла в число с неизвестным никому огромным основанием системы счисления.

>: python3 cryptos2.3.py -e -cns -c Шифр.txt -b64 -i Послание.txt -o Послание.txt.crp

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

>: python3 cryptos2.3.py [-h] [-v] (-e | -d) (-mpn | -cns) -c cipher_file (-b16 | -b64) -i input_file -o output_file

-h, --help: показать помощь по использованию.
-v, --verification: выводить больше информации.
-e, --encryption: шифрование.
-d, --decryption: расшифровка.
-mpn, --mulprimenul: шифрование методом перемешивания, умножения на большое простое число и наложением битового шума. Рекомендуется для использования с малыми объёмами информации, не более, чем в несколько раз превышающих длину ключа.
-cns, --ciphersystem: шифрование переводом в систему счисления с большим основанием на основе шифровального ключа. Рекомендуется для использования с большими объёмами информации, многократно превышающими длину ключа.
-c file, --cipher file: файл с ключом шифра.
-b16, --io_base16: чтение и запись в формате base16. Рекомендуется для генерации больших ключей.
-b64, --io_base64: чтение и запись в формате base64.
-i file, --input file: шифруемый входной файл.
-o file, --output file: зашифрованный выходной файл.

Да пребудет с вами Хаос тайна!