I'm developing my own protocol and I'll use Diffie-Hellman to achieve PFS. It will work in this way:
The symmetric encryption algorithm will be AES_256_CBC.
The DH parameters will be: P: a 2048-bit safe prime as defined in RFC 3526. Generator: 2 (also defined in RFC 3526). Secret Exponent: a 512-bit ephemeral random number *
- If it is true that the secret must be twice the security level, it should be OK
Only the secret exponent will be different every time and P and G will be always the same (forever).
The key-exchange will be authenticated with RSA-2048.
Once the shared secret is computed, it will be used to derive a 256-bit symmetric key (perhaps with HKDF) to setup a AES-256 cipher that will run in CTR mode to generate a 1024-bit random material that will be splitted in four parts:
2 x AES-256 keys (write and read keys)
2 x HMAC-SHA256 keys [write and read keys, 256-bit each]