Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [Web-извращенцам] хеширование (https://forum.antichat.xyz/showthread.php?t=63044)

.:EnoT:. 29.02.2008 05:16

[Web-извращенцам] хеширование
 
В общем темка довольно таки интересная.
Решил в своём движке сделать такой метод хеширования пасов, чтобы даже самый умный ][, имеющий гигабайты словарей до старости брутил хеш))
Предполагается плюс ко всему солько. да и собственно у кого какие мысли по выделению соли? тоже интерсно было бы узнать)

В общем кто на что способен, выкладывайте :)
Маленький пример:

PHP код:

function super_hash($pass)
{
    
$pass hash_hmac('md5'md5(base64_encode(strrev($pass))), 'bugaga');
    return 
$pass;
}
echo 
super_hash(12345); 


bul.666 29.02.2008 06:12

Тема интересна, если не использовать стандартные алгоритмы типа md5 и base64

Hawkins 29.02.2008 06:51

$pwd=substr(sha1(md5($password)), 0, 10);
анбрутабл, никаких солей, места в бд занимает немного =)

Isis 29.02.2008 07:06

Бред....
Способов куча

.:EnoT:. 29.02.2008 07:09

Цитата:

Сообщение от Isis
Бред....
Способов куча

дргого ответа от тебя ожидать было бы глупо)
раз куча способов - выкладывай, буду только рад :)

Macro 29.02.2008 10:22

PHP код:

