Skip to forum content

You are not logged in. Please login or register.


forums.pvpgn.pro → [RU] Tech Support → Хеш паролей и их совместимость

Pages 1

You must login or register to post a reply

RSS topic feed

Posts: 14

1

Topic: Хеш паролей и их совместимость

Всем привет. Нужна ваша помощь.  Версия сервера - 1.99 про.

Имеется функция хеширования пароля на пшп( скачал у вас: https://sourceforge.net/projects/pvpgn- … -hash/0.3/ )

function str2blks_pvpgn($str) {
    $nblk = ((strlen($str) + 8) >> 6) + 1;
    
    for($i=0; $i < $nblk * 16; $i++) $blks[$i] = 0;
    for($i=0; $i < strlen($str); $i++) {
        $blks[$i >> 2] |= ord(substr($str, $i, 1)) << ( ($i % 4) * 8);
    }
    return $blks;
}
function safe_add($x, $y) {
    $lsw = ($x & 0xFFFF) + ($y & 0xFFFF);
    $msw = ($x >> 16) + ($y >> 16) + ($lsw >> 16);
    return ($msw << 16) | ($lsw & 0xFFFF);
}

function safe_not( $num ) {
    $lsw = (~($num & 0xFFFF)) & 0xFFFF;
    $msw = (~($num >> 16)) & 0xFFFF;
    return ($msw << 16)  | $lsw;
}

function safe_rol( $num, $amt ) {
        $leftmask = 0xffff | (0xffff << 16);
        $leftmask <<= 32 - $amt;
        $rightmask = 0xffff | (0xffff << 16);
        $rightmask <<= $amt;
        $rightmask = safe_not($rightmask);

        $remains = $num & $leftmask;
        $remains >>= 32 - $amt;
        $remains &= $rightmask;

        $res = ($num << $amt) | $remains;

        return $res;
}

function ft($t, $b, $c, $d) {
    if($t < 20) return ($b & $c) | ((safe_not($b)) & $d);
    if($t < 40) return $d ^ $c ^ $b;
    if($t < 60) return ($c & $b) | ($d & $c) | ($d & $b);
    return $d ^ $c ^ $b;
}

function kt($t) {
    if ($t < 20) {
        return  0x5a82 << 16 | 0x7999;
    } else if ($t < 40) {
        return  0x6ed9 << 16 | 0xeba1;
    } else if ($t < 60) {
        return  0x8f1b << 16 | 0xbcdc;
    } else {
        return  0xca62 << 16 | 0xc1d6;
    }
}
function pvpgn_hash($str1) {
    $str = strtolower($str1);
    $x = str2blks_pvpgn($str);
        
    $a =  0x6745 << 16 | 0x2301;
    $b =  0xefcd << 16 | 0xab89;
    $c =  0x98ba << 16 | 0xdcfe;
    $d =  0x1032 << 16 | 0x5476;
    $e =  0xc3d2 << 16 | 0xe1f0;    
    
    for($i = 0; $i < sizeof($x); $i += 16) {
        $olda = $a;
        $oldb = $b;
        $oldc = $c;
        $oldd = $d;
        $olde = $e;
        
        for($j = 0; $j < 16; $j++) {        
            $w[$j] = $x[$i+$j];
        }

        for($j = 0; $j < 64; $j++) {        
            $ww = $w[$j] ^ $w[$j+8] ^ $w[$j+2] ^ $w[$j+13];
            $w[$j+16] = 1 << ($ww%32);
        }
        
        for($j = 0; $j < 80; $j++) {
            if ($j<20)
            {
                $t = safe_add(safe_add(safe_rol($a, 5), ft($j, $b, $c, $d)), safe_add(safe_add($e, $w[$j]), kt($j)));
            }
            else
            {
                $t = safe_add(safe_add(safe_rol($t, 5), ft($j, $b, $c, $d)), safe_add(safe_add($e, $w[$j]), kt($j)));
            }
            $e = $d;
            $d = $c;
            $c = safe_rol($b, 30);
            $b = $a;
             $a = $t;
        }
        $a = safe_add($t, $olda);
        $b = safe_add($b, $oldb);
        $c = safe_add($c, $oldc);
        $d = safe_add($d, $oldd);
        $e = safe_add($e, $olde);
    }
    return sprintf("%08x%08x%08x%08x%08x",$a,$b,$c,$d,$e);
}

Вопрос: она совместима с функцией в исходнике сервера ?  Т.е при прогоне пароля "123" через нее, я зайду на сервер введя этот пароль? Если нет, поделитесь пожалуйста той, что совместима.

п.с Подскажите, что нужно убрать на стороне сервера, что бы отключить функции перевода вернего регистра в нижний. В противном случае, человек при регистрации указывает пароль "teSt", а входит под "test". Для повышения безопасности, необходимо сделать пароли чувствительные к регистру.

Харпи, или те кто шарят, подскажите.

2

Re: Хеш паролей и их совместимость

Актуальный класс PHP для хеширования на гитхабе, там обновленная версия
https://github.com/pvpgn/pvpgn-hash
Та что на sourceforge тоже будет работать, но там юникод не поддерживается.

Пароль и логин регистронезависимы by design. Такова особенность старых паролей battle.net, которая реализована в игровых клиентах, поэтому это невозможно изменить.

Do not ask for support in PM.

3

Re: Хеш паролей и их совместимость

Uint32 wrote:

Всем привет. Нужна ваша помощь.  Версия сервера - 1.99 про.

Имеется функция хеширования пароля на пшп( скачал у вас: https://sourceforge.net/projects/pvpgn- … -hash/0.3/ )

function str2blks_pvpgn($str) {
    $nblk = ((strlen($str) + 8) >> 6) + 1;
    
    for($i=0; $i < $nblk * 16; $i++) $blks[$i] = 0;
    for($i=0; $i < strlen($str); $i++) {
        $blks[$i >> 2] |= ord(substr($str, $i, 1)) << ( ($i % 4) * 8);
    }
    return $blks;
}
function safe_add($x, $y) {
    $lsw = ($x & 0xFFFF) + ($y & 0xFFFF);
    $msw = ($x >> 16) + ($y >> 16) + ($lsw >> 16);
    return ($msw << 16) | ($lsw & 0xFFFF);
}

function safe_not( $num ) {
    $lsw = (~($num & 0xFFFF)) & 0xFFFF;
    $msw = (~($num >> 16)) & 0xFFFF;
    return ($msw << 16)  | $lsw;
}

function safe_rol( $num, $amt ) {
        $leftmask = 0xffff | (0xffff << 16);
        $leftmask <<= 32 - $amt;
        $rightmask = 0xffff | (0xffff << 16);
        $rightmask <<= $amt;
        $rightmask = safe_not($rightmask);

        $remains = $num & $leftmask;
        $remains >>= 32 - $amt;
        $remains &= $rightmask;

        $res = ($num << $amt) | $remains;

        return $res;
}

function ft($t, $b, $c, $d) {
    if($t < 20) return ($b & $c) | ((safe_not($b)) & $d);
    if($t < 40) return $d ^ $c ^ $b;
    if($t < 60) return ($c & $b) | ($d & $c) | ($d & $b);
    return $d ^ $c ^ $b;
}

function kt($t) {
    if ($t < 20) {
        return  0x5a82 << 16 | 0x7999;
    } else if ($t < 40) {
        return  0x6ed9 << 16 | 0xeba1;
    } else if ($t < 60) {
        return  0x8f1b << 16 | 0xbcdc;
    } else {
        return  0xca62 << 16 | 0xc1d6;
    }
}
function pvpgn_hash($str1) {
    $str = strtolower($str1);
    $x = str2blks_pvpgn($str);
        
    $a =  0x6745 << 16 | 0x2301;
    $b =  0xefcd << 16 | 0xab89;
    $c =  0x98ba << 16 | 0xdcfe;
    $d =  0x1032 << 16 | 0x5476;
    $e =  0xc3d2 << 16 | 0xe1f0;    
    
    for($i = 0; $i < sizeof($x); $i += 16) {
        $olda = $a;
        $oldb = $b;
        $oldc = $c;
        $oldd = $d;
        $olde = $e;
        
        for($j = 0; $j < 16; $j++) {        
            $w[$j] = $x[$i+$j];
        }

        for($j = 0; $j < 64; $j++) {        
            $ww = $w[$j] ^ $w[$j+8] ^ $w[$j+2] ^ $w[$j+13];
            $w[$j+16] = 1 << ($ww%32);
        }
        
        for($j = 0; $j < 80; $j++) {
            if ($j<20)
            {
                $t = safe_add(safe_add(safe_rol($a, 5), ft($j, $b, $c, $d)), safe_add(safe_add($e, $w[$j]), kt($j)));
            }
            else
            {
                $t = safe_add(safe_add(safe_rol($t, 5), ft($j, $b, $c, $d)), safe_add(safe_add($e, $w[$j]), kt($j)));
            }
            $e = $d;
            $d = $c;
            $c = safe_rol($b, 30);
            $b = $a;
             $a = $t;
        }
        $a = safe_add($t, $olda);
        $b = safe_add($b, $oldb);
        $c = safe_add($c, $oldc);
        $d = safe_add($d, $oldd);
        $e = safe_add($e, $olde);
    }
    return sprintf("%08x%08x%08x%08x%08x",$a,$b,$c,$d,$e);
}

Вопрос: она совместима с функцией в исходнике сервера ?  Т.е при прогоне пароля "123" через нее, я зайду на сервер введя этот пароль? Если нет, поделитесь пожалуйста той, что совместима.

п.с Подскажите, что нужно убрать на стороне сервера, что бы отключить функции перевода вернего регистра в нижний. В противном случае, человек при регистрации указывает пароль "teSt", а входит под "test". Для повышения безопасности, необходимо сделать пароли чувствительные к регистру.

Харпи, или те кто шарят, подскажите.

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

4

Re: Хеш паролей и их совместимость

HarpyWar wrote:

Пароль и логин регистронезависимы by design. Такова особенность старых паролей battle.net, которая реализована в игровых клиентах, поэтому это невозможно изменить.

Нет ничего невозможного smile

5

Re: Хеш паролей и их совместимость

HarpyWar wrote:

Пароль и логин регистронезависимы by design. Такова особенность старых паролей battle.net, которая реализована в игровых клиентах, поэтому это невозможно изменить.

Так если в коде, в исходнике bnpass.cpp, убрать функцию strtolower, тогда он(сервер) не будет авторизововать пользователя при наборе кейса отличного от первоначального ? Мне тоже не верится, что нельзя ничего придумать. Есть исходники на руках, а значит должен быть способ, хотя бы костыльный.

п.с Еще, как выяснилось, у одного и того же пароля всегда будет одинаковый хеш( если 5 разных пользователей поставят парол ьпри регистрации "123", хеш у всех пятерых будет один в один). Таким образом, подобрать пароли будет очень легко. Сервер нуждается в замене шифра паролей. Харпи, а ты за отдельную плату не берешься помогать никому? smile

6

Re: Хеш паролей и их совместимость

Uint32 wrote:
HarpyWar wrote:

Пароль и логин регистронезависимы by design. Такова особенность старых паролей battle.net, которая реализована в игровых клиентах, поэтому это невозможно изменить.

Так если в коде, в исходнике bnpass.cpp, убрать функцию strtolower, тогда он(сервер) не будет авторизововать пользователя при наборе кейса отличного от первоначального ? Мне тоже не верится, что нельзя ничего придумать. Есть исходники на руках, а значит должен быть способ, хотя бы костыльный.

п.с Еще, как выяснилось, у одного и того же пароля всегда будет одинаковый хеш( если 5 разных пользователей поставят парол ьпри регистрации "123", хеш у всех пятерых будет один в один). Таким образом, подобрать пароли будет очень легко. Сервер нуждается в замене шифра паролей. Харпи, а ты за отдельную плату не берешься помогать никому? smile

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

7

Re: Хеш паролей и их совместимость

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

8

Re: Хеш паролей и их совместимость

Менять пароль лучше всего через Telnet подключение отправкой команды /chpass. Чтобы разрешить Telnet, у аккаунта бота должно быть установлено поле auth_botlogin = true
Пример на PHP: pvpgn.harpywar.com/pvpgn_bot.class.txt

Do not ask for support in PM.

9 (edited by Uint32 28.02.2020 21:45)

Re: Хеш паролей и их совместимость

HarpyWar wrote:

Менять пароль лучше всего через Telnet подключение отправкой команды /chpass. Чтобы разрешить Telnet, у аккаунта бота должно быть установлено поле auth_botlogin = true
Пример на PHP: pvpgn.harpywar.com/pvpgn_bot.class.txt

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

10

Re: Хеш паролей и их совместимость

Uint32 wrote:

как долго нужно ждать, когда сервер синхронизируется с базой

userflush
https://forums.pvpgn.pro/viewtopic.php?pid=8205#p8205

Добавлено: 28.02.2020 17:53

https://forums.pvpgn.pro/viewtopic.php?id=631

Do not ask for support in PM.

11

Re: Хеш паролей и их совместимость

Uint32 wrote:
HarpyWar wrote:

Пароль и логин регистронезависимы by design. Такова особенность старых паролей battle.net, которая реализована в игровых клиентах, поэтому это невозможно изменить.

Так если в коде, в исходнике bnpass.cpp, убрать функцию strtolower, тогда он(сервер) не будет авторизововать пользователя при наборе кейса отличного от первоначального ? Мне тоже не верится, что нельзя ничего придумать. Есть исходники на руках, а значит должен быть способ, хотя бы костыльный.

п.с Еще, как выяснилось, у одного и того же пароля всегда будет одинаковый хеш( если 5 разных пользователей поставят парол ьпри регистрации "123", хеш у всех пятерых будет один в один). Таким образом, подобрать пароли будет очень легко. Сервер нуждается в замене шифра паролей. Харпи, а ты за отдельную плату не берешься помогать никому? smile

Что по этому скажешь Харпи?)

12

Re: Хеш паролей и их совместимость

Uint32 wrote:

Так если в коде, в исходнике bnpass.cpp, убрать функцию strtolower, тогда он(сервер) не будет авторизововать пользователя при наборе кейса отличного от первоначального ?

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

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

Do not ask for support in PM.

13

Re: Хеш паролей и их совместимость

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

14

Re: Хеш паролей и их совместимость

Uint32 wrote:

Это понятно, а то как я предложил, будет работать?

На вебморде будет, в играх не будет.

Do not ask for support in PM.

Posts: 14

Pages 1

You must login or register to post a reply

Who now at forum

Currently view post: 0 guests, 0 registered users

forums.pvpgn.pro → [RU] Tech Support → Хеш паролей и их совместимость