목차
1. 이전 빌드 환경 구성 포스팅
이전에 C에서 OpenSSL 라이브러리를 활용하기 위한 빌드 환경 구성 방법에 대한 포스팅입니다.
2023.07.28 - [C] - [C/C++] Openssl 정적 라이브러리 빌드 및 Codelite 설치, 개발 환경 구성(ubuntu, codelite)
2. 이전 공개키, 개인키 생성 포스팅
이전에 C에서 OpenSSL 라이브러리를 사용하여 RSA 공개키와 개인키를 생성하는 방법에 대한 포스팅입니다.
2023.07.31 - [C] - [C/C++] Openssl 활용 RSA 공개키 및 개인키 생성 예제
3. C Openssl RSA 암복호화 예제
이 예제에서는 C 프로그램에서 OpenSSL 라이브러리를 사용하여 RSA 암호화와 복호화를 수행하는 방법을 설명합니다.
#include <stdio.h>
#include <string.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main() {
const char* plaintext = "Hello, RSA!";
unsigned char ciphertext[256];
unsigned char decryptedtext[256];
RSA *rsa_keypair = RSA_new();
BIGNUM *e = BN_new();
BN_set_word(e, RSA_F4);
// RSA 키페어 생성
if (RSA_generate_key_ex(rsa_keypair, 2048, e, NULL) != 1) {
printf("RSA 키페어 생성 오류\n");
return 1;
}
// 암호화
int ciphertext_len = RSA_public_encrypt(strlen(plaintext) + 1, (const unsigned char*)plaintext, ciphertext, rsa_keypair, RSA_PKCS1_OAEP_PADDING);
if (ciphertext_len == -1) {
printf("RSA 암호화 오류\n");
return 1;
}
// 암호문 출력
printf("암호문: ");
for (int i = 0; i < ciphertext_len; i++) {
printf("%02x", ciphertext[i]);
}
printf("\n");
// 복호화
int decryptedtext_len = RSA_private_decrypt(ciphertext_len, ciphertext, decryptedtext, rsa_keypair, RSA_PKCS1_OAEP_PADDING);
if (decryptedtext_len == -1) {
printf("RSA 복호화 오류\n");
return 1;
}
// 평문 출력
printf("복호화 결과: %s\n", decryptedtext);
RSA_free(rsa_keypair);
BN_free(e);
return 0;
}
4. RSA 키 비트 수가 커질 수록 장점
RSA 암호화에서 키의 비트 수가 커질수록 암호화의 안전성이 증가합니다.
큰 키 크기를 사용하는 RSA는 더욱 강력한 암호화를 제공하며 더 오래 사용될 수 있습니다.
5. RSA 취약점
RSA 암호화는 키 크기가 커질수록 안전성이 증가하지만, 반대로 더 많은 계산 리소스를 요구합니다. 또한 키 관리와 안전한 키 교환에 대한 어려움이 있을 수 있습니다. 또한 잘못된 구현이나 낮은 키 크기를 사용하는 경우 RSA는 취약점을 가질 수 있습니다. 따라서 RSA를 사용할 때는 적절한 키 크기와 안전한 구현이 필요합니다.
반응형