'Etc/Cipher'에 해당하는 글 3건

AES(Advanced Encryption Standard)구조에 대해서 설명하려고 한다. AES는 DES(Data Encryption Standard)암호가 깨져서 새로 2000년대 새로등장한 블록암호이다. 안전하고 속도가 빨라서 현재까지도 쓰이고 있는 그런 암호체계이다.



위 사진은 AES의 구조를 간단 명료하게 표현한 사진이다. AES는 DES와 달리 구조가 심플하게 이루어졌다는게 내생각이다. 총 4개의 알고리즘으로 구성된다.(SubBytes, ShiftRows, MixColumns, AddRoundKey). 차례차례 보기로 한다.


SubBytes는 각각의 바이트를 S박스에 대응되는 값으로 치환하는 과정이다.



위 사진은 S박스를 나타낸다. 예를들어 0x43의 값은 S박스를 통해서 0x1A의 값으로 치환된다.

ShiftRows는 행을 왼쪽으로 쉬프트연산 하는 알고리즘이다.

위 사진은 ShiftRows의 과정을 보여준다. 한블록(16바이트)를 4x4 형태로 분류한다. 맨위의 행은 값이 변하지않고 2번째행부터 왼쪽으로 쉬프트 연산이 이루어진다.3번째는 2번 이루어지고, 4번째는 3번이루어진다.


MixColumns는 문자 그대로 열을 믹스하는 알고리즘이다.


MixColumns는 각각의 열단위로 위 값을 XOR시켜 나온 값이다. 


마지막으로 AddRoundKey는 각각의 라운드키와 상태값을 XOR시킨 값이다.



키 확장함수에 의해 만들어진 각각의 키는 각 상태값과 XOR된다. 


AES의 구조의 특징은 맨처음 평문(Planetext)에서 AddRoundkey 알고리즘을 한번 거친 후에 암호문 라운드로 진입한다. 그리고 마지막 라운드에는 MixColumns 알고리즘이 존재하지 않는다. AES는 DES에 비해 수학적 공식이 다소 필요한 구조이다. 자세히 구조를 관찰하면 이해하기 난해할 수도 있지만, 전체적인 구조 및 맥락은 이러한 방식으로 진행된다.


이 글은 단순히 글쓴이의 머리속 내용을 끄집어서 작성된 것이라. 다소 내용이 이상하거나 하는 점이 있을 수 있음.



'Etc > Cipher' 카테고리의 다른 글

DES(Data Encryption Standard)  (0) 2017.09.26
HMAC 에 대해서...  (0) 2014.10.03
,

오늘은 DES(Data Encryption Standard, 이하 데스)의 구조에 대해서 알아볼까 한다. 대칭키암호의 종류로는 블록암호 와 스트림암호로 나뉘는데, 그중 블록암호의 한 종류인 데스에 대해서 설명한다. 데스는 1970년대 쯤에 미국 NIST에서 개발이 되어 2000년도 전에 암호가 깨진 사례가 있었다. 그로인해 새로운 암호가 필요했는데, 그게 AES(Advanced Encryption Standard)이다. 이름에서도 알수 있듯이 어드벤스드 된 암호이다. 말이 샜는데, 데스 구조에 대해서 알아보자.




위 사진은 데스 알고리즘이다. 간단하게 보면 맨위의 인풋(평문)이 들어가면 중간의 암호화 과정을 통해 아웃풋(암호문)으로 나오는 과정이다. 데스는 인풋으로 평문 64bit가 들어간다. 즉. 평문을 64bit씩 쪼개어 암호화를 한다. 64비트가 인풋되면 초기치환(IP, Initial Permutation)을 통해 64비트 값이 치환된다. 치환된 64비트는 32비트 32비트 이렇게 딱 반을 쪼갠다. 레프트0 라이트0로 표현을 한다.(뒤에 숫자는 라운드 수를 의미) 라이트0는 레프트1로 바로 내려오고, 레프트0의 값에 영향을 미친다. 즉. 라이트0은 f함수의 인풋으로 32비트 들어간다. F함수는 라이트0(32비트)와 스케줄된 키(48비트)가 인풋된다. F함수는 함수 내부적인 과정을 통해 32비트를 아웃풋하고 레프트0와 XOR연산을 취한다. 그값이 라이트1번으로 넘어간다. F함수는 뒤에서 한번더 얘기해볼까 한다. F함수가 데스의 핵심이라고 나는 생각한다.. 이러한 과정이 16번 돌아가면서(16라운드) 맨마지막에 레프트15 라이트15 값의 위치만 바뀐다. 마지막으로 초기치환의 역을 계산하면 암호화 과정이 종결된다. 



위 사진은 f함수의 내부구조이다. DES구조를 보면 맨처음에 라이트0번이 f함수로 인풋된다. 인풋된 32비트는 확장(Expansion)을 통해 48비트로 확장된다. 그값이랑 키 스케줄러에 의해 만드러진 각각의 라운드 키랑 XOR을 취한다. 키 스케줄러는 좀있다 설명하려고 한다. XOR취한 값은 48비트로, 48비트는 6비트를 8개로 쪼개어 분류한다. 각각의 6비트는 S박스를 통해 4비트로 축소된다(4비트 * 8개, 32비트). 32비트 의 값은 치환과정을 거쳐 아웃풋으로 나오게된다.




마지막으로 위 사진은 키 스케줄러의 구조이다. 위 과정을 통해 각각의 라운드에 맞는 각각의 라운트키가 생성이 된다.

여기서 키(56비트)는 PC를 통해 각각 28, 28비트로 나뉘어진다. 나뉜 값은 각각 쉬프트 연산을 통해 48비트로 변환 된다.

이 과정을 16번(16라운드)를 통해서 각각의 라운드에 맞는 라운드키가 생성이 된다.


이글은 내 머리속에서 나온내용이라 다소 내용이 틀릴수도 있으니, 읽다가 내용이 이상하면 언제든지 댓글로 남겨주시면 감사하겠습니다.





'Etc > Cipher' 카테고리의 다른 글

AES(Advanced Encryption Standard) 구조  (0) 2017.09.27
HMAC 에 대해서...  (0) 2014.10.03
,

HMAC 에 대해서...

Etc/Cipher 2014. 10. 3. 20:15

HMAC 이란

Hash-based Message Authentification Code 의 약자이다.

말 그대로 해쉬 기반이되는 MAC이다.

 

MAC은

송신자와 수신자간에 비밀키를 공유하고있고

송신자는 메세지에 비밀키를  사용해서 MAC값을 만들고

메세지와 MAC값을 수신자에게 보낸다.

 

수신자는 받은 메세지와 MAC을

자신이 메세지와 비밀키를 이용해서 MAC을 만들고

받은 MAC과 자신이만든 MAC을 비교한후

같으면 메세지가 변조되지 않았다는것을  확인할 수 있다.

 

여기에 해쉬함수만 적용하면 HMAC이 된다.

 

'Etc > Cipher' 카테고리의 다른 글

AES(Advanced Encryption Standard) 구조  (0) 2017.09.27
DES(Data Encryption Standard)  (0) 2017.09.26
,