Шифрование для ленивых

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Зачем?
Я использую это шифрование исключительно для хранения ключей. Оно надёжно, однако очень медленно.
Его суть в том, чтобы воспроизвести в любых условиях (написать протокол из головы).

Как работает?
Из входного пароля пользоватля извлечён хеш, далее первый байт данных шифрует сдвигом используя для этого первый байт самого хеша, далее из оставшихся байтов получаем еще один хеш и повторяем до тех пор, пока все данные не будут зашифрованны.

Пример.
Пароль: 0
Вход: 000000000000000000000000
--> GAYDAMBQGAYDAMBQGAYDAMBQGAYDAMBQGAYDAMAK(base32)
--> 47415944414d425147415944414d4251*47415944414d414b0a (hex)
Выход: 780f4755cb2dcdce79419ef245cbb40608b31b6ba660b8fabde8
По такой логике зашифрованные данные занимают такое-же количество места (простите за base32, он нужен для моих нужд)

Прикрепляю модульный код.
ЭТОТ КОД ЛИШЬ ОБРАЗЕЦ, ПИШИТЕ ДЛЯ НЕГО СВОЮ ИМПЛЕМЕНТАЦИЮ

Encrypt: bash gethash.sh; bash enc.sh
Decrypt: bash gethash_d.sh; bash dec.sh

gethash.sh
Bash: Скопировать в буфер обмена
Код:
rm b32.txt
rm lhash.txt
rm hex.txt

sec=""
b32=$(cat 1.txt | base32)
echo "$b32" > b32.txt
hex=$(od -An -tx1 b32.txt | tr -d ' \n')
echo $hex > hex.txt
lnth=$(wc -m < hex.txt)
for ((i=1; i<=lnth; i++)); do
hash=$(echo -n "$sec" | sha512sum | awk '{print $1}')
fir=${hash:0:1}
sec=${hash:1:128}
echo -n $fir >> lhash.txt
echo "$hash"
done

gethash_d.sh
Bash: Скопировать в буфер обмена
Код:
rm b32.txt
rm lhash.txt
rm hex.txt

sec=""
lnth=$(wc -m < enc.txt)
for ((i=1; i<=lnth; i++)); do
hash=$(echo -n "$sec" | sha512sum | awk '{print $1}')
fir=${hash:0:1}
sec=${hash:1:128}
echo -n $fir >> lhash.txt
echo "$hash"
done

enc.sh
Bash: Скопировать в буфер обмена
Код:
#!/bin/bash

hex_file="hex.txt"
lhash_file="lhash.txt"
while IFS= read -r -n1 hex_char && IFS= read -r -n1 lhash_char <&3; do
    result_hex=$((0x$hex_char + 0x$lhash_char))
    if [ $result_hex -gt 15 ]; then
        result_hex=$((result_hex - 16))
    fi
    printf "%x" $result_hex
done < "$hex_file" 3< "$lhash_file" > enc.txt

dec.sh
Bash: Скопировать в буфер обмена
Код:
#!/bin/bash
enc_file="enc.txt"
lhash_file="lhash.txt"
result=""
while IFS= read -r -n1 enc_char && IFS= read -r -n1 lhash_char <&3; do
    result_hex=$((0x$enc_char - 0x$lhash_char))
    if [ $result_hex -lt 0 ]; then
        result_hex=$((result_hex + 16))
    fi
    result="$result$(printf "%x" $result_hex)"
done < "$enc_file" 3< "$lhash_file"
result=$(echo "$result" | xxd -r -p | base32 -d > dec.txt)


Взлом?
Я не достаточно хорошо разбираюсь в криптоаналитике, однако я думаю, что может существовать лазейка, которая потенциально может сломать эту идею для шифрования.
Сам сдвиг не весьма безопасен так-как скомпроментировав один хеш, можно получить все данные после этого байта и сбуртфорсить хеши по порядку до этого байта(маловерятно при sha512).
Если использовать шифрование hex, то в идельных условиях нужна хешфункция, которая извлекает строку, где каждый нумерной символ принимает одно из 16ти значений с одинаковой вероятностью.

Вывод:
Сложно сказать, есть ли риск извлекать хеши из хешей или нет, но звучит это не очень )
Пока-что я буду продолжать это использовать
 
Сверху Снизу