양방향 암호화
- 대칭키 암호화
- 비대칭키 암호화
단방향 암호화
- Hash
스트림 암호
- 평문과 동일한 길이의 키 스트림(Key Stream)을 생성하여 평문과 XOR연산을 통해 암호화, 복호화를 수행
- 무선 통신 환경에서 주로 사용
- 스트림 암호의 대표적인 종류
RC4, A5/1, A5/2, A5/3등..
블록 암호
- 평문을 고정된 크기의 블록 단위로 암호화, 복호화 수행
- 각 블록 단위마다 동일한 키 사용
- 블록 크기를 맞추기 위해 패딩(Padding) 사용
- 운용 방식(운용 모드)가 나뉘어 있음
- Feistel: 암호화와 복호화 과정이 동일, 역함수가 존재하는 요소와 존재하지 않는 요소 모두 이용 가능
- SPN(Substitution-Permutation Network): 대체(substitution)와 치환(permutation)을 이용하여 연산, 복호화 시 별도로 루틴 구현해야함
- 블록 암호의 대표적인 종류
DES, AES, SEED, ARIA 등..
ECB(Electric Codebook) 모드
- 암호화, 복호화 시 항상 같은 키를 사용하여 수행
- 평문이 n bits의 입력이라면 암호문도 n bits, 평문의 길이가 블록 길이의 배수가 아니면 평문에 마지막 부분에 Padding이 필요함
- 블록 단위의 패턴이 유지되기 때문에 평문에서 같은 값을 가지는 블록은 모두 같은 암호문 값을 가지게 됨
- 많은 데이터베이스를 암호화 할 때 병렬적으로 처리할 수 있음
- ECB 모드의 그림
CBC(Cipher Block Chaining) 모드
- 평문의 첫번째 블록은 IV(Initial Vector)라고 불리는 초기 벡터와 처음 XOR 연산을 수행
- 다음 블록들의 평문은 이전 암호문 블록 결과와 XOR 연산을 수행
- 동일한 IV를 사용하는 환경에서는 평문이 동일하다면 암호문도 동일함
- CBC모드의 그림
CFB(Cipher Feedback) 모드
- CBC와 동작이 비슷하지만 블록 크기(n)가 평문이나 암호문의 블록 크기(r)보다 작거나 같을 수 있음
- 블록 기반 암호(DES, AES등)에 의해 블록 크기(64, 128등)가 정해지지 않음
- n비트 이동 레지스터 S 값을 블록 암호를 이용하여 암호화, 복호화를 수행
- 평문 또는 암호문 r 비트를 임시 블록 T에서 맨 앞 r 비트만큼 가져와 XOR 연산 수행
- 수행한 결과 값을 다음 n비트 이동 레지스터의 뒷부분에 추가
- CFB 모드의 그림
OFB(Output Feedback) 모드
- CFB 모드와 비슷
- CFB 모드는 평문 r비트와 n비트 이동 레지스터의 암호화 결과값 r비트를 XOR 연산한 결과값을 다음 n비트 이동 레지스터 S에 보냄
- OFB 모드는 r비트 끼리 XOR하기 전 임시 저장 블록에 있는 값 앞부분 r비트를 다음 n비트 이동 레지스터 S의 뒷 부분에 추가
- 암호문 블록 전송 중 오류가 발생해도 오류는 다음 블록에 영향을 주지 않음(오류 파급의 영향 X)
- OFB 모드의 그림
CTR(Counter) 모드
- CTR 모드는 암호화 시 피드백이 없음
- 대신 초기 값 IV는 미리 정의된 값으로 초기화 하고 다음 블록들에서는 카운터를 이용하여 증가함
- n비트 카운터는 각각의 블록 마다 미리 정의된 규칙에 따라 증가함(mod 2^n만큼)
- CTR 모드의 그림
공개 키 암호
- 송신자는 수신자의 공개 키를 가지고 암호화를 수행
- 수신자는 공개 키로 암호화 된 암호문을 자신의 개인 키로 복호화
- 복잡한 수학연산을 이용하여 계산하기 때문에 대칭키 암호화 보다 연산속도나 처리속도가 느릴 수 있음
- 공개 키 암호의 대표적인 종류
RSA, Rabin, ElGamal, ECC 등..
비밀 키 암호
- 개인 키를 소유한 사람만이 전자 서명 알고리즘을 통해 평문에 대한 서명 값을 생성할 수 있음
- 생성된 서명 값에 대해 공개키를 이용하면 평문을 검증할 수 있음
- 비밀 키 암호의 대표적인 종류
DSA, RSA Signature, ECDSA 등..
암호학적 해시 함수의 조건
- 역상 저항성(프리이미지 저항성): 어떤 해시 값에 대해 원래 입력값(평문)를 찾는것이 어려워야 함, 일방향성 이라고도 부름
- 제2 역상 저항성(제2 프리이미지 저항성): 어떤 입력값(평문)에 대해 그 평문의 해시 값과 같은 해시 값을 가지는 또 다른 메세지(평문)를 찾는것이 어려워야 함
- 충돌 저항성: 같은 해시 값을 가지는 두 입력값(평문)을 찾는 것이 어려워야 함