Метод Ruby String.crypt - PullRequest
       1

Метод Ruby String.crypt

4 голосов
/ 05 февраля 2012

Какой алгоритм хеширования использует метод Ruby String.crypt?Достаточно ли это безопасно при использовании вместе с солью для хеширования паролей?

Ответы [ 2 ]

7 голосов
/ 05 февраля 2012

Нет


Используется библиотека C crypt(), основанная на DES.Это быстрый шифр. 1.

Он не идеален для хеширования паролей.Алгоритм является разумным в качестве криптосистемы, но довольно коротким по длине ключа, что является проблемой для паролей.Однако у него есть еще более фундаментальный недостаток: это слишком быстро.

Хорошие функции хеширования паролей имеют несколько странное требование шифрования: им нужны алгоритмы, которые в основном требуют многих сложных операций, а не простоГорстка операций XOR и некоторых операций поиска таблиц, как это делает DES.

Кстати, почти всегда плохая идея создать собственную систему паролей.Лучше использовать существующие пакеты на том основании, что они подлежат проверке.Требуется определенное количество предметной экспертизы, чтобы приготовить хорошую.

И, наконец, вы задали вопрос, о котором наш бесстрашный лидер здесь, на SO, написал!См .: Грязная правда о сетевых паролях.


1.Обратите внимание, что даже если бы он был реализован в Ruby, скорость все равно была бы проблемой: это принципиально быстрый алгоритм, поэтому злоумышленник мог использовать свою собственную реализацию для поиска ключа.

1 голос
/ 25 апреля 2015

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

Вот пример в irb

"special-special-special-special-special-special-special-special-special-special-special-special-special-special-special-special-".crypt("1234567890123456123456789012345612345678901234561234567890123456")
=> "12mJsn4TDq.Gw"
"special-".crypt("1234567890123456123456789012345612345678901234561234567890123456")
=> "12mJsn4TDq.Gw"
"special".crypt("1234567890123456123456789012345612345678901234561234567890123456")
=> "127X5bTSGngyI"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...