Cómo crear una fuente segura para WSSE

2

Necesito conectarme a una API REST usando un encabezado WSSE para la autenticación. Dado que WSSE todavía usa el SHA1 débil, creo que una buena fuente es importante.

Encontré implementaciones muy diferentes: * enlace * enlace * enlace * enlace

$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));

¿Qué crees que sería una buena opción?

    
pregunta PiTheNumber 01.07.2015 - 09:49
fuente

3 respuestas

1

Leí Entropy insuficiente para valores aleatorios y ahora pienso Ninguno de los ejemplos dados proporciona suficiente entropía. gethostname() no es secreto y uniqid() e incluso mt_rand () es un generador de números pseudoaleatorios.

Voy a utilizar

$nonce = base64_encode(bin2hex(openssl_random_pseudo_bytes(16)));
    
respondido por el PiTheNumber 01.07.2015 - 10:44
fuente
1

Sí, pero no olvides usar una función de respaldo como esta:

<?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);

    }
    
respondido por el eurialo 01.07.2015 - 14:21
fuente
0

La tercera línea podría ser una buena opción, pero debe agregar un substr () al valor devuelto de hash_hmac () considerando que el valor de nonce es de 16 bytes.

php -r "echo base64_encode(substr(hash_hmac('sha512', uniqid(null, true), uniqid(), true), 0, 16));"
    
respondido por el eurialo 01.07.2015 - 10:02
fuente

Lea otras preguntas en las etiquetas