OpenSSL을 사용하고 있으며 세션에서 HMAC 키와 AES 키를 추출하여 응용 프로그램에서 GPU로 HMAC 및 AES 암호화를 가속화 할 수 있습니다.OpenSSL에서 HMAC 키를 얻는 방법
SSL_accept
이후의 키는 어디에서 얻을 수 있습니까? AES 키가 SSLHandle->enc_write_ctx->cipher_data
에 저장되어 있습니까? HMAC 키는 어디에 저장되어 있습니까?
OpenSSL을 사용하고 있으며 세션에서 HMAC 키와 AES 키를 추출하여 응용 프로그램에서 GPU로 HMAC 및 AES 암호화를 가속화 할 수 있습니다.OpenSSL에서 HMAC 키를 얻는 방법
SSL_accept
이후의 키는 어디에서 얻을 수 있습니까? AES 키가 SSLHandle->enc_write_ctx->cipher_data
에 저장되어 있습니까? HMAC 키는 어디에 저장되어 있습니까?
ssl
이라는 SSL*
의 경우 마스터 키는 ssl->session
이고 현재 hamc 키는 ssl->s3
입니다.
ssl.h
은 struct ssl_session_st
이며 위의 값은 ssl->session
입니다. 마스터 키는 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는 각 방향 (클라이언트에서 서버로, 클라이언트에서 서버로)의 두 가지 세션 키를 사용합니다. 이 키는 개인 정보 보호 및 무결성 보호에 사용됩니다. SSLv3 이상에서는 6 개의 키 (각 방향으로 3 개 (클라이언트에서 서버로, 서버에서 클라이언트로))를 사용합니다. 하나의 키는 프라이버시 용이고 두 번째 키는 무결성을 위해 사용되며 세 번째 키는 넌스 또는 iv로 사용됩니다.
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
멤버를 사용하십시오 HMAC 키가 무엇인지 보려면
은 다음과 같은 것을 볼 수 라인 (700)의 주위에 s3_enc.c
, 예를 들어, n_ssl3_mac
을 좀 봐. 예를 들어, t1_enc.c
에서 라인 445 주위 :
mac_secret= &(s->s3->write_mac_secret[0]);
mac_secret_size = &(s->s3->write_mac_secret_size);
또한 사용 SSL_SESSION_print
으로 SSL*
객체의 데이터에서 좋은 모습을 얻을 수있을 수있는 BIO
또는 SSL_SESSION_print_fp
.
일반적으로 세션 자체에서 데이터를 검색하는 것이 아니라 OpenSSL 용 엔진을 만들어 SSL 가속화를 시도합니다. –