<? 
function macrohash($string

$b=bin2hex($string); 
$str ''
$c=''


for(
$i=0$i<=strlen($b)-2$i+=2

$sm=0
for(
$j=0$j<=strlen($b-2); $j+=2

$sm=$sm+hexdec(substr($b,$j,2)); 

$asdf2=explode(".",$sm/3.1415927); 
$summab=$asdf2[1];
$x=hexdec(substr($b,$i,2)); 
$c.=dechex($x+intval(strlen($string)*$x)+$summab/$x); 



if (
strlen($c)<=32)  

$d=''

for(
$i=0strlen($d)<=32$i+=2
{
$sm=0
for(
$j=0$j<=strlen($b-2); $j+=2

$sm=$sm+hexdec(substr($b,$j,2)); 

$asdf2=explode(".",$sm/3.1415927); 
$summab=$asdf2[1];
$d.=dechex(intval((hexdec(substr($c,$i,2))+strlen($d))*$summab*$x)); 

$str=substr($d,strlen($d)-32,32); 


elseif(
strlen($c)>32

$w=''
$c=substr($c,strlen($c)-5); 
for(
$i=0strlen($w)<=32$i+=2
{
$sm=0
for(
$j=0$j<=strlen($b-2); $j+=2

$sm=$sm+hexdec(substr($b,$j,2)); 

$asdf2=explode(".",$sm/3.1415927); 
$summab=$asdf2[1];
$w.=dechex(intval((hexdec(substr($c,$i,2))+strlen($w))*$summab*$x)); 

$str=substr($w,0,32); 

return 
$str

?>

Моя функция хэширования без использования стандартных функций

Noiro 29.02.2008 13:50

Обычно использую просто двойной sha1 с салтом и "ключем", например так - ключ хранится в исходниках а не в базе, в роли салта - юзернейм :
PHP код:

$key "SomeReeeeeeeeealllyfriggginloooooooongstrrrrrrrrrrrrrinnnnnnng123432432432";
$hash sha1($key.sha1($pass).$username

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

Grey 29.02.2008 14:10

Цитата:

Сообщение от Hawkins
$pwd=substr(sha1(md5($password)), 0, 10);
анбрутабл, никаких солей, места в бд занимает немного =)

Бред, почему не брутабельно?

PHP код:

<?php
$hash 
'';
$file file('slovar.txt');
for(
$i=0;$i<count($file);$i++)
{
if(
$hash == substr(sha1(md5(trim($file[$i]))), 010))
{
echo(
'pass: '.$file[$i]);
break;
}
}
?>

Да кстати алгоритм очень тупой, я уже раньше писал что в теории обрубание хеша напротив только увеличивает колизию, т.к. одному такому урезаному хешу будут соответсвовать n-ое число не урезанных хешей, т.е. к примеру, если для некоторой функции хеш от 1 = aaabb, а от 111 = aaacc, то получится что урезаному хешу aaa будет соответствовать и 1 и 111.

Или говоря про небрутабельность ты имелл ввиду скорость? Если да, то не думаю что будет медлнее чем тот же мд5 юникс.

$n@ke 29.02.2008 14:13

сгласен с тем что это бессмысленно.

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

blackybr 29.02.2008 14:19

Цитата:

Сообщение от Noiro
Обычно использую просто двойной sha1 с салтом и "ключем", например так - ключ хранится в исходниках а не в базе, в роли салта - юзернейм :
PHP код:

$key "SomeReeeeeeeeealllyfriggginloooooooongstrrrrrrrrrrrrrinnnnnnng123432432432";
$hash sha1($key.sha1($pass).$username

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


с тех пор как паспро стал модульным, это не актуально

Isis 29.02.2008 14:22

PHP код:

<?php
$key 
= (CRYPT_STD_DES == 1) ? substr(sha1('xyu'.md5('pizda'.base64_encode('siski'.strrev($_COOKIE['ip'].crypt('PASSWORD''sugar')).'xek').'gay').'crypt'), 313)    : '';
echo 
$key;
?>

Вот такие вот пароленги у меня храняцо + если скрипт закодирован не скажу как..
Шансов 0

Noiro 29.02.2008 14:35

Цитата:

Сообщение от blackybr
с тех пор как паспро стал модульным, это не актуально

Гммм, действительно, это я не учел. Тем более, если злоумышленник получает доступ к нешифрованным исходникам, то dll'ку с используемым алгоритмом добавить проблемы не составит.
Как вариант, использовать ресурсоёмкие алгоритмы по принципу MD5(UNIX), последовательно хешируя пароль несколько тысяч раз.

Grey 29.02.2008 14:39

Цитата:

Сообщение от Noiro
Гммм, действительно, это я не учел. Тем более, если злоумышленник получает доступ к нешифрованным исходникам, то dll'ку с используемым алгоритмом добавить проблемы не составит.
Как вариант, использовать ресурсоёмкие алгоритмы по принципу MD5(UNIX), последовательно хешируя пароль несколько тысяч раз.

Дурак? Ты не думал о том что в веб-приложениях скорость выполнения сценария критична? Кому нужен двиг в котором что бы просто залогинится нужно ждать минут 10, а если пользователей одновременно 100,200,1000? Не думаю что каждый сервак справится с такой нагрузкой, если вообще справится.

Алгоритм должен быть оптимальным во всех отношениях.

guest3297 29.02.2008 14:47

Умные хакеры всегда, смотрят исходники что как зашифровано и закодированно, так что вы всосете!

nc.STRIEM 29.02.2008 14:54

тема херня, способов масса, и зная алгоритм брутиться все

Noiro 29.02.2008 14:59

Цитата:

Сообщение от Grey
Дурак? Ты не думал о том что в веб-приложениях скорость выполнения сценария критична? Кому нужен двиг в котором что бы просто залогинится нужно ждать минут 10, а если пользователей одновременно 100,200,1000? Не думаю что каждый сервак справится с такой нагрузкой, если вообще справится.

Алгоритм должен быть оптимальным во всех отношениях.

Какие простите 10 минут ?
Извольте проверять ваши предположения перед тем как называть других дураками.
PHP код:

cat md510ktest.php
<?php
$p 
$argv[1];
for(
$i=0;$i<10000;$i++)
{
        
$p md5($p);
}
echo 
$p;
?>
time php md510ktest.php testtt4nuiehgiuheirhieuhrfiuheirfhierfhieuhrfihweifhriewhrfuhewoirfhiuh1
d40cc7fa978e4ee2da5223d99e1bbaaf
real    0m0.109s
user    0m0.080s
sys     0m0.020s
time php md510ktest.php testtt4nuiehgiuheirhieuhrfiuheirfhierfhieuhrfihweifhriewhrfuhewoirfhiuh2
0c03a4f78c217722f8cde1e94fbdc5e8
real    0m0.128s
user    0m0.100s
sys     0m0.020s
time php md510ktest.php testtt4nuiehgiuheirhieuhrfiuheirfhierfhieuhrfihweifhriewhrfuhewoirfhiuh3
6974816458cb1f75e6cdf38989748c22
real    0m0.104s
user    0m0.070s
sys     0m0.020s
time php md510ktest.php testtt4nuiehgiuheirhieuhrfiuheirfhierfhieuhrfihweifhriewhrfuhewoirfhiuh4
6c37418683998e2ec8cc2307eed57ad7
real    0m0.110s
user    0m0.090s
sys     0m0.010s
time php md510ktest.php testtt4nuiehgiuheirhieuhrfiuheirfhierfhieuhrfihweifhriewhrfuhewoirfhiuh5
648fe28643dcfbafc3781dc81ae26f79
real    0m0.138s
user    0m0.080s
sys     0m0.040s

Далее.
Проверка хеша - операция сравнительно редкая, по сути используемая только в первичной аутентификации и регистрации.
Потратить на неё ресурсов в 100-10000 раз больше чем обычно - ИМХО вполне допустимо.

Grey 29.02.2008 15:04

Цитата:

Сообщение от Noiro
Как вариант, использовать ресурсоёмкие алгоритмы по принципу MD5(UNIX), последовательно хешируя пароль несколько тысяч раз.

Цитата:

Сообщение от Noiro
Какие простите 10 минут ?
Код:

$p = md5($p);

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

Noiro 29.02.2008 15:08

Цитата:

Сообщение от Grey
Мд5 Юникс, это не тоже самое что мд5() в пхп, скорость хеширования отличается существенно. Ты написал про MD5(UNIX), а на примере показал мд5(), ты попробуй прогони MD5(UNIX) раз этак тысячу, а потом уже говори что либо.

Цитата:

Как вариант, использовать ресурсоёмкие алгоритмы по принципу MD5(UNIX), последовательно хешируя пароль несколько тысяч раз.
Я НЕ писал о последовательном применении MD5(UNIX), я писал о применении алгоритмов, использующих идеи MD5(UNIX). Разница надеюсь очевидна ?
MD5(UNIX) от обычного md5 в часности и отличается циклическим применением последнего в первом несколько тысяч раз.

Grey 29.02.2008 15:14

Цитата:

Сообщение от Noiro
MD5(UNIX) от обычного md5 в часности и отличается циклическим применением последнего в первом несколько тысяч раз.

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

nc.STRIEM 29.02.2008 15:18

при увеличение количества операция взятия хеша, число возможных коллизий увеличиваеться в геометрической прогрессии

Meanor 29.02.2008 15:37

Криптовальщики...

А объясните мне, чем плох дабл md5 с солью по вкусу? Даже если ][ будет знать соль, то брутить 32 - х символьный хэш он будет ооочень долго... а потом еще раз...


бред :DDDDD

это имело бы место толкьо в случае если бы сам пароль был бы в виде мд5 хэша :d

Scipio 29.02.2008 15:43

мдя... насмешил, ты думай, а потом пиши

Noiro 29.02.2008 15:54

Цитата:

Сообщение от Grey
т.к. такую направленную нагрузку он не выдержит.

Это верно только в случае если логин скрипт окажется самой тяжелой частью системы. Если у меня скрипт отправки сообщения исполняется скажем 3 секунды, а логин 0.5 секунды, то катастрофы от увеличения времени исполнения последнего до 1-2 секунд не произойдет.
Цитата:

при увеличение количества операция взятия хеша, число возможных коллизий увеличиваеться в геометрической прогрессии
Возможно, надо будет почитать про MD5(UNIX) подробней. Существенных проблем с коллизиями там нет.
Цитата:

А объясните мне, чем плох дабл md5 с солью по вкусу? Даже если ][ будет знать соль, то брутить 32 - х символьный хэш он будет ооочень долго... а потом еще раз...
А никто не будет брутить 32х символьный хеш.
Читайте выше - тот-же PasswordPro поддерживает произвольные хэш-модули, т.е. брутить будут сразу md5(md5($pass).$salt) а не последовательно.
Скорость брута по сравнению с обычным md5 будет отличаться незначительно

guest3297 29.02.2008 16:18

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

Цитата:

Возможно, надо будет почитать про MD5(UNIX) подробней. Существенных проблем с коллизиями там нет.
Проблеммы там такие же как и md5, за небольшой разницой в шифре.

}{0TT@БЬ)Ч 29.02.2008 16:43

мдя во дела то какие,ставим пасс потяжелей и усе)))))))))))))))

