OpenSSL 빌드 (Windows)
필요한 파일 2개
1) OpenSSL 소스코드 다운
Download link : https://www.openssl.org/source/
openssl-1.1.1d.tar.gz 파일을 다운 받음
2) Perl 설치
Download link : http://strawberryperl.com/
perl 의 경우 exe파일로 설치를 진행
참고) perl 이란?
Practical Extraction and Report Language : 실용적인 레포팅 언어라는 뜻
주로 텍스트 파일에서 정보를 추출(Extract)해서
다양한 형태의 레포트(Report)를 출력해내는 용도로 사용
OpenSSL 빌드
1. C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2017\Visual Studio Tools\VC
위의 경로로 이동하시면 아래의 프로그램이 있음
VS 2017용 x64 네이티브 도구 명령 프롬프트
VS 2017용 x86 Native Tools 명령 프롬프트
64비트로 할것인지 32비트로 할것인지 선택하여 꼭 관리자 권한으로 실행
2. VS 2017용 x64 네이티브 도구 명령 프롬프트 관리자 권한으로 실행
3. cd 명령어를 사용하여 openssl 압축을 풀어준곳으로 이동합니다.
4. 명령어를 실행
perl Configure VC-WIN32 no-idea no-md2 no-mdc2 no-rc5 no-rc4 no-asm --prefix=d:\devel\openssl\openssl-1.0.0d_vc2010
perl Configure VC-WIN64A no-idea no-md2 no-mdc2 no-rc5 no-rc4 no-asm --prefix=d:\devel\openssl\openssl-1.0.0d_vc2010
[명령어 정리]
--prefix C:\Program Files (x86)\OpenSSL = openssl 설치 경로 옵션
no-idea no-mdc2 no-rc5 = RC4, IDEA, MDC-2 등 상용 알고리즘 제외옵션
특허문제가 안걸리게 해주는 옵션
[오류 참고]
원인 : Activestate perl 을 설치해서 사용했을 경우 발생하는 오류
해결법 : Activestate perl 삭제 후 Strawberry Perl 로 재설치 하니까 해결됨
Strawberry Perl 링크 : http://strawberryperl.com/
[명령어 성공 시]
5. make 명령 실행
해당 창에서 그대로 아래 명령 실행
>nmake
>nmake install
6. 완료 설치 확인
상위에서 설정한 경로에 다음과 같이 폴더가 생성됨
Visual Studio 2017 OpenSSL 적용
1. 빈프로젝트 생성
2. Header 파일 적용
프로젝트 우클릭 → 속성 → 구성속성 → VC++ 디렉터리 → 포함 디렉터리
항목에 openssl include 폴더 경로 추가
예) D:\[프로젝트 경로]\OpenSSL\include
3. 정적 라이브러리 (lib) 파일 적용
프로젝트 우클릭 → 속성 → 구성속성 → VC++ 디렉터리 → 라이브러리 디렉터리
항목에 openssl lib 폴더 경로 추가
예) D:\[프로젝트 경로]\OpenSSL\lib
프로젝트 우클릭 → 속성 → 구성속성 → 링커 → 입력 → 추가 종속성
항목에 D:\[프로젝트 경로]\OpenSSL\lib 경로에 있는 lib 파일 입력
- libcrypto.lib
- libssl.lib
4. 동적 라이브러리 (dll) 파일 적용
프로젝트 우클릭 → 속성 → 구성속성 → 디버깅 → 환경
항목에 환경변수로 설정
예) PATH=%PATH%;D:\OJT\2_MISSION\01_securityProject\OpenSSL\bin
D:\OJT\2_MISSION\01_securityProject\OpenSSL\bin 폴더에 openssl 관련 dll 파일이 배치되어있음
OpenSSL AES 256 암/복호화
AES256 KEY 길이 : 256 Bits (32Bytes)
KEY 입력 배열 = unsigned char[32]
입력 받아야함
AES256 Block size : 128Bits (16Bytes)
AES는 Block 암호화로 16Bytes 단위로 암호화를 진행함
평문의 길이가 16Bytes를 넘게되면 암호화 운용모드로 16Bytes 단위가 추가로 붙어서 진행된다.
평문의 길이가 18Bytes의 경우 --> 암/복호화 결과 32Bytes로 출력
암호 운용 모드 CBC
벡터 (IV) 값이 사용됨
벡터는 평문과 XOR연산을 수행하기 때문에 AES Block size 와 크기가 동일해야함
즉 AES256 CBC 모드 벡터값 길이 : 16Bytes
암호화에 사용되는 벡터값과
복호화에 사용되는 벡터값이 동일해야함
OpenSSL AES API
AES 암호화 방식은 2가지가 제공됨
1) AES 라이브러리
#include <openssl/aes.h>
AES_set_encrypt_key
AES_set_decrypt_key
AES_cbc_encrypt
-
마지막 전달 매개변수가
-
AES_DECRYPT = 복호화
-
AES_ENCRYPT = 암호화
2) EVP 라이브러리 AES
[EVP란?]
수많은 OpenSSL 암호 API를 하나의 인터페이스로 구성
#include <openssl/evp.h>
init, update, final 과정을 거쳐서 암호화
[init]
EVP_CIPHER_CTX, EVP_CIPHER_CTX_new, EVP_Encryptinit_ex
암호화 관련 정보를 설정 (암호화 방식, 키 길이, 키 값 등)
[update]
EVP_EncryptUpdate
설정한 암호화 방식으로 블럭을 분할해 암호화를 수행
[final]
EVP_EncryptFinal
입력한 평문 Text의 크기가 블럭의 배수가 아닐 경우
마지막 block 데이터 끝에 여분의 데이터 바이트를 패딩 처리하여
처리 가능한 크기의 블럭으로 만든 다음 암호화를 수행
OpenSSL 해쉬 Hash
SHA 256 해쉬
#include <opensssl/sha.h>
SHA256_CTX
-
openssl sha 해쉬 알고리즘 context 선언
SHA256_Init
-
해쉬 관련 정보를 설정
SHA256_Update
-
SHA256 방식으로 블럭을 분할하여 해쉬를 진행
SHA256_Final
-
마지막 블럭의 경우
-
남는공간을 계산하여 해쉬처리
SHA256_free
HMAC 256 해쉬
HMAC 의 Key 설명
HMAC에 사용되는 key 는 길이는 64Bytes 임
키가 64바이트를 초과하면 해시되어(SHA-256 사용) 64바이트 키가 파생
64바이트보다 짧은 경우 64바이트까지 채워짐
사용함수
HMAC 함수
#include <openssl/hmac.h>
HMAC( 사용할 hash알고리즘, 키, 키길이, 평문, 평문 길이, 해쉬결과 배열, 해쉬 결과 길이 )
EVP 함수
HMAC_Init
HMAC_Update
HMAC_Final
HMAC_CTX_free
'보안' 카테고리의 다른 글
DEP(Data Execution Prevention) 이란? (0) | 2021.08.27 |
---|---|
ASLR 이란? (0) | 2021.08.27 |
해쉬 (HASH) (0) | 2021.02.23 |
보안 (0) | 2021.02.23 |
대칭키와 비대칭키란? (0) | 2021.02.19 |