Android (안드로이드)

[Android] AES (1) - AES란? / 암호화 / 복호화 사용해보기

Oscar:) 2024. 8. 18. 17:33

 

 

 

이번 포스팅에서는 AES 암호화에 대해 알아본다.

 

 

 


 

AES 란?

 

 

✅ Advanced Encryption Standard의 약자로

직역하면 고급 암호화 표준이다.

 

 

 

✅ 높은 안정성과 빠른 속도를 자랑하기에 현재 대중적으로

가장 많이 사용되는 암호화 알고리즘이라 할 수 있다.

 

 

 

✅ AES는 대칭키를 사용하는 대표적인 방식으로

암호화 · 복호화 작업에 동일한 키를 사용한다.

 

이는 비대칭키를 사용하는 방식보다 속도가 빠르다는 장점이 있지만,

키가 1개이기 때문에, 탈취당할 시 기밀성을 유지하지 못한다는 단점도 있다. 

 

 

 


 

AES 요소

 

 

✅ Secret Key

 

암호화 키는 128, 192, 256 세 가지로 사용할 수 있고,

각 숫자는 bit 수를 의미하며 곧 키의 길이이다.

그리고 각 키는 AES-128, AES-192, AES-256 으로 불린다.

 

대칭키 방식이기 때문에, Secret Key가 유출되는 순간 암호화는 의미를 잃게 된다.

그렇기에 Secret Key는 절대 외부에 유출되어서는 안 된다.

 

 

 

 

✅ IV

 

Initalize Vector의 약자로, 직역하면 초기화 벡터를 의미한다.

대칭키 암호화에서 사용되는 매개변수 중 하나이다.

 

Cipher Mode에서 CBC 방식을 사용할 때 꼭 필요한 값이다.

CBC는 이전 블록과의 연산을 통해 암호화를 진행하는데,

1번 째 블록은 이전 블록이 존재하지 않기 때문에 IV 값이 대체해준다.

 

값으로는 Secret Key를 따와서 사용하는 경우도 많고,

전혀 연관 없는 새로운 문자열을 사용하여 2차 보안 용도로 사용하는 케이스도 있다.

 

16 bytes 형식으로만 사용해주면 된다.

 

 

 

 

✅ Cipher Mode

 

AES는 블록 암호화 방식을 사용하는데, 블록 암호화에도 종류가 많다.

 

블록 암호화는 데이터를 고정된 길이만큼 쪼개서 블록 단위로 처리하는 것을 말한다.

Cipher Mode는 이 쪼개진 상태로 암호화 처리한 블록들을 다시 연결하는 방식을 정의한다.

 

CBC, ECB, CTR 등 종류가 많지만, 일반적으로 CBC가 가장 많이 사용된다.

 

 

 

 

✅ Padding Mode

 

마지막 블록이 블록 크기보다 작을 경우 부족한 바이트를 채우는 방식을 정의한다.

PKCS5, PKCS7 등이 있다.

 

 

 

 


 

AES 암호화 · 복호화 흐름

 

 

✅ 암호화
Text → Byte → 암호화 → 암호화된 Byte → 암호화된 Base64 인코딩 Text

✅ 복호화
암호화된 Base64 인코딩 Text → 암호화된 Byte → 복호화 → Byte → Text

 

 

흐름을 보면 알겠지만, 순서만 반대일 뿐 작업 내용은 동일하다.

 

 

 

● Text  Byte / Byte → Text 에서 Base64란?

 

Base64는 이진 데이터를 플레인 텍스트로 인코딩하는 방식일 뿐,

암호화 알고리즘과는 전혀 상관이 없다.

 

암호화 이후의 데이터가 이진 데이터라면 데이터 교환 · 보관 등에 불편함이 있기에

플레인 텍스트로 인코딩하는 것이 일반적일 뿐이다.

 

 

 


 

암호화 실습

 

 

AES 암호화를 간단히 처리할 수 있는 웹 사이트다.

 

 

온라인 AES 암호화 도구

 

tool.hiofd.com

 

 

 

위 사이트에서 AES 암호화를 진행해보겠다.

 

 

빨간 체크 표시한대로 데이터를 입력해주자.

 

● 암호화할 데이터는 1234 이다.

● 키는 SecretKey를 의미하며, 위에서 설명했듯이
- 16 bytes = AES-128
- 24 bytes = AES-192
- 32 bytes = AES-256
위 3가지 중 하나의 형식만 이용할 수 있다.
(알파벳 1개당 1바이트 = 16 bytes = 알파벳 16글자)

● IV 또한 16 bytes 형식을 갖추어야 한다.

● Cypher Mode는 CBC로, 패딩 방식은 PKCS#5로 세팅했다.

● 텍스트 형식은 UTF-8, 출력 형식은 Base64로 체크해준다.

 

 

암호화된 데이터는 pGdMV2bloo6uHHbThpKbJA== 가 출력되었다.

 

 

 


 

복호화 실습

 

 

복호화 작업을 간단히 처리할 수 있는 동일한 웹 사이트다.

 

 

온라인 AES 복호화 도구

 

tool.hiofd.com

 

 

 

위 예제에서 암호화 처리된 pGdMV2bloo6uHHbThpKbJA== 를 넣고

동일한 세팅을 처리해주자.

 

 

 

복호화 결과로 초기에 입력했던 1234가 출력되었다!

 

 

 

 

당연히 SecretKey에 다른 값을 넣으면

 

 

초기 데이터가 출력되지 않고 엉뚱한 값을 내놓는다.

 

 

 

 


 

 

 

AES 암호화 · 복호화에 대해 간단히 알아보았다.

 

다음 포스팅에서는 안드로이드 환경에서 AES를 다루는 법을 알아보자.