astrologer 29.02.2008 16:50

Вообще-то, md5(UNIX), насколько мне известно, вовсе не хеширует ничего тысячу раз.
Этот алгоритм только добавляет три рандомных цифры к строке и хеширует один раз. Просто для проверки хеша приходится перебрать 1000 вариантов. Это происходит за доли секунды, зато если пытаться брутить, возникают проблемы.
По-моему, способ вполне имеет право на существование.

bul.666 29.02.2008 16:53

бля md5 и фсе!
А вообще лучше позаботьтесь о защите ваших скриптов, чтобы не думать о криптовании пасса...

А вообще хватит и половины от md5 - 16 символов =\

.:EnoT:. 29.02.2008 18:49

ребят вы чего? тема помоему называется не "А много ли существует методов хеширования?"...так зачем писать типо да таких методов навалом, тема бред, кг\ам и подобное? Если много то выкладывайте, ещё раз повторюсь, мне интересно стало, насколько можно составить сложную функцию хеширования. И это не только из-за движка, просто интересно.....более того исходный код никто не увидит, т.к. не паблик))
пока из всего вышеперечисленного могу отдать должное функции Macro, действительно интересно и необычно :)

Meanor 29.02.2008 18:53

Цитата:

Сообщение от Scipio
мдя... насмешил, ты думай, а потом пиши

