Модуль склепа Python — каково корректное использование солей?

Конечно, возможен многоколонный поиск, но без использования VLOOKUP. Вам нужно будет использовать INDEX и MATCH. Это становится довольно сложным, так как объединяет формулы массива с логической логикой. Вот хорошее объяснение.

https://exceljet.net/formula/index-and-match-with-multiple-criteria

Для вашего примера, предположим, что требуемая компания результата находится в столбце I.

=INDEX($F$4:$F$5,MATCH(1,(D4:D5=I4)*(E4:E5="small"),0))

9
задан twasbrillig 3 November 2014 в 20:37
поделиться

8 ответов

Для использования модуля склепа:

При ГЕНЕРАЦИИ crypted пароля Вы обеспечиваете соль. Это могло бы также быть случайно для увеличения сопротивления принуждению скота, пока это удовлетворяет перечисленным условиям. При ПРОВЕРКЕ пароля необходимо обеспечить значение от getpwname, в случае, если Вы находитесь в системе, которая поддерживает большие соленые размеры и не генерировала его сами.

Замечания общего порядка:

Если этому нечего делать с w/фактическими системными логинами, нет ничего препятствующего тому, чтобы Вы использовали более сильный метод, чем склеп. Вы могли случайным образом генерировать символы N соли в расчете на пользователя, чтобы быть объединенными с паролем пользователя в хеше SHA-1.

string_to_hash = user.stored_salt + entered_password
successful_login = (sha1(string_to_hash) == user.stored_password_hash)

ОБНОВЛЕНИЕ: В то время как это намного более безопасно против таблиц радуги, метод выше все еще имеет криптографические слабые места. Соответствующее приложение алгоритма HMAC может еще далее увеличить Вашу безопасность, но вне моей области экспертных знаний.

4
ответ дан 4 December 2019 в 11:08
поделиться

Вы неправильно понимаете документацию; это говорит, что, так как длина соли может варьироваться в зависимости от базового склепа () реализация, необходимо обеспечить весь crypted пароль как соленое значение при проверке паролей. Таким образом, вместо того, чтобы осуществить первые два символа, которые будут солью, просто встряхните во всем этом.

Ваша идея наличия начальной соли быть основанной на имени пользователя кажется хорошо.

3
ответ дан 4 December 2019 в 11:08
поделиться

Склеп Python () является оберткой для склепа системы () функция. От склепа Linux () страница справочника:

char *crypt(const char *key, const char *salt);

key is a user’s typed password.
salt is a two-character string chosen from the set [a–zA–Z0–9./]. 
This string is used to perturb the algorithm in one of 4096 
different ways.

Акцент находится на "двух символьных строках". Теперь, если Вы смотрите на склеп () поведение в Python:

>>> crypt.crypt("Hello", "World")
'Wo5pEi/H5/mxU'
>>> crypt.crypt("Hello", "ABCDE")
'AB/uOsC7P93EI'

Вы обнаруживаете, что первые два символа результата всегда совпадают с первыми двумя символами исходной соли, которые действительно формируют сами истинную две символьных соли. Таким образом, результат склепа () имеет 2char-соль формы + зашифрованная передача. Следовательно, нет никакого различия в результате вместо того, чтобы передать две символьных соли или исходную много-соль символов при передаче целого зашифрованного пароля.

Примечание: набор [a–zA–Z0–9./] содержит 64 символа, и 64*64=4096. Вот то, как два символа касаются "4 096 различных путей".

7
ответ дан 4 December 2019 в 11:08
поделиться

Вот некоторые общие рекомендации по солению паролей:

  1. В целом соли используются для создания ranbow таблиц слишком дорогостоящими для вычислений. Так, необходимо добавить немного рандомизированной соли ко всем хэшам пароля и просто сохранить ее в простом тексте рядом с хешированным значением пароля.
  2. Используйте HMAC - это - хороший стандарт, и это более безопасно, чем конкатенация пароля и соли.
  3. Используйте SHA1: MD5 повреждается. Никакое преступление не предназначило, если Вы знали это, просто будучи полными.;)

У меня не было бы соли быть функцией пароля. Взломщик должен был бы генерировать таблицу радуги, чтобы иметь базу данных мгновенного поиска паролей, но они должны будут только сделать это однажды. Если бы Вы выбираете случайное 32-разрядное целое число, они должны были бы генерировать 2^32 таблицы, который (в отличие от детерминированной соли) стоит пути, слишком много памяти (и время).

3
ответ дан 4 December 2019 в 11:08
поделиться

Для некоторой добавленной силы можно заставить модуль склепа использовать md5 при помощи соли в формате.

$1$ABCDEFGH$

где ABCDEFGH является Вашей соленой строкой.

>>> p = crypt.crypt('password', '$1$s8Ty3/f$')
>>> p
Out: '$1$s8Ty3/f$0H/M0JswK9pl3X/e.n55G1'
>>> p == crypt.crypt('password', p)
Out: True

(обратите внимание, что это - расширение гну склепа, см. "склеп человека" в системе Linux). MD5 (и теперь даже SHA1) может быть "поврежден", но они все еще относительно хороши для хэшей пароля, и md5 является все еще стандартом для локальных паролей Linux.

2
ответ дан 4 December 2019 в 11:08
поделиться

Пароль, или что-либо произошло из пароля, никогда не должен использоваться в качестве соли. Соль для конкретного пароля должна быть непредсказуемой.

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

1
ответ дан 4 December 2019 в 11:08
поделиться

Смотрите на статью TrueCrypt, объясненную Björn Edström. Это содержит легкий понять объяснение того, как truecrypt работает и простая реализация Python части функциональности truecrypt включая управление паролями.

Он говорит о склепе Python () модуль, не о TrueCrypt в Python

Значение по умолчанию crypt.crypt() в Python 2 не очень безопасно, и статья объясняет, как могли бы работать более безопасные альтернативы.

-2
ответ дан 4 December 2019 в 11:08
поделиться

Используйте PBKDF2, посмотрите, этот комментарий к другому потоку (включает реализацию Python).

1
ответ дан 4 December 2019 в 11:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: