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 на современном оборудовании перебирается быстро.