외부 API와 통신할 때는 개인 정보를 보호하기 위해 암호화가 필요합니다.
진행한 프로젝트는 개인 정보 암호화를 위해 SEED 암호화를 사용하기로 했습니다.
"SEED"는 블록 암호화를 지원하는 대칭 암호화 알고리즘 중 하나입니다. 이 알고리즘은 암복호화에 동일한 비밀키를 사용하므로, 양 측 간에 비밀키를 안전하게 전달하는 방법이 필요합니다. 이에 비밀키를 전달하는 방법으로 API통신을 통한 비대칭 암호화를 활용하기로 했습니다.
API 요청에는 공개키를 전송하고, 상대측은 전달 받은 공개키로 SEED 공유키를 암호화하여 API 응답값으로 전달합니다. 이렇게 전달받은 암호화된 공유키를 공개키/비밀키 쌍의 비밀키로 복호화하여 최종적으로 공유하고자 하는 SEED 공유키(비밀키)를 얻어 개인정보 암호화에 사용합니다.
그리고 SEED는 암복호화하는 방식에 여러 운영모드를 제공하는데요. 운영모드는 같은 원문에 대해 동일한 암호문이 발생하지 않도록 하는 방법들을 제공합니다.
해당 내용에서 나온 키워드를 목차로 나타내고 정리한 내용입니다.
암호화 개념 정리
목차
- 비대칭 암호화
- 대칭 암호화
- 블록암호 알고리즘
- SEED
국내외 암호화 알고리즘 종류
1 비대칭 암호화
- 상호 간에 통신 내용을 암호화하기 위해 데이터 처리하는 측은 공개키, 개인키를 생성한다.
- 데이터 처리 측과 통신하기 위해 해당 공개키로 메세지를 암호화해서 전달한다.
- 암호화 된 메세지를 전달받은 측은 공개키/개인키 쌍에서 개인키를 이용해 암호화 된 메세지를 복호화한다
1-1 비대칭 암호화 알고리즘
- RSA(Rivest-Shamir-Adleman)
- ECC(Elliptic Curve Cryptography) 타원 곡선 암호
- DSA(Digital Signature Algorithm)
1-2 RSA(Rivest-Shamir-Adleman)
- RSA는 비대칭 암호화의 초기 형태 중 하나
- 소수 두 개를 인수 분해하고 보조 값을 더하여 공개 키를 만든다
- 누구나 RSA 공개 키를 사용해 데이터를 암호화할 수 있지만 소수를 아는 사람만 데이터를 복호화할 수 있다.
- RSA 키는 매우 클 수 있으며(일반적인 크기는 2,048비트 또는 4,096비트) 비용이 많이 들고 속도가 느린 것으로 간주
- 참고로 소수를 이용한 비대칭 암호화의 초기 형태를 알고 싶으면 링크영상 참고
2 대칭 암호화
- 암호화 및 복호화에 동일한 키를 사용
장점
- 생성 비용이 더 저렴
- 암호화 및 복호화에 컴퓨팅 성능을 많이 사용하지 않는다. → 데이터 디코딩 지연이 덜하다.
단점
- 권한이 없는 사람이 키를 입수할 경우 양 당사자 간에 전송된 모든 메시지와 데이터를 복호화할 수 있다
- 따라서 공유 키의 전송을 다른 암호화 키로 암호화해야 하므로
종속 항목 주기
가 생김 - 종속항목주기 : 종속 항목 주기는 대칭 암호화에서 공유 키를 안전하게 전달하기 위해 공개키 암호화를 사용해야 한다는 종속성을 나타낸다.
분류
메세지의 암복호화를 처리하는 방식에 따라 아래와 같이 분류
- 블록 암호 : 메세지를 블록 단위로 나누어 처리
- 스트림 암호 : 메세지를 비트 단위로 처리
2-1 대칭 암호화 알고리즘
- DES
- AES
2-2 DES (데이터 암호화 표준 Data Encryption Standard)
- DES 키 크기 : 56비트 → 오늘날은 사용되지 않음
2-3 AES (고급 암호화 표준 Advanced Encryption Standard)
- 오늘날 가장 많이 사용되는 암호화 방법. 2001년에 미국 정부에서 채택
- 128비트 블록 암호화인 '치환-순열 네트워크'라는 원칙을 기반으로 설계
- 키 크기 : 128, 192, 256 비트
3 블록암호 알고리즘
블록암호 알고리즘이란
대칭 암호화는 메세지의 암복호화를 처리하는 방식에 따라 메세지를 블록 단위로 나누어 처리(블록암호)하냐, 비트 단위로 나누어 처리(스트림 암호)하냐에 따라 나뉜다. 여기에서는 데이터를 고정 크기의 블록 단위로 분할하여 처리하는 대칭 암호화에 대해서 알아본다.
블록암호 알고리즘의 운영모드
- 여러 개의 입력 블록들을 블록암호에 적용하여 암⋅복호화하는 방법에 대한 정의
- 블록암호 알고리즘의 경우 암호 알고리즘이 적용되는 블록크기가 정해져 있기 때문에 정해진 길이보다 긴 데이터를 암호화하거나 무결성 검증을 위해서는 블록암호 알고리즘의 운영모드를 사용해야 한다.
운영모드 분류
- 블록단위로 처리 될 때 동일한 키에 대해 이전 블록의 암호화 결과가 다음 블록에 미치는 영향
- 암호문에서 발생한 에러가 평문의 복호화에 미치는 영향
운영모드 종류
운영모드 분류 기준에 따라 아래와 같이 운영모드가 나뉠 수 있다.
1. ECB 모드:Electric CodeBook mode( 전자 부호표 모드)
2. CBC 모드: Cipher Block Chaining mode(암호 블록 연쇄 모드)
3. CFB 모드: Cipher FeedBack mode(암호 피드백 모드)
4. OFB 모드: Output FeedBack mode(출력 피드백 모드)
5. CTR 모드: CounTeR mode(카운터 모드)
4 SEED
- 전자상거래, 금융, 무선통신 등에서 전송되는 개인정보와 같은 중요한 정보를 보호하기 위해 국내 암호전문가들이 순수 국내기술로 개발한 128비트 및 256비트 대칭 키 블록의 암호 알고리즘
고려 사항
블록 암호 SEED를 사용하기 위해 아래 사항을 구현해야 한다.
엔디안
(endianness) : 메모리에 바이트를 배열하는 순서를 나타내며, 구현 환경에서 사용 됨- 암호화된 데이터가 저장되는
data type
- 입력 블록을 블록암호에 적용하는 방법 :
운영모드
- 마지막 블록 크기 맞추기 위한 :
Padding
위 구현 내용은 KISA에서 제공하고 있다. 활용 방법은 데이터 크기에 따라 2가지로 암복호화를 할 수 있다.
활용 방법1 : 데이터가 적을 경우 Encrypt와 Decrypt 함수만 호출하면 암호화와 복호화가 된다.
활용 방법2 : 대용량의 데이터를 암호화/복호화 할 때 Initialize, Process, Close 3가지 단계로 구현을 제공한다.
CBC(Cipher Block Chaining) 운영모드
- 동일한 평문 블록과 암호문 블록 쌍이 발생하지 않도록 전 단계의 암․복호화 결과가 현 단계에 영향을 주는 운영모드
- 전 단계의 암호문 블록이 필요하므로 맨 처음 블록에서는 IV(초기화 벡터)를 이용한다.
- IV(Initial Vector)는 송, 수신자 모두 알아야하며, 외부에 노출 되어도 상관없다.
참고자료
- https://www.pentasecurity.co.kr/encryption/
- https://cloud.google.com/learn/what-is-encryption?hl=ko
- http://wiki.hash.kr/index.php/SEED
- https://www.baeldung.com/cs/security-key-vs-vector-vs-nonce
- https://www.baeldung.com/java-rsa
- base64 https://codingpractices.tistory.com/entry/Base64-인코딩이란-정확하게-이해하기
- 영문 용어 정리 : https://online.york.ac.uk/what-is-cryptography
댓글