외부 기관과 보안 연동을 하던 중, RSA와 AES256을 함께 사용하는 암호화 방식을 적용하게 됐다.
이론으로만 알고 있던 내용을 실제 연동 구조에 적용해보면서 흐름과 구성 방식을 정리해두면 좋겠다는 생각이 들어 작성해본다.
RSA와 AES는 각각 비대칭키, 대칭키 암호화 방식이다.
두 방식은 구조적으로 다르고, 서로의 약점을 보완할 수 있기 때문에 함께 사용되는 경우가 많다.
| 방식 | 설명 | 장점 | 단점 |
|---|---|---|---|
| AES (대칭키) | 하나의 키로 암·복호화 | 속도가 빠르고 효율적 | 키를 안전하게 전달하기 어렵다 |
| RSA (비대칭키) | 공개키로 암호화 → 개인키로 복호화 | 키 공유가 안전하다 | 연산이 무겁고 대용량 데이터에는 비효율적 |
실제 연동에서는 보통 아래와 같은 방식으로 함께 사용된다:
이런 구조를 하이브리드 암호화(Hybrid Encryption)라고 부른다.
속도와 보안성을 모두 확보할 수 있어, 공공기관이나 금융기관과의 연동에서 자주 사용된다.
1. AES256 키 생성
2. 평문 데이터를 AES256으로 암호화 → encData
3. AES 키를 RSA 공개키로 암호화 → encKey
4. encKey + encData를 서버로 전송
5. 서버는 개인키로 encKey 복호화 → AES 키 복원
6. 복원한 키로 encData 복호화 → 원문 복원
| 항목 | 설명 |
|---|---|
| Key (암호화 키) | 256bit = 32바이트. 기본적으로 base64 인코딩, 환경에 따라 hex도 사용 |
| IV (Initialization Vector) | 블록 단위 암호화에서 패턴 반복을 막기 위해 사용. 보통 16바이트 |
| Padding | 블록 크기에 맞게 채워 넣는 규칙. 실무에서는 보통 PKCS#7 사용 |
| 암호화 모드 | CBC, GCM, ECB 등이 있으며 CBC + PKCS7 조합이 일반적 |
| 항목 | 설명 |
|---|---|
| 키 길이 | 보통 2048bit 또는 4096bit |
| 패딩 방식 | PKCS#1 v1.5 (기본), OAEP (더 안전하지만 복잡) |
| 블록 크기 | RSA는 한 번에 암호화 가능한 길이가 제한됨 (키 길이 - 패딩 길이) |
| 출력 인코딩 | 기본적으로 base64, 필요 시 hex 사용 |
| 모드 | 설명 | 보안성 | 특징 |
|---|---|---|---|
| CBC (Cipher Block Chaining) | 블록들이 연결되어 암호화됨. IV 필요 | ⭐⭐⭐⭐ | 실무에서 가장 많이 사용 |
| ECB (Electronic Codebook) | 각 블록을 독립적으로 암호화 | ⭐ | 같은 내용은 같은 암호문이 나옴. 거의 사용 안 함 |
| GCM (Galois/Counter Mode) | 암호화 + 무결성 검증 동시 처리 | ⭐⭐⭐⭐⭐ | 속도 빠르고 안전함. 다만 복잡함 |
→ 실무에서는 AES 암호화 시 AES256 + CBC + PKCS7 Padding 조합이 가장 많이 사용되고,
RSA는 보통 PKCS#1 v1.5 또는 OAEP 패딩 방식을 함께 사용한다.
기존에는 암호화 알고리즘 이름과 방식만 외우고 있었는데,
실제 연동에 적용하면서 하나하나 찾아보고 구성 요소들을 이해하게 되니까 훨씬 명확하게 다가왔다.
특히 데이터를 주고받는 구조에서 암복호화는 단순한 보안 옵션이 아니라, 연동의 핵심이라는 점도 확실히 느꼈다.
단순히 외워서 아는 것과, 흐름을 이해하고 실제로 구현해보는 것 사이에는 생각보다 큰 차이가 있다는 걸 실감한 작업이었다.
#암호화 #RSA #AES256 #하이브리드암호화 #대칭키 #비대칭키 #PKCS1 #PKCS7 #IV #Padding #CBC모드 #보안연동
이 포스팅 자주 해주세요ㅠㅠ 많은 인사이트 얻구 갑니다아