◇ 암호 : 데이터를 암호화하고 복호화 한다. 그 종류에는..
- 대칭 또는 개인키
: 암호는 데이터를 암호화하고 복호화하기 위해 하나의 개인키를 사용.
대칭키는 사람이 데이터를 암호화하고 복호화할 때, 하드디스크 파일 암호화 같은 애플리케이션에 유용.
- 비대칭 또는 공개키
: 암호는 한 쌍의 키를 사용.
하나의 키는 공개되어 자유롭게 돌아다니고 다른 키는 비밀로 유지되어야 함.
어느 하나의 키로 암호화된 데이터는 다른 키를 사용하여 복호화될 수 있음.
- 하이브리드(hybrid)시스템
: 대칭과 비대칭 암호를 결합하여 사용.
하이브리드 시스템에서 비대칭 암호는 소위 개인키(비밀키 또는 세션키)를 교환하기 위해 사용.
개인키는 데이터 암호화 및 복호화를 위해 대칭 암호화와 함께 사용.
◇ 스트림과 블록 암호(Stream & Block Cipher)
- 블록암호 : 고정된 크기(64bit)의 데이터 블록을 암호화하고 복호화.
블록 암호는 암호화와 복호화에 적용되는 키(key)가 동일하냐 또는 상이하냐에 따라서 대칭형 암호와
공개키 암호로 분류된다. 공개키 암호에서는 암호화를 위해서 공개된 공개키(public key)가 적용되지만
복호화에는 공개키에 대응되는 개인키(private key)에 적용된다.
- 스트림암호 : 비트나 바이트의 스트림상에서 작동.
◇ 블록 암호(Block Cipher)
- 패딩(Padding)
- 평문이 항상 블록 크기(일반적으로 64bit)의 배수가 되는 것은 아님.
- 마지막 불완전한 블록을 보정하기 위하여, 패딩이 필요.
- 복호화 과정에서 패딩을 제거하고 평문의 실제 길이를 저장.
- PKCS#5
- 일종의 패딩기법
- 공개키 암호화 표준(Public-Key Cryptography Standard).
- 블록의 나머지 부분을 바이트의 수로 채움.
- 원래 평문의 길이가 블록 크기와 같다고 해도, 암호화될 때마다 패딩이 항상 추가
- 기타 패딩 기법
- 블록의 잉여 부분을 랜덤 데이터나 데이터의 패턴으로 채울 수 있다.
- 패딩을 제거하기 위한 어떤 방법만 가지고 있으면 된다.
- 암호 모드
- 평문의 블록이 암호문의 블록으로 암호화되는 방법을 결정. 그 역도 성립.
- getMode()를 호출함으로써 암호 모드를 알아낼 수 있음.
- SunJCE 프로바이더는 ECB, CBC, CFB, OFB, PCBC 모드를 지원.
1) ECB(Electronic Code Book)
- 평문의 각 블록은 암호문의 블록으로 암호화함.
- (단점) : 사용자가, 동일 키 사용시, 동일한 평문을 항상 동일한 암호문으로 암호화함.
2) CBC(Cipher Block Chaining)
- ECB모드의 단점을 보완.
- 평문의 각 블록은 XOR을 이용하여 이전 블록의 암호문과 연산.
- 평문의 첫 번째 블록에 대하여는 암호문으로 IV(Initialization Vector)가 사용.
- IV는 랜덤 데이터, 데이터를 정확하게 복호화하기 위해 암호문을 동일한 IV로 초기화해야 함.
- CBC 복호화는 암호화 과정의 반대.
- 암호문의 각 블록이 복호화될 때마다, 이전의 암호문 블록과 XOR로 연산되고, 평문을 생성함.
- 다시, 암호는 IV를 이용하여 초기화되어 계속 진행됨.
※ IV(Initialization Vector) : 키의 한 종류.
암호화 측면에서, 암호는 키와 IV를 사용함으로써 초기화됨.
복호화가 끝날 때, 암호는 키와 동일한 IV로서 초기화됨.
IV는 암호문을 복호화하려는 누군가에게 전송되어야 함.
3) PCBC(Propagating Cipher Block Chaining)
- CBC모드와 상당히 유사.
- 평문 블록이 암호화될 때, 이전의 평문 블록과 이전의 암호문 블록으로 동시에 XOR로 연산됨.
- 복호화된 이전의 평문과 암호문 블록으로 XOR로 연산됨.
4) CFB(Cipher FeedBack)
- 블록 암호가 스트림 암호처럼 동작.
- IV를 이용.
- 블록암호는 블록 크기보다 작은 데이터의 조각을 암호화할 수 있음.
- CFB8 : 동시에 한 바이트(8비트)를 암호화하거나 복호화하는 데 사용.
『 암호화 (p→c) 』
① 블록 암호를 이용하여 기본적 암호의 블록 크기만큼 버퍼를 암호화.
초기에 버퍼는 IV로 채워진다.
② 암호화된 버퍼의 최좌단 비트 수와 평문은 XOR로 연산됨. 그 결과 암호문이 출력됨.
암호화된 버퍼의 나머지는 폐기됨.
CFB8에서, 암호화된 버퍼의 최좌단 바이트는 평문과 XOR
③ CFB8에서, 버퍼는 한 바이트 왼쪽으로 이동.
암호문은 버퍼의 오른쪽편에 있는 빈 공간을 채우는 데 사용된다.
이 버퍼는 다음 암호화에서 다시 사용될 것이다.
이 과정이 계속되면, 버퍼는 전부 암호문으로 채우는 데 사용될 것이다.
『 복호화 (c→p) 』
① 버퍼는 블록 암호를 이용하여 암호화한다.
암호문 바이트를 복호화할 지라도, 여전히 버퍼를 암호화 하기 위해 블록 암호를 이용한다.
② 암호화된 버퍼의 최좌단 비트는 평문 출력을 처리하는 암호문과 XOR로 연산된다.
다시, 암호화된 버퍼의 나머지는 폐기된다.
③ 원래 버퍼는 왼쪽으로 이동하고, 암호문으로 채워진다.
이 버퍼는 다음 복호화에서 다시 사용될 것이다.
5) OFB(Output FeedBack)
- 내부 버퍼가 갱신되는 것을 제외하고 CFB 모드처럼 동작.
- 내부 버퍼가 왼쪽으로 이동될 때, 오른쪽의 공간은 암호화된 버퍼의 가장 왼쪽 비트로 채워짐.
6) 기타 모드
- 암호를 사용할 때, 사용할 모드는 암호분석가에 대한 암호의 저항력과 전송 오류로부터
회복할 수 있는 능력에 대해 많은 영향을 미친다.
'Security' 카테고리의 다른 글
잘 알려진 백도어에서 사용하는 포트 (0) | 2017.01.08 |
---|---|
웹 사이트 보안 및 DoS(Denial-of-Service) 공격 방지 (0) | 2017.01.08 |
방화벽 내용 정리 (0) | 2017.01.08 |
All in one 정리 (0) | 2017.01.08 |
Kerberos (0) | 2017.01.08 |