의견.png

"레인달"의 두 판 사이의 차이

해시넷
이동: 둘러보기, 검색
(새 문서: '''레인달'''(Rijndael)이란 == 개요 == {{각주}} == 참고자료 == * 고급 암호화 표준 위키백과 - https://ko.wikipedia.org/wiki/%EA%B3%A0%EA%B8%89_%EC%95%94%ED%9...)
 
1번째 줄: 1번째 줄:
'''레인달'''(Rijndael)이란
+
'''레인달'''(Rijndael)은 벨기에의 암호학자 [[존 대먼]](Joan Daemen)과 [[빌센트 라이먼]](Vincent Rijmen)에 의해 개발된 대칭 키 알고리즘이다. 미국 국립표준기술 연구소에서 진행한 차세대 암호 알고리즘 공모에서 마지막으로 선정되었다. 즉, 공모에서 채택되었으므로 레인달 알고리즘은 [[AES]]이다.
  
 
== 개요 ==
 
== 개요 ==
 +
1997년 1월 2일에 미국 국립표준기술 연구소는 [[DES]]를 대체할 새로운 암호 기법의 필요성을 느끼고, [[3DES]]와 같거나 더 뛰어난 보안성을 갖고 개선된 암호 기법을 공모했다. 선정될 암호의 정식적인 이름은 1997년 9월 2일에 AES로 정해졌다. 이것이 바로 레인달 알고리즘이다.
 +
 +
레인달 알고리즘은 크게 네 단계로 나뉜다.
 +
# 키 확장 : 키 스케줄이라고도 부른다. 128, 192, 256비트 길이인 하나의 주 암호화 키를 받아서 아래의 라운드 들에서 사용할 128비트 라운드 키를 여러 개 생성한다.
 +
# 0 라운드 : 위 단계에서 생성한 라운드 키들 중 첫 번째 킬를 사용하며, AddRoundKey키를 한 번 실행한다.
 +
# 1~(9, 11, 13) 라운드 : SubBytes, ShiftRows, MixColumns, AddRoundKey를 순서대로 실행한다. 이 과정을 AES-128, 192, 256에 따라 각각 9번, 11번, 13번씩 반복한다.
 +
# 마지막 10, 12, 14번째 라운드 : SubBytes, ShiftRows, AddRoundKey를 차례대로 실행한다.
 +
 +
== 특징 ==
 +
AES, 즉 레인달 알고리즘의 특징 중 하나는 파이스텔 구조가 아니라는 점이다. 전형적인 파이스텔 구조는 데이터 블록의 반쪽을 다른 반쪽을 수정하는 데 사용하고, 그 두 반쪽을 서로 교환했다. AES는 파이스텔 구조를 사용하지 않고 각 라운드에서 대체와 치환을 이용하여 데이터 블록의 전체를 병렬 처리한다. 또, 입력으로 사용하는 키를 44개의 32비트 워드 배열로 확장한다. 4개의 서로 다른 128비트 워드를 각 라운드에서 라운드 키로 사용한다. 다음의 네 가지 단계를 이용하는데, 치환 한 번과 대체 세 번이다.
 +
* 바이트 대체 : [[S-box]] 표를 이용하여 바이트 단위 형태로 블록을 교환한다.
 +
* 행 이동 : 단순히 행과 행을 치환한다.
 +
* 열 섞기 : 열에 속한 모든 바이트를 순환 행렬을 이용하여 함수로 열에 있는 각 바이트를 대체해서 변형시킨다.
 +
* 라운드 키 더하기 : 확장된 키의 일부와 현재 블록을 비트별로 [[XOR]]한다.
 +
암호와 복호를 위하여 라운드 키 더하기 단계에서 시작하며, 각 라운드에서는 네 단계를 모두 포함하는 9라운드를 수행하고, 세 단계로 구성된 열 번째 라운드를 수행한다. 주의해야 할 점은 오직 라운드 키 더하기 단계에서만 키를 사용해야 한다는 것이다. 그래서 암호화와 복호화 과정의 시작과 끝은 항상 라운드 키 더하기 단계이다. 시작이나 끝에 수행되는 다른 단계들은 키 없이 역방향 계산이 가능하기 때문에, 보안을 강화하는 데는 별다른 역할을 하지 못한다. 라운드 키 더하기 단계는 그 자체는 강력하지 않으나, 세 단계와 같이 작동하여 비트를 뒤섞는 역할을 수행한다. 그러나 각각은 키를 사용하지 않기 때문에 보안성을 제공하는 것은 아니다. 이 암호 단계를 살펴보면 블록에 XOR 암호화를 하고, 그 다음 블록을 뒤섞고, 그 뒤에 다시 XOR 암호화를 하는 것으로 이를 번갈아서 적용하는 것을 볼 수 있다. 이 구조는 효과적이고 보안성을 매우 강화시킨다.
 +
 +
각 단계를 역으로 계산하는 것은 쉽다. 바이트 대체, 행의 이동, 열 섞기 단계는 복호화 알고리즘에서 사용되는 역함수이다. 라운드 키 더하기 단계에서는 같은 라운드 키를 블록에 XOR 수행해서 역을 계산한다. 대부분의 블록 암호처럼 복호화 알고리즘에서는 확장 키를 순서를 뒤집어서 적용하는데, 복호화 알고리즘과 암호화 알고리즘이 동일한 것은 아니다. 이것이 바로 AES의 구조가 가지고 있는 특성이다. 네 단계가 모두 역 계산이 가능하기 때문에 복호화를 하면 평문을 얻을 수 있는 것이 당연하다. 암호화와 복호화의 마지막 라운드는 세 단계로만 구성된다. 이러한 특성들은 AES암호가 역으로 잘 작동되도록 하기 위해 필요한 조치이다.<ref> 고급 암호화 표준 위키백과 - https://ko.wikipedia.org/wiki/%EA%B3%A0%EA%B8%89_%EC%95%94%ED%98%B8%ED%99%94_%ED%91%9C%EC%A4%80 </ref>
  
 
{{각주}}
 
{{각주}}
7번째 줄: 24번째 줄:
 
== 참고자료 ==
 
== 참고자료 ==
 
* 고급 암호화 표준 위키백과 - https://ko.wikipedia.org/wiki/%EA%B3%A0%EA%B8%89_%EC%95%94%ED%98%B8%ED%99%94_%ED%91%9C%EC%A4%80
 
* 고급 암호화 표준 위키백과 - https://ko.wikipedia.org/wiki/%EA%B3%A0%EA%B8%89_%EC%95%94%ED%98%B8%ED%99%94_%ED%91%9C%EC%A4%80
 +
* AES 나무위키 - https://namu.wiki/w/AES
 +
* thenine, 〈[http://thenine.egloos.com/373318 AES와 Rijndael]〉, 《이글루스》, 2008-05-22
 +
* Moserware, 〈[http://www.moserware.com/2009/09/stick-figure-guide-to-advanced.html A Stick Figure Guide to the Advanced Encryption Standard (AES)]〉, 《디스커스》, 2009-11-22
 +
* Ho_use, 〈[https://xn--vj5b11biyw.kr/27?category=788423 AES암호화 (Rijndael 알고리즘)]〉, 《티스토리》, 2018-01-25
 +
* Ho_use, 〈[https://xn--vj5b11biyw.kr/28?category=788423 AES복호화 (Rijndael 알고리즘)]〉, 《티스토리》, 2018-01-26
 +
* 와이준Nye, 〈[https://yjshin.tistory.com/entry/%EC%95%94%ED%98%B8%ED%95%99-%EB%8C%80%EC%B9%AD%ED%82%A4-%EC%95%94%ED%98%B8-AESAdvanced-Encrytion-Standard (암호학) 대칭키 암호 - AES(Advanced Encrytion Standard)]〉, 《티스토리》, 2019-11-15
  
 
== 같이 보기 ==
 
== 같이 보기 ==

2020년 8월 28일 (금) 17:52 판

레인달(Rijndael)은 벨기에의 암호학자 존 대먼(Joan Daemen)과 빌센트 라이먼(Vincent Rijmen)에 의해 개발된 대칭 키 알고리즘이다. 미국 국립표준기술 연구소에서 진행한 차세대 암호 알고리즘 공모에서 마지막으로 선정되었다. 즉, 공모에서 채택되었으므로 레인달 알고리즘은 AES이다.

개요

1997년 1월 2일에 미국 국립표준기술 연구소는 DES를 대체할 새로운 암호 기법의 필요성을 느끼고, 3DES와 같거나 더 뛰어난 보안성을 갖고 개선된 암호 기법을 공모했다. 선정될 암호의 정식적인 이름은 1997년 9월 2일에 AES로 정해졌다. 이것이 바로 레인달 알고리즘이다.

레인달 알고리즘은 크게 네 단계로 나뉜다.

  1. 키 확장 : 키 스케줄이라고도 부른다. 128, 192, 256비트 길이인 하나의 주 암호화 키를 받아서 아래의 라운드 들에서 사용할 128비트 라운드 키를 여러 개 생성한다.
  2. 0 라운드 : 위 단계에서 생성한 라운드 키들 중 첫 번째 킬를 사용하며, AddRoundKey키를 한 번 실행한다.
  3. 1~(9, 11, 13) 라운드 : SubBytes, ShiftRows, MixColumns, AddRoundKey를 순서대로 실행한다. 이 과정을 AES-128, 192, 256에 따라 각각 9번, 11번, 13번씩 반복한다.
  4. 마지막 10, 12, 14번째 라운드 : SubBytes, ShiftRows, AddRoundKey를 차례대로 실행한다.

특징

AES, 즉 레인달 알고리즘의 특징 중 하나는 파이스텔 구조가 아니라는 점이다. 전형적인 파이스텔 구조는 데이터 블록의 반쪽을 다른 반쪽을 수정하는 데 사용하고, 그 두 반쪽을 서로 교환했다. AES는 파이스텔 구조를 사용하지 않고 각 라운드에서 대체와 치환을 이용하여 데이터 블록의 전체를 병렬 처리한다. 또, 입력으로 사용하는 키를 44개의 32비트 워드 배열로 확장한다. 4개의 서로 다른 128비트 워드를 각 라운드에서 라운드 키로 사용한다. 다음의 네 가지 단계를 이용하는데, 치환 한 번과 대체 세 번이다.

  • 바이트 대체 : S-box 표를 이용하여 바이트 단위 형태로 블록을 교환한다.
  • 행 이동 : 단순히 행과 행을 치환한다.
  • 열 섞기 : 열에 속한 모든 바이트를 순환 행렬을 이용하여 함수로 열에 있는 각 바이트를 대체해서 변형시킨다.
  • 라운드 키 더하기 : 확장된 키의 일부와 현재 블록을 비트별로 XOR한다.

암호와 복호를 위하여 라운드 키 더하기 단계에서 시작하며, 각 라운드에서는 네 단계를 모두 포함하는 9라운드를 수행하고, 세 단계로 구성된 열 번째 라운드를 수행한다. 주의해야 할 점은 오직 라운드 키 더하기 단계에서만 키를 사용해야 한다는 것이다. 그래서 암호화와 복호화 과정의 시작과 끝은 항상 라운드 키 더하기 단계이다. 시작이나 끝에 수행되는 다른 단계들은 키 없이 역방향 계산이 가능하기 때문에, 보안을 강화하는 데는 별다른 역할을 하지 못한다. 라운드 키 더하기 단계는 그 자체는 강력하지 않으나, 세 단계와 같이 작동하여 비트를 뒤섞는 역할을 수행한다. 그러나 각각은 키를 사용하지 않기 때문에 보안성을 제공하는 것은 아니다. 이 암호 단계를 살펴보면 블록에 XOR 암호화를 하고, 그 다음 블록을 뒤섞고, 그 뒤에 다시 XOR 암호화를 하는 것으로 이를 번갈아서 적용하는 것을 볼 수 있다. 이 구조는 효과적이고 보안성을 매우 강화시킨다.

각 단계를 역으로 계산하는 것은 쉽다. 바이트 대체, 행의 이동, 열 섞기 단계는 복호화 알고리즘에서 사용되는 역함수이다. 라운드 키 더하기 단계에서는 같은 라운드 키를 블록에 XOR 수행해서 역을 계산한다. 대부분의 블록 암호처럼 복호화 알고리즘에서는 확장 키를 순서를 뒤집어서 적용하는데, 복호화 알고리즘과 암호화 알고리즘이 동일한 것은 아니다. 이것이 바로 AES의 구조가 가지고 있는 특성이다. 네 단계가 모두 역 계산이 가능하기 때문에 복호화를 하면 평문을 얻을 수 있는 것이 당연하다. 암호화와 복호화의 마지막 라운드는 세 단계로만 구성된다. 이러한 특성들은 AES암호가 역으로 잘 작동되도록 하기 위해 필요한 조치이다.[1]

각주

참고자료

같이 보기


  의견.png 이 레인달 문서는 암호 알고리즘에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.