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: Скопировать в буфер обмена
gethash_d.sh
Bash: Скопировать в буфер обмена
enc.sh
Bash: Скопировать в буфер обмена
dec.sh
Bash: Скопировать в буфер обмена
Взлом?
Я не достаточно хорошо разбираюсь в криптоаналитике, однако я думаю, что может существовать лазейка, которая потенциально может сломать эту идею для шифрования.
Сам сдвиг не весьма безопасен так-как скомпроментировав один хеш, можно получить все данные после этого байта и сбуртфорсить хеши по порядку до этого байта(маловерятно при sha512).
Если использовать шифрование hex, то в идельных условиях нужна хешфункция, которая извлекает строку, где каждый нумерной символ принимает одно из 16ти значений с одинаковой вероятностью.
Вывод:
Сложно сказать, есть ли риск извлекать хеши из хешей или нет, но звучит это не очень )
Пока-что я буду продолжать это использовать
Я использую это шифрование исключительно для хранения ключей. Оно надёжно, однако очень медленно.
Его суть в том, чтобы воспроизвести в любых условиях (написать протокол из головы).
Как работает?
Из входного пароля пользоватля извлечён хеш, далее первый байт данных шифрует сдвигом используя для этого первый байт самого хеша, далее из оставшихся байтов получаем еще один хеш и повторяем до тех пор, пока все данные не будут зашифрованны.
Пример.
Пароль: 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ти значений с одинаковой вероятностью.
Вывод:
Сложно сказать, есть ли риск извлекать хеши из хешей или нет, но звучит это не очень )
Пока-что я буду продолжать это использовать