HIGHT 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
1번째 줄: 1번째 줄:
'''HIGHT'''(HIGh security and light weigHT)[[GFS]]구조의 64비트 경량 [[블록]] [[암호 알고리즘]]이다. 저전력 및 경량화를 요구하는 컴퓨팅 환경 혹은 모바일 환경에서 기밀성을 제공하기 위해 개발되었다. 2005년 [[KISA]], [[ETRI]] 부설연구소 및 [[고려대]]가 공동으로 개발했다.
+
'''HIGHT'''(HIGh security and light weigHT) 암호 알고리즘은 [[RFID]], [[USN]] 등과 같이 저전력ㆍ경량화를 요구하는 컴퓨팅 환경에서 기밀성을 제공하기 위해 2005년 [[KISA]], [[ETRI]] 부설연구소 및 [[고려대]]가 공동으로 개발한 [[GFS]]구조의 64비트 경량 블록 암호 알고리즘이다. 스마트폰, 스마트카드 및 RFID등과 같이 저전력, 경량화를 요구하는 모바일 환경에서 기밀성 있는 보안을 확보하기 위해 개발되었다.
 +
 
 +
== 특징 ==
 +
* 휴대형 기기 및 모바일 환경에 적합하도록 특수 설계되었고, 전력 소비가 적도록 개발된 블록 암호화 알고리즘이다.
 +
* 8비트 단위의 기본적인 산술연산, XOR, 순환이동만으로 사용가능 하도록 간단구조로 설계되었다.
 +
* 128비트 국산암호화 알고리즘 [[SEED]]에 비해 제한된 호나경에 적용하기위해 매우 간단한 구조의 안전성, 효율성을 동시에 고려하였다.
 +
* 메모리와 같은 하드웨어 자원이 부족한 환경에 적합하도록 일반적인 블록 암호화 알고리즘과는 다르게 [[S-Box]](Substitution-box)를 제거하였다.
 +
* 2006년 12월 정보통신단체 표준으로 제정되었다.
 +
