JEP's Diary

AES 암호화 본문

Development/개념, 이론

AES 암호화

지으니88 2023. 5. 25. 23:30

AES는 Advanced Encryption Standard의 약자로 '고급 암호화 표준' 이라는 의미이다. 미국 표준 기술 연구소에 의해서 연방 정보 처리 표준으로 지정된 암호화 방식이며 NSA에 의해 1급 비밀에 사용할 수 있도록 승인된 암호화 알고리즘이다. 미국 표준 기술 연구소에서 주최한 공모전에서 레인달(Rijndael) 알고리즘이 채택됐고, 그것이 AES 암호화 알고리즘이다.

암호화 키의 길이가 128, 192, 256비트인 세 가지 종류가 표준이고, 각각 AES128, AES192, AES256으로 불린다.

 

대칭형 블럭 암호화 알고리즘

암호화 키의 길이는 128비트, 192비트, 256비트 세 가지 중 하나가 될 수 있으며, 암호화 키의 길이에 따라 실행하는 라운드의 수가 다른데, 각각 10, 12, 14라운드를 실행한다. 블록 암호화 방식을 사용한다. 블록 암호화는 고정된 크기릐 블록 단위로 데이터를 처리하는 방식이며 AES는 128비트 블록 크기를 지원한다. 입력 데이터 블록과 출력 데이터 블록은 동일한 길이를 갖는다.

 

AES 알고리즘 연산

4개의 연산을 사용한다. 이러한 연산은 대부분 비트 단위로 이루어지며, 여러라운드에서 반복적으로 수행된다.

SubBytes: 16바이트(블록크기)의 데이터에 대해 바이트 단위로 치환을 수행한다. 이 과정에서 S-Box 라는 비선형 치환 테이블을 사용한다.

ShiftRows: 16바이트의 데이터를 행 단위로 순환 이동 시킨다. 이렇게 함으로써 데이터의 패턴을 바꾸어 암호화 품질을 향상시킨다.

MixColumns : 각 열을 다항식 연산으로 변환한다. 이 과정에서 비선형성을 추가하고 전체적인 암호화 효과를 강화한다.

AddRoundKey : 현재 라운드의 라운드 키와 블록의 각 바이트는 XOR 연산한다. 이를 통해 라운드 키와 데이터를 결합하여 암호화를 수행한다.

이러한 연산을 여러 라운드에 걸쳐 반복하면서 암호화가 진행된다. 라운드의 수는 암호화 키의 길이에 따라 결정된다.

 

패딩

패딩은 데이터를 특정 크기로 맞추기 위해 그 크기보다 부족한 부분을 뭔가로 채워 넣는 작업이다.

AES는 블록 암호화 방식으로, 고정된 크기의 블록을 입력으로 받아 암호화된 블록을 출력으로 생성한다. 그러나 실제 데이터는 블록 크기로 정확히 나누어지지 않을 수 있으므로 패딩(padding)이 필요하다.

패딩은 암호화할 데이터의 크기를 암호화 알고리즘에서 처리할 있는 블록 크기로 맞추기 위해 추가되는 데이터이다. 예를 들어, AES 블록 크기는 128비트(16바이트)이므로, 암호화할 데이터가 100바이트라면 28바이트의 패딩이 추가된다.

PKCS#5와 PKCS#7 종류가 있다.

PKCS#5는 는 8바이트 블럭 암호화 기반 기존 알고리즘들에 잘 적용되었던 표준이다. 즉 평문의 길이가 8바이트의 배수를 기준으로 모자라는 수 만큼의 숫자를 채워서 8바이트의 배수로 길이를 맞춘다. 이 패딩은 무조건 반드시 항상 발생해야 한다. 8바이트보다 작은 경우에만 하는 것이 아니라, 8바이트의 배수인 경우에도 패딩은 무조건 해야 한다.

PKCS#7 은 이후 16바이트(128비트) 이상의 블럭 암호화 알고리즘이 나오면서 이 패딩 방식에 대한 표준도 확장이 필요했는데 이때 나오게 되었다. 암호화 블럭 크기가 K바이트인 경우 K바이트보다 작거나 같은 경우 패딩을 적용하라는 것이다. AES의 경우 16바이트 암호화 블럭이 사용되는 알고리즘으로 16바이트 패딩이 적용된다.

 

모드(Mode)와 IV(Initialization Vector, 초기화 벡터)

모드는 블럭 암호화 순서 및 규칙에 대한 표준이다.

 

CBC(Cipher-Block-Chaining) 모드

일반적으로 가장 많이 쓰인다. 최초 평문 1블럭과 IV를 XOR 연산한 다음 암호화하고, 다음 평문 1블럭은 앞에서 암호화된 결과 블럭과 XOR 연산하여 다시 암호화한다. 이 과정을 마지막 블럭까지 반복하는것이 CBC 이다. IV를 사용하지 않고, 각 블럭만 암호화하는 모드인 ECB모드에 비해 훨씬 더 강력한 암호화 기법이다.

 

GCM(Galois-Counter-Mode) 모드

CBC의 취약점을 보완

데이터 값의 Hash 암호화문에 포함되어 데이터 복호화 변조 확인 가능하다.

AES (Advanced Encryption Standard) 암호화 알고리즘과 인증 기능을 결합한 암호화 모드이다.

AES GCM 모드에서는 일반적으로 패딩이 필요하지 않다. GCM 모드는 고정된 크기의 블록을 처리하는 대신, CTR 모드처럼 카운터 값을 사용하여 암호화를 수행하므로 패딩이 필요하지 않다.

GCM 모드는 인증 태그를 생성하여 데이터의 무결성을 보장하는데, 이 인증 태그는 데이터의 길이를 포함하고 있기 때문에 패딩을 추가할 필요가 없다. 따라서 GCM 모드에서는 원본 데이터의 크기에 제약이 없으며, 원본 데이터를 그대로 암호화할 수 있다.

또한, 패딩은 일반적으로 암호화된 데이터의 무결성을 확인하기 위해 사용되는데, GCM 모드에서는 인증 태그가 이 역할을 수행한다. 따라서 별도의 패딩 스킴을 적용할 필요가 없으며, 인증 태그를 통해 데이터의 무결성을 확인할 수 있다.

하지만, 주의해야 할 점은 GCM 모드에서는 IV (Initialization Vector) 값의 중요성이다. IV는 카운터 값으로 사용되며, 임의성과 고유성을 보장해야 한다. IV 값을 잘못 선택하면 보안이 약화될 수 있으므로, 안전한 난수 생성기를 사용하여 무작위 IV 값을 생성해야 한다. IV 값은 암호화된 데이터와 함께 전송되며, 수신 측에서도 동일한 IV 값을 사용하여 복호화와 인증을 수행해야 한다.

안정성

현존 암호화 알고리즘 기술 중 AES가 최강의 암호화 알고리즘이고, 키 없이 해독하는 것이 거의 불가능하다고 평가 받고 있다. 컴퓨터 기술의 급속한 발전에 따라 현재 권장되는 암호화 수준은 192비트 이상이며 대다수의 금융기관이나 웹사이트들은 256비트 이상의 암호화 체계로 전환했다.

'Development > 개념, 이론' 카테고리의 다른 글

니모닉 코드와 마스터 시드 관계  (0) 2023.05.10
MultiCall, MultiCall2  (0) 2023.01.03
Polygon (암호화폐)  (0) 2022.11.10
블록체인 관련 개념  (0) 2022.11.02
JSON-RPC vs REST  (0) 2022.02.16