sierra shimo secreto remoto mac l2tp high full configurar compartido cryptography cryptoapi diffie-hellman

cryptography - shimo - vpn pptp mac



Estoy usando Wincrypt para Diffie-Hellman. ¿Puedo exportar el secreto compartido en texto plano? (1)

Esto se parece a lo que necesita ... desde: http://msdn.microsoft.com/en-us/library/aa381969(VS.85).aspx

Para importar una clave pública Diffie-Hellman y calcular la clave de sesión secreta

  1. Llame a la función CryptAcquireContext para obtener un identificador para el proveedor criptográfico Diffie-Hellman de Microsoft.
  2. Cree una clave Diffie-Hellman llamando a la función CryptGenKey para crear una nueva clave, o llamando a la función CryptGetUserKey para recuperar una clave existente.
  3. Para importar la clave pública Diffie-Hellman al CSP, llame a la función CryptImportKey , pasando un puntero a la clave pública BLOB en el parámetro pbData , la longitud del BLOB en el parámetro dwDataLen y el identificador a la clave Diffie-Hellman en el parámetro hPubKey . Esto hace que se realice el cálculo, (Y^X) mod P , creando así la clave secreta compartida y completando el intercambio de claves. Esta llamada a función devuelve un identificador a la nueva clave de sesión secreta en el parámetro hKey .
  4. En este punto, el Diffie-Hellman importado es del tipo CALG_AGREEDKEY_ANY . Antes de poder utilizar la clave, debe convertirse en un tipo de clave de sesión. Esto se logra llamando a la función CryptSetKeyParam con dwParam establecido en KP_ALGID y con pbData establecido en un puntero a un valor ALG_ID que representa una clave de sesión, como CALG_RC4 . La clave debe convertirse antes de usar la clave compartida en la función CryptEncrypt o CryptDecrypt . Las llamadas realizadas a cualquiera de estas funciones antes de convertir el tipo de clave fallarán.
  5. La clave de sesión secreta ahora está lista para ser utilizada para cifrado o descifrado.
  6. Cuando la clave ya no se necesita, destruya el identificador de la tecla llamando a la función CryptDestroyKey .

OK-- gracias a Mike , pude hacer que Wincrypt generara un par de llaves Diffie-Hellman. Me di cuenta de exportar la clave pública y cómo importar la clave pública de la otra parte. De acuerdo con los documentos, al importar la clave pública de la otra parte, se ha calculado el secreto compartido. Estupendo.

Ahora necesito conocer ese secreto compartido, pero no creo que sea posible. Simplemente llamando a CryptExportKey con un tipo de PLAINTEXTKEYBLOB falla a menos que llame a CryptSetKeyParam para cambiar la ID del algoritmo de CALG_AGREEDKEY_ANY a algo ... else. Pero no quiero otra cosa, quiero el secreto compartido. La API, sin embargo, parece diseñada para desalentar esto.

¿Alguna idea por ahí? Debo señalar que el problema aquí es que solo estoy escribiendo un lado de una implementación de WiFi Protected Setup. Entonces el protocolo está definido para mí, y la otra parte no me está dando HCRYPTKEY.