* 2010년 12월 ISO/IEC 국제 표준으로 제정되었다.<ref>경수, 〈[https://blog.naver.com/rudtn082/220923768132 HIGHT 암호 알고리즘에 대해]〉, 《네이버 블로그》 , 2017-01-31</ref>
  
== 개요 ==
 
HIGHT는 [[RFID]], [[USN]] 등과 같이 저전력 및 경량화를 요구하는 컴퓨팅 환경, 혹은 [[스마트폰]], [[스마트카드]] 및 [[RFID]]등과 같이 저전력, 경량화를 요구하는 [[모바일]] 환경에서 기밀성을 제공하기 위해 개발된 블록 암호화 알고리즘이다. 이는 휴대형 기기 및 모바일 환경에 적합하도록 특수 설계되었고, 전력 소비가 적도록 개발되었다. 또한 8비트 단위의 기본적인 산술연산, [[XOR]], 순환이동만으로 사용가능 하도록 간단구조로 설계되었다. HIGHT는 128비트 국산암호화 알고리즘 [[SEED]]에 비해 제한된 환경에 적용하기 위해 매우 간단한 구조의 안전성, 효율성을 동시에 고려하였으며, [[메모리]]와 같은 [[하드웨어]] 자원이 부족한 환경에 적합하도록 일반적인 블록 암호화 알고리즘과는 다르게 [[S-Box]](Substitution-box)를 제거하였다. 2006년 12월에는 정보통신단체 표준으로, 2010년 12월에는 ISO/IEC 국제 표준으로 제정되었다.<ref>경수, 〈[https://blog.naver.com/rudtn082/220923768132 HIGHT 암호 알고리즘에 대해]〉, 《네이버 블로그》 , 2017-01-31</ref>
 
  
 
== 알고리즘 ==
 
== 알고리즘 ==
9번째 줄: 15번째 줄:
 
===  기호와 표기 ===
 
===  기호와 표기 ===
 
64비트 평문과 암호문은 각각 8개의 바이트로 다음과 같다.
 
64비트 평문과 암호문은 각각 8개의 바이트로 다음과 같다.
 
 
  * 평문 : <math> P_{7} \ || \ P_{6} \ ||  \cdots || \ P_{0} </math>
 
  * 평문 : <math> P_{7} \ || \ P_{6} \ ||  \cdots || \ P_{0} </math>
 
  * 암호문 : <math> C_{7} \ || \ C_{6} \ || \cdots || \ C_{0} </math>
 
  * 암호문 : <math> C_{7} \ || \ C_{6} \ || \cdots || \ C_{0} </math>
  
 
64비트 라운드 함수 입·출력은 8개의 바이트로 다음과 같다.
 
64비트 라운드 함수 입·출력은 8개의 바이트로 다음과 같다.
 
+
  * <math> X_{i} = X_{i,7} \ || \ X_{i,6} \ || \cdots || \ X_{i,0}, i=0, \cdots ,32 </math>
  <math> X_{i} = X_{i,7} \ || \ X_{i,6} \ || \cdots || \ X_{i,0}, i=0, \cdots ,32 </math>
 
  
 
128비트 키(마스터키)는 16개의 바이트로 다음과 같다.
 
128비트 키(마스터키)는 16개의 바이트로 다음과 같다.
 
+
  * <math> MK = MK_{15} \ || \ MK_{14} \ || \cdots || \ MK_{0} </math>
  <math> MK = MK_{15} \ || \ MK_{14} \ || \cdots || \ MK_{0} </math>
 
  
 
라운드 함수에 적용되는 라운드키는 서브키(<math> SK_{i} </math>)와 화이트닝키(<math> WK_{i} </math>)로 다음과 같다.
 
라운드 함수에 적용되는 라운드키는 서브키(<math> SK_{i} </math>)와 화이트닝키(<math> WK_{i} </math>)로 다음과 같다.
 
+
  * <math> SK_{i}, i=0,\cdots ,127 </math>
  <math> SK_{i}, i=0,\cdots ,127 </math>
+
  * <math> WK_{i}, i=0,\cdots ,7 </math>
  <math> WK_{i}, i=0,\cdots ,7 </math>
 
  
 
산술 연산 기호
 
산술 연산 기호
 
+
  * ⊞ : 법 <math> 2^{8} </math> 덧셈
  ⊞ : 법 <math> 2^{8} </math> 덧셈
+
  * ⊟ : 법 <math> 2^{8} </math> 뺄셈
  ⊟ : 법 <math> 2^{8} </math> 뺄셈
+
  * ⊕ : XOR (배타적 논리합)
  ⊕ : XOR (배타적 논리합)
+
  * <math> A^{<<8} </math> : 8비트 값 A에 대한 8비트 좌측 순환 이동
  <math> A^{<<8} </math> : 8비트 값 A에 대한 8비트 좌측 순환 이동
 
  
 
===  키 스케줄 ===
 
===  키 스케줄 ===
 
HIGHT의 라운드키는 화이트닝키와 LFSR을 사용하여 생성한 서브키들로 이루어진다.
 
HIGHT의 라운드키는 화이트닝키와 LFSR을 사용하여 생성한 서브키들로 이루어진다.
  
* '''화이트닝키 생성'''
+
* 화이트닝키 생성
 
: 화이트닝키는 마스터키를 사용하여 다음과 같은 방법으로 생성한다.
 
: 화이트닝키는 마스터키를 사용하여 다음과 같은 방법으로 생성한다.
  
 
  <math> WK_{i} = \begin{cases} MK_{i+12} & , & 0 \le i \le 3 \\ MK_{i-4} & , & 4 \le i \le 7\end{cases} </math><br>
 
  <math> WK_{i} = \begin{cases} MK_{i+12} & , & 0 \le i \le 3 \\ MK_{i-4} & , & 4 \le i \le 7\end{cases} </math><br>
  
* '''LFSR(Left Feedback Shift Register) <math>h</math>'''
+
====  LFSR(Left Feedback Shift Register) <math>h</math> ====
: LFSR <math>h</math>의 연결 다항식은 <math> x^{7}+x^{3}+1 </math>이다. 이 다항식은 <math> F_2[x] </math>에서 원시다항식이기 때문에 <math>h</math>는 <math> 2^{7}-1=127 </math>의 주기를 갖는다. <math>h</math>의 초기 내부 상태 값은 <math> \delta_{0}=(s_{6},s_{5},s_{4},s_{3},s_{2},s_{1},s_{0})=(1,0,1,1,0,1,0)_{2} </math>으로 정해진다. 그러면 <math>i=1,\cdots,127</math>에 대하여 <math> \delta_{i} </math>는 다음과 같이 생성된다.
+
LFSR <math>h</math>의 연결 다항식은 <math> x^{7}+x^{3}+1 </math>이다. 이 다항식은 <math> F_2[x] </math>에서 원시다항식이기 때문에 <math>h</math>는 <math> 2^{7}-1=127 </math>의 주기를 갖는다. <math>h</math>의 초기 내부 상태 값은 <math> \delta_{0}=(s_{6},s_{5},s_{4},s_{3},s_{2},s_{1},s_{0})=(1,0,1,1,0,1,0)_{2} </math>으로 정해진다. 그러면 <math>i=1,\cdots,127</math>에 대하여 <math> \delta_{i} </math>는 다음과 같이 생성된다.
  
<math> s_{i+6}=s_{i+2} \oplus s_{i-1}, </math><br>
+
:::<math> s_{i+6}=s_{i+2} \oplus s_{i-1}, </math><br>
<math> \delta_{i}=(s_{i+6},s_{i+5},s_{i+4},s_{i+3},s_{i+2},s_{i+1},s_{i}), </math> &nbsp; &nbsp; <math>1 \le i \le 127</math><br>
+
:::<math> \delta_{i}=(s_{i+6},s_{i+5},s_{i+4},s_{i+3},s_{i+2},s_{i+1},s_{i}), </math> &nbsp; &nbsp; <math>1 \le i \le 127</math><br>
  
: <math>h</math>의 주기가 127이기 때문에 <math> \delta_{0}=\delta_{127} </math>이다.
+
<math>h</math>의 주기가 127이기 때문에 <math> \delta_{0}=\delta_127 </math>이다.
  
* '''서브키 생성'''
+
* 서브키 생성
 
: 서브키를 생성하는 알고리즘은 다음과 같이 구성된다.
 
: 서브키를 생성하는 알고리즘은 다음과 같이 구성된다.
  
  <math> For \ i=0 \ to \ 7 </math>
+
  :<math> For \ i=0 \ to \ 7 </math>
  <math> For \ j=0 \ to \ 7 </math>
+
::<math> For \ j=0 \ to \ 7 </math>
    <math> SK_{16 \cdot i+j} \leftarrow MK_{j-i \ mod8} \boxplus \delta_{16 \cdot i+j}</math>;
+
:::<math> SK_{16 \cdot i+j} \leftarrow MK_{j-i mod8} \boxplus \delta_{16 \cdot i+j}</math>;
  <math> For \ j=0 \ to \ 7 </math>
+
::<math> For \ j=0 \ to \ 7 </math>
    <math> SK_{16 \cdot i+j+8} \leftarrow MK_{(j-i \ mod8)+8} \boxplus \delta_{16 \cdot i+j+8}</math>;<br>
+
:::<math> SK_{16 \cdot i+j+8} \leftarrow MK_{(j-i mod8)+8} \boxplus \delta_{16 \cdot i+j+8}</math>;
 
+
<math> \delta_{i} \ (0 \le i \le 127) </math>는 LFSR <math>h</math>의 내부 상태의 값들이다.
: <math> \delta_{i} \ (0 \le i \le 127) </math>는 LFSR <math>h</math>의 내부 상태의 값들이다.
 
  
* '''암호화키 생성'''
+
* 암호화키 생성
 
: HIGHT의 암호화 알고리즘이 수행되기 위하여 라운드키 생성과정은 바이트 단위의 8개의 화이트닝키(<math> WK_{0},\cdots,WK_{7} </math>)와 128개의 서브키(<math> SK_{0},\cdots,SK_{127} </math>)를 생성한다.
 
: HIGHT의 암호화 알고리즘이 수행되기 위하여 라운드키 생성과정은 바이트 단위의 8개의 화이트닝키(<math> WK_{0},\cdots,WK_{7} </math>)와 128개의 서브키(<math> SK_{0},\cdots,SK_{127} </math>)를 생성한다.
  
* '''복호화키 생성'''
+
====  복호화키 생성 ====
: HIGHT의 복호화 알고리즘은 암호화 알고리즘과 같은 화이트닝키와 서브키 바이트들을 이용하지만 순서가 다르다. 복호화 알고리즘에서는 <math> WK_{4},WK_{5},WK_{6},WK_{7} </math>이 초기 변환에, <math> WK_{0},WK_{1},WK_{2},WK_{3} </math>이 최종 변환에 사용된다. 복호화 알고리즘에서 사용되는 서브키 바이트들은 <math> SK'_{i} </math>로 표시되며, 다음과 같이 정의된다.
+
HIGHT의 복호화 알고리즘은 암호화 알고리즘과 같은 화이트닝키와 서브키 바이트들을 이용하지만 순서가 다르다. 복호화 알고리즘에서는 <math> WK_{4},WK_{5},WK_{6},WK_{7} </math>이 초기 변환에, <math> WK_{0},WK_{1},WK_{2},WK_{3} </math>이 최종 변환에 사용된다. 복호화 알고리즘에서 사용되는 서브키 바이트들은 <math> SK'_{i} </math>로 표시되며, 다음과 같이 정의된다.
  
<math> SK'_{i}=SK_{127-i}, </math> &nbsp; &nbsp; <math>i=0,\cdots,127</math>
+
:::<math> SK'_{i}=SK_{127-i}, </math> &nbsp; &nbsp; <math>i=0,\cdots,127</math>
  
 
===  암호화 ===
 
===  암호화 ===
* '''암호화 초기 변환'''
+
 
: HIGHT 암호화의 초기 변환은 네 개의 화이트닝키 바이트(<math> WK_{0},WK_{1},WK_{2},WK_{3} </math>)를 이용하여 평문 <math>P</math>를 첫 번째 라운드 함수의 입력인 <math> X_{0}=X_{0,7} \ || \ X_{0,6} \ || \cdots || \ X_{0,0} </math>로 변환한다.
+
* 암호화 초기 변환
 +
 
 +
: HIGHT 암호화의 초기 변환은 네 개의 화이트닝키 바이트(<math> WK_{0},WK_{1},WK_{2},WK_{3} </math>)를 이용하여 평문 <math>P</math>를 첫 번째 라운드 함수의 입력인 <math> X_{0}=X_{0,7} \ || \ X_{0,6} \ || \cdots || \ X_{0,0} </math>
 +
로 변환한다.
  
 
  <math> X_{0,i}=P_{i}, \quad i=1,3,5,7 </math>
 
  <math> X_{0,i}=P_{i}, \quad i=1,3,5,7 </math>
78번째 줄: 81번째 줄:
 
  <math> X_{0,6}=P_{6} \oplus WK_{3} </math>
 
  <math> X_{0,6}=P_{6} \oplus WK_{3} </math>
  
* '''암호화 라운드 함수'''
+
* 암호화 라운드 함수
 +
 
 
: HIGHT의 라운드 함수는 다음과 같은 두개의 보조 함수를 갖는다.
 
: HIGHT의 라운드 함수는 다음과 같은 두개의 보조 함수를 갖는다.
  
84번째 줄: 88번째 줄:
 
  <math> F_{1}(X)=X^{<<3} \oplus X^{<<4} \oplus X^{<<6} </math>
 
  <math> F_{1}(X)=X^{<<3} \oplus X^{<<4} \oplus X^{<<6} </math>
  
: 라운드 함수는 <math> Round_{1} </math> 부터 <math> Round_{32} </math>까지 32회 반복한다.
+
라운드 함수는 <math> Round_{1} </math> 부터 <math> Round_{32} </math>까지 32회 반복한다.
: 각 <math>i</math>번째 라운드 함수 <math> Round_{i}, \ i=1, \cdots, \ 31 </math>는 <math> X_{i-1}=X_{i-1,7} \ || \cdots || \ X_{i-1,0} </math>를 <math> X_{i}=X_{i,7} \ || \cdots || \ X_{i,0} </math>와 같이 변화한다.
+
각 <math>i</math>번째 라운드 함수 <math> Round_{i}, \ i=1, \cdots, \ 31 </math>는 <math> X_{i-1}=X_{i-1,7} \ || \cdots || \ X_{i-1,0} </math>를 <math> X_{i}=X_{i,7} \ || \cdots || \ X_{i,0} </math>와 같이 변화한다.
  
 
  <math> X_{i,j}=X{i-1,j-1},j=1,3,5,7 </math>
 
  <math> X_{i,j}=X{i-1,j-1},j=1,3,5,7 </math>
93번째 줄: 97번째 줄:
 
  <math> X_{i,6}=X{i-1,5} \oplus (F_{0}(X_{i-1,4}) \boxplus SK_{4i-2}) </math>
 
  <math> X_{i,6}=X{i-1,5} \oplus (F_{0}(X_{i-1,4}) \boxplus SK_{4i-2}) </math>
  
: 마지막 라운드 함수(<math> Round_{32} </math>)에서는 바이트들을 섞지 않는다. 따라서 입력값 <math> X_{31}=X_{31,7} \ || \cdots || \ X_{31,0} </math>으로부터 출력값 <math> X_{32}=X_{32,7} || \cdots || X_{32,0} </math>은 다음과 같이 계산된다.
+
마지막 라운드 함수(<math> Round_{32} </math>)에서는 바이트들을 섞지 않는다. 따라서 입력값 <math> X_{31}=X_{31,7} \ || \cdots || \ X_{31,0} </math>으로부터 출력값 <math> X_{32}=X_{32,7} || \cdots || X_{32,0} </math>은 다음과 같이 계산된다.
  
 
  <math> X_{32,i}=X{31,i}, \ i=0,2,4,6 </math>
 
  <math> X_{32,i}=X{31,i}, \ i=0,2,4,6 </math>
101번째 줄: 105번째 줄:
 
  <math> X_{32,7}=X{31,7}, \oplus (F_{0}(X_{31,6}) \boxplus SK_{127} </math>
 
  <math> X_{32,7}=X{31,7}, \oplus (F_{0}(X_{31,6}) \boxplus SK_{127} </math>
  
* '''암호화 최종 변환'''
+
====  암호화 최종 변환 ====
: HIGHT의 최종 변환은 <math> Round_{32} </math>의 출력인 <math> X_{32}=X_{32,7} \ || \cdots || \ X_{32,0} </math>을 4개의 화이트닝키(<math> WK_{4},WK_{5},WK_{6},WK_{7} </math>)를 이용하여 변환한다.
+
 
 +
HIGHT의 최종 변환은 <math> Round_{32} </math>의 출력인 <math> X_{32}=X_{32,7} \ || \cdots || \ X_{32,0} </math>을 4개의 화이트닝키(<math> WK_{4},WK_{5},WK_{6},WK_{7} </math>)를 이용하여 변환한다.
  
 
  <math> C_{i}=X_{32,i}, \ i=1,3,5,7 </math>
 
  <math> C_{i}=X_{32,i}, \ i=1,3,5,7 </math>
111번째 줄: 116번째 줄:
  
 
===  복호화 ===
 
===  복호화 ===
 +
 
HIGHT의 복호화 알고리즘은 암호화 알고리즘과 마찬가지로 라운드키 생성과정, 초기 변환(암호화 최종 변환의 역변환), 라운드 함수 32회 반복, 최종 변환(암호화 초기 변환의 역변환)으로 구성되어 있다. 복호화 알고리즘에서의 중간값은 <math> X^{'}_{i}=X^{'}_{i,7} \ || \cdots || \ X^{'}_{i,0}, \ i=0, \cdots, 32 </math>로 표시된다.
 
HIGHT의 복호화 알고리즘은 암호화 알고리즘과 마찬가지로 라운드키 생성과정, 초기 변환(암호화 최종 변환의 역변환), 라운드 함수 32회 반복, 최종 변환(암호화 초기 변환의 역변환)으로 구성되어 있다. 복호화 알고리즘에서의 중간값은 <math> X^{'}_{i}=X^{'}_{i,7} \ || \cdots || \ X^{'}_{i,0}, \ i=0, \cdots, 32 </math>로 표시된다.
  
* '''복호화 초기변환'''
+
====  복호화 초기변환 ====
: 복호화 알고리즘의 초기 변환은 암호화 알고리즘의 최종 변환에 대한 역변환이다. 이 함수는 4개의 화이트닝키(<math> WK_{4}, WK_{5}, WK_{6}, WK_{7} </math>)를 이용하여 암호문 <math>C</math>를 복호화 알고리즘의 첫 번째 라운드 함수의 입력값(<math> X^{'}_{0,i}=X^{'}_{0,7}, \ || \cdots || \ X^{'}_{0,0} </math>)으로 다음과 같이 변환한다.
+
 
 +
복호화 알고리즘의 초기 변환은 암호화 알고리즘의 최종 변환에 대한 역변환이다. 이 함수는 4개의 화이트닝키(<math> WK_{4}, WK_{5}, WK_{6}, WK_{7} </math>)를 이용하여 암호문 <math>C</math>를 복호화 알고리즘의 첫 번째 라운드 함수의 입력값(<math> X^{'}_{0,i}=X^{'}_{0,7}, \ || \cdots || \ X^{'}_{0,0} </math>)으로 다음과 같이 변환한다.
 +
 
 +
:<math> X^{'}_{0,i}=C_{i}, \ i=1,3,5,7 </math>
 +
:<math> X^{'}_{0,0}=C_{0} \boxminus WK_{4} </math>
 +
:<math> X^{'}_{0,2}=C_{2} \oplus WK_{5} </math>
 +
:<math> X^{'}_{0,4}=C_{4} \boxminus WK_{6} </math>
 +
:<math> X^{'}_{0,6}=C_{6} \oplus WK_{7} </math>
 +
 
 +
====  복호화 라운드 함수 ====
  
<math> X^{'}_{0,i}=C_{i}, \ i=1,3,5,7 </math>
+
복호화 알고리즘의 <math>i</math>번째 라운드 함수를 <math> Round^{'}_{i}, \ i=1, \cdots, 32 </math>로 표시한다.<br><math>i</math>번째 라운드 함수 <math> Round^{'}_{i} </math><math> X^{'}_{i-1}=X^{'}_{i-1,7} \ || \cdots || \ X^{'}_{i-1,0} </math><math> X^{'}_{i}=X^{'}_{i,7} \ || \cdots || \ X^{'}_{i,0} </math>로 다음과 같이 변환한다.
<math> X^{'}_{0,0}=C_{0} \boxminus WK_{4} </math>
 
<math> X^{'}_{0,2}=C_{2} \oplus WK_{5} </math>
 
<math> X^{'}_{0,4}=C_{4} \boxminus WK_{6} </math>
 
<math> X^{'}_{0,6}=C_{6} \oplus WK_{7} </math>
 
  
* '''복호화 라운드 함수'''
+
:<math> X^{'}_{i,j}=X^{'}_{i-1,j+1 \ mod8}, \ j=1,3,5,7 </math>
: 복호화 알고리즘의 <math>i</math>번째 라운드 함수를 <math> Round^{'}_{i}, \ i=1, \cdots, 32 </math>로 표시한다.<br><math>i</math>번째 라운드 함수 <math> Round^{'}_{i} </math><math> X^{'}_{i-1}=X^{'}_{i-1,7} \ || \cdots || \ X^{'}_{i-1,0} </math><math> X^{'}_{i}=X^{'}_{i,7} \ || \cdots || \ X^{'}_{i,0} </math>로 다음과 같이 변환한다.
+
:<math> X^{'}_{0,0}=X^{'}_{i-1,1} \boxminus (F_{1}(X^{'}_{i-1,0}) \oplus SK^{'}_{4i-1}) </math>
 +
:<math> X^{'}_{0,2}=X^{'}_{i-1,3} \oplus (F_{0}(X^{'}_{i-1,2}) \boxplus SK^{'}_{4i-2}) </math>
 +
:<math> X^{'}_{0,4}=X^{'}_{i-1,5} \boxminus (F_{1}(X^{'}_{i-1,4}) \oplus SK^{'}_{4i-3}) </math>
 +
:<math> X^{'}_{0,6}=X^{'}_{i-1,7} \oplus (F_{0}(X^{'}_{i-1,6}) \boxplus SK^{'}_{4i-4}) </math>
  
<math> X^{'}_{i,j}=X^{'}_{i-1,j+1 \ mod8}, \ j=1,3,5,7 </math>
+
암호화 알고리즘에서와 마찬가지로, 마지막 라운드 함수(<math> Round^{'}_{32} </math>)에서는 바이트들을 섞지 않는다. 따라서 다음과 같이 연산된다.
<math> X^{'}_{0,0}=X^{'}_{i-1,1} \boxminus (F_{1}(X^{'}_{i-1,0}) \oplus SK^{'}_{4i-1}) </math>
 
<math> X^{'}_{0,2}=X^{'}_{i-1,3} \oplus (F_{0}(X^{'}_{i-1,2}) \boxplus SK^{'}_{4i-2}) </math>
 
<math> X^{'}_{0,4}=X^{'}_{i-1,5} \boxminus (F_{1}(X^{'}_{i-1,4}) \oplus SK^{'}_{4i-3}) </math>
 
<math> X^{'}_{0,6}=X^{'}_{i-1,7} \oplus (F_{0}(X^{'}_{i-1,6}) \boxplus SK^{'}_{4i-4}) </math>
 
  
: 암호화 알고리즘에서와 마찬가지로, 마지막 라운드 함수(<math> Round^{'}_{32} </math>)에서는 바이트들을 섞지 않는다. 따라서 다음과 같이 연산된다.
+
:<math> X^{'}_{32,i}=X^{'}_{31,i}, \ i=0,2,4,6 </math>
 +
:<math> X^{'}_{32,1}=X^{'}_{31,1} \boxminus (F_{1}(X^{'}_{31,0}) \oplus SK^{'}_{127}) </math>
 +
:<math> X^{'}_{32,3}=X^{'}_{31,3} \oplus (F_{0}(X^{'}_{31,2}) \boxplus SK^{'}_{126}) </math>
 +
:<math> X^{'}_{32,5}=X^{'}_{31,5} \boxminus (F_{1}(X^{'}_{31,4}) \oplus SK^{'}_{125}) </math>
 +
:<math> X^{'}_{32,7}=X^{'}_{31,7} \oplus (F_{0}(X^{'}_{31,6}) \boxplus SK^{'}_{124}) </math>
  
<math> X^{'}_{32,i}=X^{'}_{31,i}, \ i=0,2,4,6 </math>
+
==== 복호화 최종 변환 ====
  <math> X^{'}_{32,1}=X^{'}_{31,1} \boxminus (F_{1}(X^{'}_{31,0}) \oplus SK^{'}_{127}) </math>
 
<math> X^{'}_{32,3}=X^{'}_{31,3} \oplus (F_{0}(X^{'}_{31,2}) \boxplus SK^{'}_{126}) </math>
 
<math> X^{'}_{32,5}=X^{'}_{31,5} \boxminus (F_{1}(X^{'}_{31,4}) \oplus SK^{'}_{125}) </math>
 
<math> X^{'}_{32,7}=X^{'}_{31,7} \oplus (F_{0}(X^{'}_{31,6}) \boxplus SK^{'}_{124}) </math>
 
  
* '''복호화 최종 변환'''
+
복호화 알고리즘의 최종 변환은 암호화 알고리즘에서의 초기 변환에 대한 역변환이다. 이 함수는 네 개의 화이트닝키(<math>  
: 복호화 알고리즘의 최종 변환은 암호화 알고리즘에서의 초기 변환에 대한 역변환이다. 이 함수는 네 개의 화이트닝키(<math>  
+
X^{'}_{32}=X^{'}_{32,7} \ || \cdots || \ X^{'}_{32,0} </math>평문 <math>P</math>로 변환한다.
X^{'}_{32}=X^{'}_{32,7} \ || \cdots || \ X^{'}_{32,0} </math>)를 평문 <math>P</math>로 변환한다.
 
  
<math> P_{i}=X^{'}_{32,i}, \ i=1,3,5,7 </math>
+
:<math> P_{i}=X^{'}_{32,i}, \ i=1,3,5,7 </math>
<math> P_{0}=X^{'}_{32,0} \boxminus WK_{0} </math>
+
:<math> P_{0}=X^{'}_{32,0} \boxminus WK_{0} </math>
<math> P_{2}=X^{'}_{32,2} \oplus WK_{1} </math>
+
:<math> P_{2}=X^{'}_{32,2} \oplus WK_{1} </math>
<math> P_{4}=X^{'}_{32,4} \boxminus WK_{2} </math>
+
:<math> P_{4}=X^{'}_{32,4} \boxminus WK_{2} </math>
<math> P_{6}=X^{'}_{32,6} \oplus WK_{3} </math><ref>"[https://hbisland.tistory.com/attachment/cfile25.uf@1815FE0B4C0C679143B3E3.pdf HIGHT 블록암호 알고리즘 사양 및 세부 명세서]", 2009-07 </ref>
+
:<math> P_{6}=X^{'}_{32,6} \oplus WK_{3} </math><ref>"[https://hbisland.tistory.com/attachment/cfile25.uf@1815FE0B4C0C679143B3E3.pdf HIGHT 블록암호 알고리즘 사양 및 세부 명세서]", 2009-07 </ref>
  
 
== 전망 ==
 
== 전망 ==
기술표준원에서는 국산 암호화 기술이 [[스마트폰]], [[USN]], 유비쿼터스 도시(U-City), 유비쿼터스 헬스(U-Health) 등 [[유비쿼터스]] 환경에서 널리 활용될 수 있도록 중소기업을 포함한 산학연을 대상으로 무료로 소스코드를 배포하는 등 암호이용 활성화를 위해 지속적으로 지원할 계획이라고 한다.<ref> 오병민기자, [https://www.boannews.com/media/view.asp?idx=21392&kind=3&search=title&find=HIGHT 스마트폰용 국산 경량 암호화 기술 국제표준으로 채택]〉, 《보안뉴스》, 2010-06-08 </ref>
+
국산 암호화 기술이 [[스마트폰]], [[USN]], [[U-City]], [[U-Health]]등 [[유비쿼터스]] 환경에서 널리 활용될 수 있도록 중소기업을 포함한 산학연(산업계, 학계, 연구분야)을 대상으로 무료로 소스코드를 배포하는 등 암호이용 활성화를 위해 지속적으로 지원할 계획이라고 한다.<ref> 오병민기자, "[https://www.boannews.com/media/view.asp?idx=21392&kind=3&search=title&find=HIGHT 스마트폰용 국산 경량 암호화 기술 국제표준으로 채택]" 《보안뉴스》, 2010-06-08 </ref>
  
 
{{각주}}
 
{{각주}}
  
 
== 참고자료 ==
 
== 참고자료 ==
 +
 
* 경수, 〈[https://blog.naver.com/rudtn082/220923768132 HIGHT 암호 알고리즘에 대해]〉, 《네이버 블로그》 , 2017-01-31
 
* 경수, 〈[https://blog.naver.com/rudtn082/220923768132 HIGHT 암호 알고리즘에 대해]〉, 《네이버 블로그》 , 2017-01-31
 
* 한국인터넷진흥원, "[https://hbisland.tistory.com/attachment/cfile25.uf@1815FE0B4C0C679143B3E3.pdf HIGHT 블록암호 알고리즘 사양 및 세부 명세서]", 2009-07
 
* 한국인터넷진흥원, "[https://hbisland.tistory.com/attachment/cfile25.uf@1815FE0B4C0C679143B3E3.pdf HIGHT 블록암호 알고리즘 사양 및 세부 명세서]", 2009-07
 
* 오병민기자, "[https://www.boannews.com/media/view.asp?idx=21392&kind=3&search=title&find=HIGHT 스마트폰용 국산 경량 암호화 기술 국제표준으로 채택]" 《보안뉴스》, 2010-06-08
 
* 오병민기자, "[https://www.boannews.com/media/view.asp?idx=21392&kind=3&search=title&find=HIGHT 스마트폰용 국산 경량 암호화 기술 국제표준으로 채택]" 《보안뉴스》, 2010-06-08
  
{{암호 알고리즘|검토 필요}}
+
{{알고리즘|토막글}}

해시넷에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 해시넷:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)