News:

Никогда не спорьте с дураком - люди могут не заметить между вами разницы.

Main Menu

Наверное изобрёл велосипед, хотел бы оценить безопасность

Started by Alex-70, 19 April 2020, 11:05

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Alex-70

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

Решил написать скрипт для генерации ключа по секретной фразе и логину (индексу ключа)

#!/bin/sh -u

echo -n "Root-Key "
stty -echo
read Root
stty echo
echo

# Проверка корректности главной фразы
Test=$( echo -n "***$Root" | md5sum | ( read a b ; echo $a ) ) # *** - Заменить на случайный набор ~40 символов
Test=${Test%????????????????????}
[ $Test != 29cc3748f7ea ] && echo ERROR $Test && exit 1 # 29cc3748f7ea - Заменить на вывод после ERROR

# Собственно генерация ключа
echo -n "$1$Root" | md5sum | ( read a b ; echo $a )

В надёжности генерации сомнений мало, т.к. это ровно то, что используется в файлах паролей пользователей.
Есть сомнения в тестировании.

Уваров А.С.

Вот это, на мой взгляд, лишнее:

Quote# Проверка корректности главной фразы

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

Alex-70

Да вот, к сожалению, без этого не обойтись. Эту методику можно использовать для генерации приватных ключей. Если так делать ключи для Биткоина, то опечатка обойдётся весьма дорого.

Может следует сделать что-то типа 1000-кратного хеширования?

Alex-70

Вот так, например
#!/bin/sh -u

echo -n "Root-Key "
stty -echo
read Root
stty echo
echo

# Проверка корректности главной фразы
i=0
Test=
while [ $i -lt 1000 ]
do
  Test=$( echo -n "***${Root}${Test}${i}" | md5sum | ( read a b ; echo $a ) ) # *** - Заменить на случайный набор ~40 символов
  i=$((i+1))
done
Test=${Test%????????????????????}
[ $Test != 7cba35cfcec6 ] && echo ERROR $Test && exit 1 # 7cba35cfcec6 - Заменить на вывод после ERROR

# Собственно генерация ключа
echo -n "$1$Root" | md5sum | ( read a b ; echo $a )

Правда, 1000 мне кажется паранойя ;-)

Уваров А.С.

Quote from: Alex-70 on 19 April 2020, 19:59Да вот, к сожалению, без этого не обойтись. Эту методику можно использовать для генерации приватных ключей. Если так делать ключи для Биткоина, то опечатка обойдётся весьма дорого.


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