Symmetric Key Encipherment
하나의 secret key를 encrypt와 decrypt에 사용하는 암호화 방식이며 대칭 키 알고리즘에는 두 개의 유형이 존재한다.
블록암호
암호문을 만들기 위해 암호 키와 알고리즘이 데이터 블록 단위로 적용되는 암호화 방법이다.
패딩
- 블록 암호는 블록 단위로 암호화를 진행하므로 평문의 길이가 블록의 배수가 아니라면 패딩을 추가하여 를 극복한다.
- 이때 사용하는 패딩 알고리즘에서 가장 중요한 점은 패딩된 메시지 P(M) 으로부터 원본 메시지 M을 찾아야한다는 것이다.
운용 방식
- 각 블록들에 대해서 각각 암호화를 진행하는 방식을 운용 방식이라 부른다.
블록 길이
- 주로 64, 128bits를 사용한다.
키 길이
- 키 길이에는 40, 56, 64, 80, 128, 192, 256 bits가 존재한다.
전자 코드북(Electronic Codebook; ECB)
블록 별 암호화에 동일한 cipher사용하며 보안에 취약하다.
암호 블록체인(Cipher Block Chaining; CBC)
각 블록은 암호화 전에 이전에 암호화된 블록의 결과와 XOR 연산을 수행하며 첫 번째 블록은 IV(Initialization Vector) 가 사용되고 IV 값은 매 번 바뀐다.
인코딩 시에는 이전 블록의 암호화 결과값이 필요하므로 병렬이 불가능하지만, 디코딩 시에는 암호 연산 이후 이전 값으로 연산을 수행하면 되므로 병렬처리가 가능하다.
암호 피드백(Cipher Feedback; CFB)
CBC의 변형으로 유사하게 동작하지만 암호화된 블록을 생성하기 위해 이전에 암호화된 블록의 값을 키로 암호화하여 현재 평문과 XOR 연산한다.
- CBC: XOR → Encoding
- CFB: Encoding → 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 연산하여 암호문을 생성한다. 키스트림의 생성 방식에 따라 동기식 스트림 암호, 자기 동기식(비동기) 스트림 암호 등이 있다.
Additive Ciphers
평문 C에 키 스트림 K를 더했을 때 나오는 값을 사용한다.
다만, 이때 모든 문자에 위 작업을 수행할 경우 표현할 수 있는 범위 밖의 값을 얻게된다. 때문에 가능한 범위 의 개수만큼을 나눈 나머지 값을 취한다.
Multiplicative Cipher
평문에 키 값을 곱하고 모듈러 연산을 통해 암호화된 값을 얻는다. 다만 위 연산에서 곱의 역원을 가지고 있는 원소가 key 값이 되어야 한다.
다만 오히려 곱셈 암호의 경우 덧셈 암호보다 취약한데, 덧셈 암호의 경우 Key의 범위가 1 ~ 26인데 반해 곱셈 암호의 경우 역원만 존재하는 원소들만으로 Key가 이루어지므로 절반 정도 밖에 되지 않는다.
AES
DES를 대체하기 위한 알고리즘으로 56비트 뿐인 DES와 달리 128, 192, 256비트로 3가지 종류의 가변 크기를 제공한다. 평문을 128bits, 또는 16 bytes로 나누어 블록 단위로 암호화를 수행한다.
위에서 언급한 바와 같이 블록은 128비트로 이루어지며 블록은 상태행렬(p0, p1, … p15)로 이루어진다.
- 위 상태행렬에서 열 순서대로 하나의 키를 사용하는데 이를 라운드 키라고 하고 각 라운드마다 키 하나를 생성한다.
- 키를 하나 씩 추가 생성하는 것을 KeyExpansion이라고 하고 암호가 어떤 종류의 공격에도 견고하도록 키를 변경하는 것을 Key Whitening이라고 한다.
- 이렇게 라운드 키를 얻게 때마다 각 바이트에 해당하는 상태 행렬의 바이트와 XOR 연산을 수행한다.
- 이후 AddRoundKey 연산의 결과에 일련의 라운드를 수행한다.
- 이때 라운드 개수는 키의 크기에 따라 바뀌는데 표는 다음과 같다. 사용하는 암호화 키의 길이에 따라 암호화와 복호화에 필요한 라운드 수가 달라지는데 이는 다음과 같다.
- 입력에 따라 암호에 대한 상태 배열을 초기화하고 나면, 입력을 암호화하기 위해 4개 연산의 네 단계에 걸쳐 수행된다.(AddRoundKey, SubBytes, ShiftRows, MixColumns)
AddRoundKey
상태 배열을 마스터 키에서 유도된 서브키와 XOR한다.
SubBytes
해당 단계는 대치 단계로, 룩업 테이블을 사용해 상태 배열의 모든 바이트를 대체한다.
ShiftRows
단계는 첫 번째 행을 제외하고 각 행을 왼쪽으로 점진적으로 순환하는 방식으로 Shift한다.
MixColumns
단계에서는 모든 바이트를 열 단위로 선형 방식으로 혼합한다.
위 4단계로 하나의 Round를 이루게 되며 최종 라운드에서는 4단계를 AddRoundKey로 대체해 앞의 세 단계를 간단히 되돌리지 못하게 한다.
AES 공격 방법과 시간
블록 암호화이지만 기존의 블록 암호 알고리즘에 대한 공격에서 안전하다. 현재 알려진 AES에 대한 가장 실질적인 공격 방법은 전수 키 조사이다.
- 2011년 Biclique 암호분석을 이용한 Key-recovery attack(키 찾기 공격)
- 소요시간 ∶ 2^126
사실상 키를 알지 못하면 복호화할 수 없다.
Avalanche Effect
쇄도 효과는 어떤 암호 알고리즘의 입력 값에 미세한 변화가 발생했을 때 상당한 변화가 발생하는 것을 이야기한다.
'암호학' 카테고리의 다른 글
Digital Signature (0) | 2023.10.14 |
---|---|
Message Authentication && Hashing (0) | 2023.10.14 |
Asymmetric Key Encipherment (0) | 2023.10.14 |
AESAdvanced-Encryption-Standard-algorithm (0) | 2023.06.10 |