Come creare un nonce sicuro per WSSE

2

Devo connettermi a un'API REST utilizzando un'intestazione WSSE per l'autenticazione. Dal momento che WSSE usa ancora il debole SHA1, credo che un buon nonce sia importante.

Ho trovato implementazioni molto diverse: * link * link * link * link

$nonce = 'd36e316282959a9ed4c89851497a717f';
$nonce = uniqid();
$nonce = base64_encode( hash_hmac('sha512', uniqid(null, true), uniqid(), true) );
$nonce = base64_encode( substr( md5( uniqid( gethostname() . '_', true)), 0, 16));

Quale pensi sarebbe una buona scelta?

    
posta PiTheNumber 01.07.2015 - 09:49
fonte

3 risposte

1

Ho letto Entropia insufficiente per i valori casuali e ora penso non degli esempi forniti forniscono abbastanza entropia. gethostname() non è segreto e uniqid() e anche mt_rand () è un generatore di numeri pseudo-casuali.

Userò

$nonce = base64_encode(bin2hex(openssl_random_pseudo_bytes(16)));
    
risposta data 01.07.2015 - 10:44
fonte
1

Sì, ma non dimenticare di utilizzare una funzione di fallback del tipo:

<?php


    /**
     * Generate a random key using openssl
     * fallback to mcrypt_create_iv.
     *
     * @access  private
     * @param   int
     * @return  string
     */
    private static function _get_random_key($_length = 32) {

        if (function_exists('openssl_random_pseudo_bytes')) {
            $_rnd = openssl_random_pseudo_bytes($_length, $_strong);

            if ($_strong === true) {
                return $_rnd;
            }
        }

        return mcrypt_create_iv($_length, MCRYPT_DEV_URANDOM);

    }
    
risposta data 01.07.2015 - 14:21
fonte
0

La terza riga potrebbe essere una buona scelta, ma devi aggiungere un substr () al valore restituito hash_hmac () considerando che il valore nonce è lungo 16 byte.

php -r "echo base64_encode(substr(hash_hmac('sha512', uniqid(null, true), uniqid(), true), 0, 16));"
    
risposta data 01.07.2015 - 10:02
fonte

Leggi altre domande sui tag