2012-06-18 8 views
5

Estoy intentando crear una biblioteca con estado para que OpenID se use como un complemento de Wordpress, me encuentro con un problema cuando intento calcular el valor secreto usando el función openssl openssl_dh_compute_key. Curioso si alguien tiene algunos pasos que podría intentar, sugerencias, etc ...Problemas con la computación secreto compartido de la clave Diffie Hellman para OpenID

Gracias!

Las constantes ...

const DH_DEFAULT_PRIME = "dcf93a0b883972ec0e19989ac5a2ce310e1d37717e8d9571bb7623731866e61ef75a2e27898b057f9891c2e27a639c3f29b60814581cd3b2ca3986d2683705577d45c2e7e52dc81c7a171876e5cea74b1448bfdfaf18828efd2519f14e45e3826634af1949e5b535cc829a483b8a76223e5d490a257f05bdff16f2fb22c583ab"; 
const DH_DEFAULT_GENERATOR = '02'; 

la creación de mi clave Diffie-Hellman

private function createDHKey($priv_key = false) { 
    if (!$priv_key) { 
     $details = array(); 
     $details['p'] = pack('H*', self::DH_DEFAULT_PRIME); 
     $details['g'] = pack('H*', self::DH_DEFAULT_GENERATOR); 
     $this->dh = openssl_pkey_new(array(
      'dh' => $details, 
     )); 
     if ($this->dh) { 
      return true; 
     } else { 
      error('OpenSSL failed to export your private key, ensure you have a valid configuration file, and PHP can find it.'); 
     } 
    } else { 
     $this->dh = openssl_pkey_get_private($priv_key); 
     return false; 
    } 
} 

First run of function

Recalling exported private key

El Ag == en el botón de ambas imágenes es el valor codificado en base64 de dh ['g'].

A continuación, guardo la clave privada generada en una base de datos para que persista, lo que me permite volver a crear la clave a través de la función openssl_pkey_get_private.

Sin embargo, tomando la volvió openid.dh_server_public de la solicitud de asociación, y que pasa, y mi clave de re-crea a partir de los resultados de clave privada en un falso por

var_dump(openssl_dh_compute_key($this->op_pubkey, $this->dh)); 
+0

¡Realmente desearía que esta función estuviera mejor documentada! : \ –

+0

Ahora es ... ver http://php.net/manual/en/function.openssl-dh-compute-key.php – velcrow

Respuesta

4

Muy bien, así que saben lo que decir sobre volver a un problema más adelante. Todos los de mi código de "personal" estaba bien, que era una mala interpretación de lo que el openssl_dh_compute_key estaba esperando para la clave pública, y cómo se pasa la clave pública del OP ...

dh_server_public 
    Value: base64(btwoc(g^xb mod p)) 
    Description: The OP's Diffie-Hellman public key. 

Por lo tanto, cuando vuelva a leer que por cuarta o quinta vez finalmente hizo clic.

"Hey, si la llave está en forma binaria, apuesto a la función OpenSSL binario está a la espera .."

Por lo tanto, el paso que falta adicional terminó siendo decodificación base 64 ...

openssl_dh_compute_key(base64_decode($this->op_pubkey), $this->dh); 
Cuestiones relacionadas