gpt4 book ai didi

openssl - 如何在 OpenSSL 中获取 HMAC key

转载 作者:行者123 更新时间:2023-12-02 05:03:24 25 4
gpt4 key购买 nike

我正在使用 OpenSSL,我想从 session 中提取我的 HMAC key 和 AES key ,以便我可以在应用程序中使用 GPU 加速 HMAC 和 AES 加密。

SSL_accept 之后我在哪里可以得到 key ?AES key 是否存储在 SSLHandle->enc_write_ctx->cipher_data 中?HMAC key 存储在哪里?

最佳答案

如果您有名为 sslSSL*,则查看 ssl->session 以获取主 key 和 ssl->s3 表示当前的 hamc key 。

ssl.h 有一个struct ssl_session_st,也就是上面的ssl->session。主 key 存储在 struct ssl_session_st 中。

struct ssl_session_st
{
int ssl_version; /* what ssl version session info is
* being kept in here? */

/* only really used in SSLv2 */
unsigned int key_arg_length;
unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH];
int master_key_length;
unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH];
...
}

继续进行一些推导,例如,您可以在 s3_clnt.c 中看到它。 SSL2 使用两个 session key - 每个方向一个(客户端到服务器;服务器到客户端)。 key 用于隐私和完整性保护。 SSLv3 及更高版本使用 6 个 key - 每个方向三个(客户端到服务器;服务器到客户端)。一个 key 用于隐私,第二个用于完整性,第三个用作随机数或 iv。

要查看 HMAC key 是什么,请查看 s3_enc.c 中的 n_ssl3_mac 大约第 700 行。您将看到如下内容:

int n_ssl3_mac(SSL *ssl, unsigned char *md, int send)
{
SSL3_RECORD *rec;
unsigned char *mac_sec,*seq;
EVP_MD_CTX md_ctx;
...

if (send)
{
rec= &(ssl->s3->wrec);
mac_sec= &(ssl->s3->write_mac_secret[0]);
seq= &(ssl->s3->write_sequence[0]);
hash=ssl->write_hash;
}
else
{
rec= &(ssl->s3->rrec);
mac_sec= &(ssl->s3->read_mac_secret[0]);
seq= &(ssl->s3->read_sequence[0]);
hash=ssl->read_hash;
}
...

TLS 还使用 ssl->s3 成员。例如,从 t1_enc.c 第 445 行开始:

mac_secret= &(s->s3->write_mac_secret[0]);
mac_secret_size = &(s->s3->write_mac_secret_size);

您还可以使用 BIO 通过 SSL_SESSION_print 仔细查看 SSL* 对象中的数据>SSL_SESSION_print_fp

关于openssl - 如何在 OpenSSL 中获取 HMAC key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com