Что сказать-то хотели?
1 ноября 2011 г. 18:31 пользователь Sergey Stremidlo <sere...@gmail.com> написал:
Добрый день!
У меня есть вопросик или даже конкретное предложение,
но я пока не освоил как правильно в таких случаях поступать.
#! /bin/bashРасшифровка:
if [ $# -ne 2 ]
then
echo "Требуется указать 2 аргумента."
echo "Первый - имя шифруемого файла (который после шифрации будет удален)."
echo "Второй - имя выходного файла."
exit 1
else
openssl enc -e -aes-256-cbc -in "$1" -out "$2"
rm -f "$1"
exit 0
fi
#! /bin/bash
if [ $# -ne 1 ]
then
echo "Требуется указать аргумент - имя расшифровываемого файла."
exit 1
else
openssl enc -d -aes-256-cbc -in "$1"
exit 0
fi
Что-то вроде этого: https://github.com/a1exsh/pwm/blob/master/pwm ?
Из вкусностей: генерация пароля, копирование в X-клипборд (т.е. можно
вообще ни разу в жизни не видеть конкретных паролей, и из-за плеча
подсмотреть не удастся) :)
Минусы: альфа-версия, но пользовать вполне можно. Сам использую около
месяца уже -- полет нормальный.
Это есть в планах, как и gpg (по желанию, кому что ближе).
И вообще, после сборки -- обработать напильником. :)
Иван Лох <l...@1917.com> writes: On Thu, Nov 03, 2011 at 12:17:49PM +0400, Sergey Stremidlo wrote:>> Кроме этого просмотрел pwm - упор на диалоговый режим, такое не >> надо. Надо проще: >> passman -a -p pass -k key -v "value1 and value2" - добавить >> passman [-r] -p pass -k key - показать > Так делать очень плохо. Например, потому, что этот пароль остается в > истории шелла, или потому, что он виден в многопользовательских > системах через ps. … Попробовал представить себе su(1) или sudo(8) с передачей пароля через командную строку…
// in - входная строка
// out - выходная
// len - размер строки
// pass - фраза для генерации ключей
// mode = AES_ENCRYPT | AES_DECRYPT
int crypt (char *in, char *out, int len, char *pass, int mode)
{
/* Для шифрования AES требуется 128,192,256-битный ключ
для этого возьмем инвертированные байты пароля и повторим
его если он меньше 16 символов и получим 128 бит
*/
AES_KEY aeskey;
char key[16];
char iv[16];
int i,passlen,passi;
passlen = strlen(pass);
for (i=0; i<16; i++)
{
key[i] = ~pass[i % passlen];
iv[i] = -pass[i % passlen];
}
AES_set_encrypt_key(key, 128, &aeskey);
AES_cbc_encrypt(in, out, len, &aeskey, iv, mode);
return 0;
}
> /* Для шифрования AES требуется 128,192,256-битный ключ > для этого возьмем инвертированные байты пароля и повторим > его если он меньше 16 символов и получим 128 бит > */ Во-первых, предполагая, что пароль состоит из кодов ASCII, пространство ключей при таком подходе значительно ограничено (по сравнению с предельными для алгоритмов AES 2¹²⁸ … 2²⁵⁶.) Во-вторых, значимыми оказываются только первые 16 октетов пароля. Общепринятое решение — использовать в качестве ключа криптохэш от пароля. E. g., SHA-256.Там, надо сказать, значимых битов будет не больше, потому что хэширование не добавляет энтропии. Может быть, правда, перебор дороже, но учитывая, что такие пароли и перебирают соответственно - а именно, составляя таблицы этих хэшей заранее... А AES к степени, гм, взбитости энтропии в ключе должен относиться иррелевантно. В смысле, ему должно быть пофиг, открытым текстом там пароль или хэшированный. Хэшируют для того, чтобы всосать побольше бит из длинной пассфразы. Более длинной, чем ключ AES. Вот тут простые средства наложения, типа xor, могут ухудшить показатели (типа, в x xor x меньше энтропии, чем просто в x), а хэш себя ведет хорошо, он для этого разрабатывался.
Цель здравая, хотя что не понятно что будуте делать, если начисто
забыли нужный ключ. Раззве что перебирать похожие варианты, пока не
вспомните.
Простейший вариант -- хранить каждый пароль в отдельном файле. Для
открытия одного пароля вводим мастер-пароль и ключ, по ним строим ключ
для расшифрования и перебираем все файлы, пока не подойдет ключ.
Естественно, нужен такой алгоритм, который четко сможет определить,
что ключ не подходит и не выплюнет вместо расшифрованных данных вам
какой-нибудь мусор. AES-256, насколько я помню, таким свойством _не_
обладает.
Мысль вдогонку: если у вас угнали мастер-пароль и вашу базу, то многие
пароли все равно будут раскрыты, т.к. в качестве ключей наверняка
будут использоваться очевидные значения: например, адрес сайта. Чтобы
этого избежать придется использовать неочевидные, трудно подбираемые
ключи, а их легче забыть. И не проще ли тогда сами ключи использовать
в качестве паролей?
--
Alex
Менеджер паролей на php это было бы сильно... ажно дух захватывает :)
Подсказка: на php и питоне свет также клином не сошелся, хотя выбор
резко сужается.
> проще на телефоне, но нету удобных прог, да и
> жалко пароли с телефоном терять
Ой, а про бекапы вы слышали?
>>> - отсутствие диалогового режима (например чтобы читать пароли из скриптов
>>> на
>>> php)
>>
>> ой, а это-то зачем?
>>
> например чтобы при разработке веб-приложений не писать код для работы с
> юзверями.
> подключился к серверу и из командной строки добавил нужного.
т.е. вы предлагаете на сервер залить всю базу паролей ради одного
единственного, нужного для доступа к другому серверу? или хранить в
базе один пароль. смысла в любом случае маловато
> да и мало ли зачем, это просто пример. Вся сила юникс в возможности
> комбинации программ,
> а диалоговый режим разрушает эту силу, поэтому все что не может работать
> через командную
> строку или stdin не круто.
а, ну да, ну да. а это письмо, отправленное с @gmail.com вы тоже с
командной строки послали? нет, а почему? это ж не круто.
>>> PS: шифрованый ключ и значение отделяются пробелом типа того:
>>> siq5lQf3sc6hmI0eJp1MYg1lupY
>>> AAAAB3NzaC1yc2EAAAABIwAAAQEAnYNEwvrv6CSFM8kMGjuZBM
>>> чтобы можно было в ключе и его значении использовать произвольные
>>> символы,
>>
>> Кроме пробела, да?
>>
> пробел тоже можно, он будет вшифрован в абрукадабру которая не имеет пробела
> ибо представляет собой base64 или аналогичный код (я взял тупо тетрады, т.е.
> двоичное 255 будет представлено в моем случае ff, потому что очень просто
> реализуется).
каюсь, погорячился :)
> я размышляю в рассылку потому что жду что может кто предложит разумный
> вариант,
> а не раскритикует сырые мысли.
вот от этого хотелось бы Вас попросить воздержаться. есть такая
поговорка: дураку полработы не показывают. слишком уж сырые мысли,
чтобы серьезно это все обсуждать.
> Т.е. желающие пользоваться будут вынуждены приучиться создавать нормальные
> контрольные вопросы и к более долгому добыванию своего пароля.
> Кому лень - юзают gpg.
что-то я не вижу каким боком здесь зависимость от того чем идет
шифрование -- gpg, openssl или что-то другое. совершенно не связанные
друг с другом вещи
Все, мне надоело. :-p
По-моему, это первое разумное предложение с Вашей стороны.
Удачи, увидимся когда прога будет готова :)