하나의 secret key를 encrypt와 decrypt에 사용하는 암호화 방식이며 대칭 키 알고리즘에는 두 개의 유형이 존재한다.
암호문을 만들기 위해 암호 키와 알고리즘이 데이터 블록 단위로 적용되는 암호화 방법이다.
패딩
운용 방식
블록 길이
키 길이
전자 코드북(Electronic Codebook; ECB)
블록 별 암호화에 동일한 cipher사용하며 보안에 취약하다.
암호 블록체인(Cipher Block Chaining; CBC)
각 블록은 암호화 전에 이전에 암호화된 블록의 결과와 XOR 연산을 수행하며 첫 번째 블록은 IV(Initialization Vector) 가 사용되고 IV 값은 매 번 바뀐다.
인코딩 시에는 이전 블록의 암호화 결과값이 필요하므로 병렬이 불가능하지만, 디코딩 시에는 암호 연산 이후 이전 값으로 연산을 수행하면 되므로 병렬처리가 가능하다.
암호 피드백(Cipher Feedback; CFB)
CBC의 변형으로 유사하게 동작하지만 암호화된 블록을 생성하기 위해 이전에 암호화된 블록의 값을 키로 암호화하여 현재 평문과 XOR 연산한다.
또한 CFB는 CBC와 달리 암호화를 수행하는 단위가 1 ~ 2 bytes(8 ~ 16bits)의 블록 크기를 가진다. 때문에 암호화 대상 데이터의 크기가 64 bits 이하일 때에도 패딩을 추가할 필요가 없다.
OFB(Output FeedBack)
CFB와 유사하지만 이때 IV를 Key로 암호화한 값을 평문과 XOR 연산을 진행하여 암호화를 진행한다. 이후 다음 블록 암호화에서 XOR 연산하기 이전의 값을 가져와 Vector로 사용한다.
CTR(Counter)
CTR 방식은 블록마다 현재 블록이 몇 번째인지 값을 얻어, 그 숫자와 논스를 결합하고 Key로 암호화한 뒤 이를 평문과 XOR 연산하여 암호문을 생성한다.
이진화된 평문 스트림과 키 스트림을 XOR 연산하여 암호문을 생성한다. 키스트림의 생성 방식에 따라 동기식 스트림 암호, 자기 동기식(비동기) 스트림 암호 등이 있다.
평문 C에 키 스트림 K를 더했을 때 나오는 값을 사용한다.
다만, 이때 모든 문자에 위 작업을 수행할 경우 표현할 수 있는 범위 밖의 값을 얻게된다. 때문에 가능한 범위 의 개수만큼을 나눈 나머지 값을 취한다.
평문에 키 값을 곱하고 모듈러 연산을 통해 암호화된 값을 얻는다. 다만 위 연산에서 곱의 역원을 가지고 있는 원소가 key 값이 되어야 한다.
다만 오히려 곱셈 암호의 경우 덧셈 암호보다 취약한데, 덧셈 암호의 경우 Key의 범위가 1 ~ 26인데 반해 곱셈 암호의 경우 역원만 존재하는 원소들만으로 Key가 이루어지므로 절반 정도 밖에 되지 않는다.
DES를 대체하기 위한 알고리즘으로 56비트 뿐인 DES와 달리 128, 192, 256비트로 3가지 종류의 가변 크기를 제공한다. 평문을 128bits, 또는 16 bytes로 나누어 블록 단위로 암호화를 수행한다.
위에서 언급한 바와 같이 블록은 128비트로 이루어지며 블록은 상태행렬(p0, p1, … p15)로 이루어진다.
AddRoundKey
상태 배열을 마스터 키에서 유도된 서브키와 XOR한다.
SubBytes
해당 단계는 대치 단계로, 룩업 테이블을 사용해 상태 배열의 모든 바이트를 대체한다.
ShiftRows
단계는 첫 번째 행을 제외하고 각 행을 왼쪽으로 점진적으로 순환하는 방식으로 Shift한다.
MixColumns
단계에서는 모든 바이트를 열 단위로 선형 방식으로 혼합한다.
위 4단계로 하나의 Round를 이루게 되며 최종 라운드에서는 4단계를 AddRoundKey로 대체해 앞의 세 단계를 간단히 되돌리지 못하게 한다.
블록 암호화이지만 기존의 블록 암호 알고리즘에 대한 공격에서 안전하다. 현재 알려진 AES에 대한 가장 실질적인 공격 방법은 전수 키 조사이다.
사실상 키를 알지 못하면 복호화할 수 없다.
쇄도 효과는 어떤 암호 알고리즘의 입력 값에 미세한 변화가 발생했을 때 상당한 변화가 발생하는 것을 이야기한다.