Хм... Если не знать исходников, то принцип md5(md5($pass).$salt) будет намного дадежнее простого md5($pass.$salt).

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

Хотя если хэш делается 0.5 - 1 секунду, то брут под него делать уже бессмысленно.

Macro 29.02.2008 19:07

предлагаю сделать небрутабельный алго, чтобы при установке движка админ выбирал комбинацию алгоритмов и солей.

Scipio 29.02.2008 19:18

Онотолей, тогда смысл изобретать велосипед? при таком раскладе и md5(md5($pass).$salt) будет довольно таки секурным, т.к. хенкер незнает алгоритма шифрования, т.е. он врядли догадается что там таким образом пароль хешируется

Noiro 29.02.2008 19:27

Цитата:

Сообщение от Scipio
Онотолей, тогда смысл изобретать велосипед? при таком раскладе и md5(md5($pass).$salt) будет довольно таки секурным, т.к. хенкер незнает алгоритма шифрования, т.е. он врядли догадается что там таким образом пароль хешируется

А что мешает хацкеру проверить популярные способы хеширования ? Если движок поддерживает регистрации - регистрируем аккаунт, пароль нам извествен, в базе видим хеш и скорее всего салт.
Затем тупо проверяем перебором все "стандартные" методы

Scipio 29.02.2008 19:34

дык я не говорю про популярные способы, я просто пример привел, ну сделай ты sha1(md5(pass)) я говорю впринципе... нет смысла "изобретния", т.к. вариантов куча...
еще раз говорю, не стоит путать яичницу с Божьим даром

zl0y 29.02.2008 19:48

двойной,тройной хоть сто тысячный md5() ничего вам не даст,т.к можно всегда будет пробрутить пасс
while i<1000000 do begin
if '5a4948a894009488a8a9048adbd'=md5(md5(i)) then MessageBox(0,'Лох!',0,0);
end;

Meanor 29.02.2008 20:39

Цитата:

Сообщение от zl0y
двойной,тройной хоть сто тысячный md5() ничего вам не даст,т.к можно всегда будет пробрутить пасс
while i<1000000 do begin
if '5a4948a894009488a8a9048adbd'=md5(md5(i)) then MessageBox(0,'Лох!',0,0);
end;


Вы в этом примере рассчитываете на коллизию? 0_о. Тогда искренне желаю вам удачи. (док не забудьте добавить ноликов к условию ; ) )

А стотысячный md5 будет генерироваться довольно долго, поэтому брут для него будет делать только "брут-извращенец".

astrologer 29.02.2008 20:59

Цитата:

Сообщение от zl0y
двойной,тройной хоть сто тысячный md5() ничего вам не даст,т.к можно всегда будет пробрутить пасс
while i<1000000 do begin
if '5a4948a894009488a8a9048adbd'=md5(md5(i)) then MessageBox(0,'Лох!',0,0);
end;

это миллион раз посчитает двойной md5() от i


Время: 17:13