openssl AES 모드 : ECB,CBC,CFB,OFB,CTR
블록 암호화에서의 운영 모드
이미지의 출처는 위키피디아 입니다. (http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation)
1. ECB (Electronic Code Block) Mode
- 가장 단순한 모드로 블록단위로 순차적으로 암호화 하는 구조이다.
- 한개의 블록만 해독되면 나머지 블록도 해독이 되는 단점이 있다. (Brute-Force Arttack, Dictionary Attack)
- 암호문이 블록의 배수가 되기 때문에 복호화 후 평문을 알기 위해서 Padding을 해야한다.
- error propagation : 각 블록이 독립적으로 동작하므로 한블록에서 에러가 난다고 해도 다른 블록에 영향을 주지 않는다. 해당 블록까지 에러 전파.
2. CBC(Cipher Block Chaining) Mode
- 블록 암호화 운영 모드 중 보안 성이 제일 높은 암호화 방법으로 가장 많이 사용된다.
- 평문의 각 블록은 XOR연산을 통해 이전 암호문과 연산되고 첫번째 암호문에 대해서는 IV(Initial Vector)가 암호문 대신 사용된다. 이 때, IV는 제 2의 키가 될수 있다.
- 암호문이 블록의 배수가 되기 때문에 복호화 후 평문을 얻기 위해서 Padding을 해야만 한다.
- 암호화가 병렬처리가 아닌 순차적으로 수행되어야 한다. (단점이죵~)
- error propagation : 깨진 암호문의 해당블록과 다음블록의 평문까지 영향을 미치게 됩니다. 두번째 복호화 그림을 보고 Ciphertext가 깨졌을 때를 생각해보시면 이해가 되실꺼에요~
3. CFB(Cipher FeedBack) Mode
- 블록 암호화를 스트림 암호화처럼 구성해 평문과 암호문의 길이가 같다(패딩이 필요 없다)
- 최초의 키생성 버퍼로 IV가 사용되며, 이때 IV는 제2의 키가 될수 있다.
- 스트림의 기본단위를 Bit단위로 설정할 수 있으며, Bit단위에 따라 CFB8~CFB128로 쓰인다.
- 암호화, 복호화 모두 암호화로만 처리할 수 있다.
- CBC모드와 마찬가지로 암호화는 순차적이고, 복호화는 병렬적으로 처리할 수 있다.
- error propagation : CBC모드와 마찬가지로 한 암호문블럭의 에러는 해당평문블록과 다음 평문블록, 이렇게 총 2개의 블록에 전파된다.
4. OFB(Output FeedBack) Mode
- 블록 암호화를 스트림 암호화처럼 구성해 평문과 암호문의 길이가 같다.(패딩이 필요없다)
- 암호화 함수는 키 생성에만 사용되며, 암호화 방법과 복호화 방법이 동일해 암호문을 한번 더 암호화하면 평문이 나온다. (복호화시에 암호화)
- 최초의 키생성 버퍼로 IV가 사용되며, 이 때 IV는 제2의 키가 될수 있다.
- 스트림의 기본 단위를 Bit단위로 설정할 수 있으며, Bit단위에 따라 OFB8~OFB128로 쓰인다.
- error propagation : 해당블록까지만~ 대응되는 한 블록에만 영향을 미치므로, 영상이나 음성과 같은 digitized analog신호에 많이 사용된다.
5. CTR (CounTeR) Mode
- 블록을 암호화할 때마다 1씩 증가해 가는 카운터를 암호화 해서 키스트림을 만든다. 즉 카운터를 암호화한 비트열과 평문블록과의 XOR를 취한 결과가 암호문 블록이 된다.
- CTR모드는 OFB와 같은 스트림 암호의 일종이다.
- CTR모드의 암복호화는 완전히 같은 구조가 되므로 구현이 간단하다.(OFB와 같은 스트림 암호의 특징)
- CTR모드에서는 블록의 순서를 임의로 암/복호화 할 수있다.(비표와 블록번호로부터 카운터를 구할 수 있기때문에)
- 블록을 임의의 순서로 처리 할 수 있다는 것은 처리를 병행 할 수 있다는 것을 의미한다.(병렬처리 가능)
- error propagation : 각 블록이 병렬처리 되므로 같은 블록내에서만 이루어짐.
표준 대칭키 알고리즘의 종류
알고리즘 | 특징 | 소유국가 |
DES | 64bit block 56bit key | 미국 |
Triple DES | 64bit block 112~168bit key | 미국 |
BlowFish | 64bit block 128bit key | 미국 |
RC2 | 64bit block 128bit key | 미국 |
RC4 | Stream Cipher | 미국 |
AES | 128bit block 128~256 bit key | 벨기에 |
SEED | 128bit block 128bit key | 한국 |
ARIA | 128bit block 128~256bit key | 한국 |
*Stream Cipher : 키의 길이가 유동적이며, 키의 길이가 길수록 안전성이 뛰어남.
'JAVA > Java' 카테고리의 다른 글
[JAVA] 문자열 입력과 출력 (Scanner) (0) | 2019.09.30 |
---|---|
[JAVA] 기본 데이터 타입과 변환 (0) | 2019.09.30 |
[JAVA] 이클립스(eclipse) 설치 및 셋팅 (0) | 2019.09.30 |
[JAVA] jdk 설치 환경변수 설정 (0) | 2019.09.30 |
AES 128비트 암호화(ECB 모드, PKCS5Padding) (0) | 2019.04.02 |
스프링에서 사용자(client) IP 가져오기 (0) | 2019.01.03 |
MSSQL JAVA 연동하기(JDBC) (2) | 2019.01.03 |
중복 로그인 방지 로직 (1) | 2019.01.03 |