2012-06-06 4 views
1

С момента взлома пароля хеши стал новым сценарием для сценаристов, я подумал о проблеме и придумал новую (?) Идею.Идея для защиты хешированных паролей

  1. магазин проход, как смещение + номер вместо хэш
  2. число является произведением двух больших простых чисел
  3. пароль преобразуется в число, смещение добавляется и что простое используется для отделения номер. Если он делит AND, то делитель является большим из двух простых чисел, пароль правильный.

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

Чтобы сгенерировать функцию f(), чтобы ввести пароль в число паролей (не важно), сгенерируйте два случайных числа, превышающие 2^4096, или сколько их достаточно. Возьмите большее простое число и вычислите смещение prime-passwordnumber = offset. Умножьте простые числа, чтобы получить «число». номер магазина и смещение.

Чтобы проверить. используйте функцию f(), чтобы включить пароль в номер пароля, добавьте смещение, чтобы найти начальное значение. делить число с простым, чтобы получить другое простое число. Убедитесь, что первый штрих был больше из двух. Если это так, пароль был прав.

f() может быть, например, кодировкой пароля utf-8, понимаемой как большое двоичное целое.

+2

Вы получите лучшие ответы в [криптографии] (http://crypto.stackexchange.com/) – Pablo

+0

хорошо. Я отправлю это здесь, если ничего не получу здесь. –

+0

Этого не хватает подробностей. Можете ли вы написать псевдокод для генерации и проверки хэшей? – bmm6o

ответ

0

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

+0

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

+0

Это все прекрасно и денди, но, пожалуйста, ознакомьтесь с ним как с опытом обучения. Вероятно, это не самая лучшая схема - * если * она работает вообще (не могу сказать без лучшего определения). –

0

Чтобы формализовать схему:

Для создания хэш:

  1. Пользователь вводит пароль PW
  2. Преобразование ПВ в байтовый массив ба с функцией кодирования е
  3. Преобразовать ба в большое целое число bn
  4. Найти простые числа p и q, p> q> max (bn, 2^2048)
  5. Магазин n = pq и o = p - bn

Чтобы проверить хэш:

  1. пользователь вводит пароль PW
  2. Преобразование PW в байтовый массив ба с функцией кодирования е
  3. Преобразовать ба до большого целого млрд
  4. Проверка что bn + o делит n

Это безопасный хэш требует, чтобы данные n и o , невозможно вывести pw, то есть нет алгоритма, который дает преимущество перед угадыванием и проверкой.Я верю этому.

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

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

+0

Одним из преимуществ является то, что на пароле действительно нет верхнего размера. В обычном хеше, как только вы соберете 128 бит энтропии для 128-битного хеша, вы начинаете получать столкновений. В этом случае вы можете просто взять более длинный пароль и увеличить размер бит простых чисел, если это необходимо. –

+0

Другим преимуществом (я думаю) является то, что это не может быть радугой, так что бруттинг действительно намазывается. –

+0

Я не думаю, что он более устойчив к радужным таблицам, чем SHA256 с эквивалентной солью (4096 бит). Единственное отличие состоит в том, что энтропия встроена в ваш дизайн и поэтому не является обязательной. – bmm6o

2

Ваша процедура на самом деле ничего не дает вам, используя хеш-функцию. Реверсирование вашей функции затруднено, да, так как она требует факторинга больших чисел, но реверсирование обычных хеш-функций также затруднено. Злоумышленник по-прежнему может использовать ту же процедуру, что и против обычного алгоритма хеширования: использовать атаку грубой силы, проверяя каждый возможный пароль.

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

+0

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

+1

Нет, вы не можете использовать стол радуги, потому что это эквивалент солевого хеша, который вы также не можете использовать для стола радуги. И длина вывода пропорциональна длине пароля - это слабость, а не сила - она ​​позволяет злоумышленнику узнать информацию о пароле. –

+0

Я не думаю, что это фактически даст злоумышленнику любую информацию. Длина вывода не изменится с длиной пароля, если пароль не безумно большой, так что вам нужно увеличить количество простых чисел, и в этом случае вы не знаете, действительно ли простые числа для безопасности или для пароля. –

Смежные вопросы