"SEED"의 두 판 사이의 차이
11번째 줄: | 11번째 줄: | ||
== 구조 == | == 구조 == | ||
+ | [[파일:SEED_전체_구조도.png|300픽셀|오른쪽|'''SEED 전체 구조도''']] | ||
SEED 알고리즘은 전체적으로 파이스텔(Feistel) 구조로 이루어져 있다. 128비트의 평문 블록과 128비트 키를 입력으로 사용해서 총 16라운드에 걸쳐 128비트 암호문 블록을 출력한다. | SEED 알고리즘은 전체적으로 파이스텔(Feistel) 구조로 이루어져 있다. 128비트의 평문 블록과 128비트 키를 입력으로 사용해서 총 16라운드에 걸쳐 128비트 암호문 블록을 출력한다. | ||
=== F함수 === | === F함수 === | ||
파이스텔 구조 형태인 블록암호 알고리즘은 F 함수의 특성에 따라서 구분될 수 있다. SEED의 F 함수는 수정된 64피트 파이스텔 형태로 구성되는데, 각 32비트 블록 2개를 입력 받아서 32비트 블록 2개를 출력한다. 즉, 전자의 경우를 C와 D라고 하고 후발대는 C'와 D'라고 할 때, 암호화 과정에서 64비트 블록인 C, D와 64비트 라운드 키 <math>K_{i}=(K_{i, 0};K_{i, 1})</math>를 F 함수의 입력으로 처리해서 64비트 블록인 C'와 D'를 출력한다. 참고로 여기서 i란 라운드 수를 의미한다. | 파이스텔 구조 형태인 블록암호 알고리즘은 F 함수의 특성에 따라서 구분될 수 있다. SEED의 F 함수는 수정된 64피트 파이스텔 형태로 구성되는데, 각 32비트 블록 2개를 입력 받아서 32비트 블록 2개를 출력한다. 즉, 전자의 경우를 C와 D라고 하고 후발대는 C'와 D'라고 할 때, 암호화 과정에서 64비트 블록인 C, D와 64비트 라운드 키 <math>K_{i}=(K_{i, 0};K_{i, 1})</math>를 F 함수의 입력으로 처리해서 64비트 블록인 C'와 D'를 출력한다. 참고로 여기서 i란 라운드 수를 의미한다. | ||
− | <math></math> | + | |
− | <math></math> | + | <math> C' = G[G[G \left\{(C \oplus K_{i, 0}) \oplus (D \oplus K_{i, 1})\right\} \boxplus (C \oplus K_{i, 0})] \boxplus G \left\{(C \oplus K_{i, 0}) \oplus (D \oplus K_{i, 1}) \right\}] </math> |
+ | <math> \qquad \quad \boxplus G[G{(C \oplus K_{i, 0}) \oplus (D \oplus K_{i, 1})} \boxplus (C \oplus K_{i, 0})]</math> | ||
+ | <math> D' = G[G[G[\left\{(C \oplus K_{i, 0})\oplus(D \oplus K_{i, 1})\right\} \boxplus (C \oplus K_{i, 0})] \boxplus G \left\{(C \oplus K_{i, 0}) \oplus (D \oplus K_{i, 1})\right\}]</math> | ||
=== G함수 === | === G함수 === | ||
+ | 전체 G함수는 다음과 같이 기술된다. | ||
+ | <math>Y_3 = S_2(X_3), \quad Y_2=S_1(X_2) \quad Y_1=S_2(X_1), \quad Y_0=S_1(X_0),</math> | ||
+ | <math>\qquad Z_3=(Y_0 \And m_3) \oplus (Y_1 \And m_0) \oplus (Y_2 \And m_1) \oplus (Y_3 \And m_2)</math> | ||
+ | <math>\qquad Z_2=(Y_0 \And m_2) \oplus (Y_1 \And m_3) \oplus (Y_2 \And m_0) \oplus (Y_3 \And m_1)</math> | ||
+ | <math>\qquad Z_1=(Y_0 \And m_1) \oplus (Y_1 \And m_2) \oplus (Y_2 \And m_3) \oplus (Y_3 \And m_0)</math> | ||
+ | <math>\qquad Z_0=(Y_0 \And m_0) \oplus (Y_1 \And m_1) \oplus (Y_2 \And m_2) \oplus (Y_3 \And m_3)</math> | ||
+ | <math>\quad (m_0=0xfc, \quad m_1=0xf3, \quad m_2=0xcf, \quad m_3=0x3f )</math> | ||
+ | 참고로 위의 G 함수는 구현의 효율성을 위하여 4개의 확장된 4바이트 SS-box들의 배타적 논리합으로 구현할 수 있다. 그러기 위해선 다음과 같이 4개의 SS-box들을 저장해야 한다. | ||
+ | <math> SS_3=S_2(X_3) \And m_2 || S_2(X_3) \And m_1 || S_2(X_3) \And m_0 || S_2(X_3) \And m_3, </math> | ||
+ | <math> SS_2=S_1(X_2) \And m_1 || S_1(X_2) \And m_0 || S_1(X_2) \And m_3 || S_1(X_2) \And m_2, </math> | ||
+ | <math> SS_1=S_2(X_1) \And m_0 || S_2(X_1) \And m_3 || S_2(X_1) \And m_2 || S_2(X_1) \And m_1, </math> | ||
+ | <math> SS_0=S_1(X_2) \And m_3 || S_1(X_2) \And m_2 || S_1(X_2) \And m_1 || S_1(X_2) \And m_0, </math> | ||
+ | 이 확장 SS-box들을 이용하면 G 함수는 다음처럼 구현할 수 있다. | ||
+ | <math> Z=SS_3(X_3) \oplus SS_2(X_2) \oplus SS_1(X_1) \oplus SS_0(X_0) </math> | ||
+ | |||
+ | === S-Box === | ||
+ | G 함수의 내부에 사용되는 비선형 S-box <math> S_1, S_2 </math>을 생성하기 위해 다음 식이 사용되었다. <math> n_1=247, </math> | ||
+ | |||
+ | === 라운드 키 생성과정 === | ||
== 특징 == | == 특징 == | ||
28번째 줄: | 50번째 줄: | ||
== 고려사항 == | == 고려사항 == | ||
− | + | SEED를 실제로 사용하기 위해서는 구현 환경에서 사용되는 [[엔디안]](Endianness)과 암호화된 데이터가 저장되는 데이터 형식을 고려해야 한다. 또한, 입력 블록을 블록 암호에 적용하는 방법인 운영 모드와 마지막 블록의 크기를 맞추기 위한 [[패딩]]을 함께 구현해 주어야 한다. | |
=== 엔디안 === | === 엔디안 === | ||
− | + | 엔디안이란, 컴퓨터 메모리의 바이트를 배열하는 순서를 말한다. 엔디안은 보통 큰 단위가 앞에 나오는 빅 에디안과 작은 단위가 앞에 나오는 리틀 엔디안, 그리고 두 경우에 속하지 않거나 둘 모두를 지원하는 미들 엔디안으로 분류한다. 현재 빅 엔디안과 리틀 엔디안이 많이 사용되나 [[x86]] 아키텍처가 리틀 엔디안을 쓰기 때문에 대부분의 x86 아키텍처를 사용하는 데스크탑은 리틀 엔디안을 사용하며, SEED 소스코드도 기본적으로 리틀 엔디안을 사용하고 있다. | |
=== 데이터형식 === | === 데이터형식 === |
2020년 8월 21일 (금) 16:39 판
SEED 또는 시드 블록 암호 알고리즘은 전자상거래, 금융, 무선통신 등에서 전송되는 개인정보와 같은 중요한 정보를 보호하기 위해, 1999년 2월 한국인터넷진흥원과 국내 암호전문가들이 순수 국내기술로 개발한 128비트 및 256비트 대칭 키 블록의 암호 알고리즘이다. 미국에서 수출하는 웹브라우저 보안의 수준이 40비트로 제한함으로써 128비트 보안을 위해서 자국에서 개발한 별도의 알고리즘이다.
목차
개요
시드 블록 암호 알고리즘(SEED)는 민간 부분인 인터넷, 전자상거래, 무선 통신 등에서 공개 시 민감한 영향을 미칠 수 있는 정보의 보호와 개인 프라이버시 등을 보호하기 위하여 1992년 2월 한국 정보보호센터(KISA)에 의해 개발된 블록 암호 알고리즘이다. 대칭키 블록 암호알고리즘으로 비밀성을 제공하는 암호시스템의 중요 요소이다. 블록암호알고리즘 SEED는 128비트의 비밀키를 이용해 128비트의 평문을 암호문으로 변환한다. 금융권, 전자상거래, 정보 보호제품(VPN) 등의 다양한 분야에서 데이터의 기밀성과 무결성 기능을 제공하기 위해 사용되고 있다. 국외 주요 정보 보호업체를 포함한 670개 이상의 국내 외 산업계와 학계와 연구분야에서 SEED를 사용하고 있다. 블록 암호 알고리즘의 경우, 암호 알고리즘이 적용되는 블록 크기가 정해져 있기 때문에 정해진 길이보다 긴 데이터를 암호화하거나 데이터 무결성 검증을 하기 위해서는 블록 암호 알고리즘의 운영 모드를 반드시 사용하게 된다. 입력 데이터의 길이가 기본 블록 크기의 배수가 되지 않으면 처리가 불가능하므로 입력 메시지의 길이가 기본 블록 크기의 배수가 되지 않으면 처리가 불가능해 입력 메시지의 길이가 블록 길이의 배수가 되도록 하기 위해 덧붙이기 방법을 사용해야 한다. 이에, 한국 정보보호진흥원에서는 안전성 측면과 효율성 측면을 고려하여 SEED의 사용을 촉진하기 위해 SEED의 운영 모드를 TTA 표준으로 제안하여 2003년 12월 TTA표준으로 제정하였다.
역사
- 1999년 2월 한국 인터넷진흥원과 국내 암호전문가들이 개발
- 1999년 9월 정보통신 산체표준(TTA)으로 제정
- 2005년 국제 표준화 기구인 ISO/IEO 국제 블록 암호 알고리즘, IETF 표준으로 제정
- 2009년 256비트 키를 지원하는 SEED 256 개발
구조
SEED 알고리즘은 전체적으로 파이스텔(Feistel) 구조로 이루어져 있다. 128비트의 평문 블록과 128비트 키를 입력으로 사용해서 총 16라운드에 걸쳐 128비트 암호문 블록을 출력한다.
F함수
파이스텔 구조 형태인 블록암호 알고리즘은 F 함수의 특성에 따라서 구분될 수 있다. SEED의 F 함수는 수정된 64피트 파이스텔 형태로 구성되는데, 각 32비트 블록 2개를 입력 받아서 32비트 블록 2개를 출력한다. 즉, 전자의 경우를 C와 D라고 하고 후발대는 C'와 D'라고 할 때, 암호화 과정에서 64비트 블록인 C, D와 64비트 라운드 키 를 F 함수의 입력으로 처리해서 64비트 블록인 C'와 D'를 출력한다. 참고로 여기서 i란 라운드 수를 의미한다.
G함수
전체 G함수는 다음과 같이 기술된다.
참고로 위의 G 함수는 구현의 효율성을 위하여 4개의 확장된 4바이트 SS-box들의 배타적 논리합으로 구현할 수 있다. 그러기 위해선 다음과 같이 4개의 SS-box들을 저장해야 한다.
이 확장 SS-box들을 이용하면 G 함수는 다음처럼 구현할 수 있다.
S-Box
G 함수의 내부에 사용되는 비선형 S-box 을 생성하기 위해 다음 식이 사용되었다.
라운드 키 생성과정
특징
표준화 현황
보급 신청
소스 코드
고려사항
SEED를 실제로 사용하기 위해서는 구현 환경에서 사용되는 엔디안(Endianness)과 암호화된 데이터가 저장되는 데이터 형식을 고려해야 한다. 또한, 입력 블록을 블록 암호에 적용하는 방법인 운영 모드와 마지막 블록의 크기를 맞추기 위한 패딩을 함께 구현해 주어야 한다.
엔디안
엔디안이란, 컴퓨터 메모리의 바이트를 배열하는 순서를 말한다. 엔디안은 보통 큰 단위가 앞에 나오는 빅 에디안과 작은 단위가 앞에 나오는 리틀 엔디안, 그리고 두 경우에 속하지 않거나 둘 모두를 지원하는 미들 엔디안으로 분류한다. 현재 빅 엔디안과 리틀 엔디안이 많이 사용되나 x86 아키텍처가 리틀 엔디안을 쓰기 때문에 대부분의 x86 아키텍처를 사용하는 데스크탑은 리틀 엔디안을 사용하며, SEED 소스코드도 기본적으로 리틀 엔디안을 사용하고 있다.
데이터형식
일반적으로 암호 알고리즘은 비트단위 연산을 포함한 다양한 연산을 수행하여 평문 메시지를 무의미한 비트열인 암호문으로 변환한다. 이 때 만들어진 암호문 비트열은 랜덤한 비트들로 구성되기 때문에 이를 문자열의 형태로 저장하거나 처리할 경우에는 문제가 발생할 수 있다. 따라서 암호화된 메시지는 항상 문자열이 아닌 이진 형태로 처리해 주어야 한다.
운영 모드
운영 모드란, 여러 개의 입력 블록들을 블록 암호에 적용하여 암호화, 복호화 하는 방법에 대한 정의이다. 이러한 운영 모드는 블록 암호와는 독립적으로 정의된다. 대표적으로 가장 널리 이용되는 블록 암호 운영모드에는 ECB(Electronic Code Book)모드, CBC(Cipher Block Chaining)모드, CFB(Ciphertext FeedBack)모드, OFB(Output FeedBack)모드, CTR(Counter)모드가 있다.
패딩
메시지를 SEED에 입력하기 위해 여러 개의 128비트 블록으로 나눌 때, 마지막 블록이 정확히 그 크기를 맞추기 어렵다. 예를 들어, 300비트의 메시지를 128비트의 블록으로 나눌 경우, 300 = 128 + 128 + 44 로 나뉘어 세 개의 블록을 구성하게 되는 데, 이때 마지막 블록이 44비트로 128비트를 만족하지 못한다. 이 경우 나머지 부족한 84비트를 채워주어야 SEED의 입력값으로 사용할 수 있다. 이렇게 부족한 부분을 채우는 방식을 패딩이라고 한다. SEED에 주로 사용되는 패딩은 TTA 표준의 부록으로 다루고 있다.
그 외의 알고리즘
국내외 암호화 알고리즘(2017년 기준) 분류 미국(NIST) 일본(CRYPTREC) 유럽(ECRYPT) 국내 대칭키 암호 알고리즘 AES-128/192/256 3TDEA AES-128/192/256 3TDEA Camellia-128/192/256 MISTY1 AES-128/192/256 Blowfish KASUMI 3TDEA SEED, HIGHT, ARIA-128/192/256 공개키 암호 알고리즘(메시지 암/복호화) RSA(사용 권고하는 키 길이 확인 필요) RSAES-OAEP RSAES-PKCS1 RSAES-OAEP RSAES-PKCS1 RSAES-OAEP 일방향 암호 알고리즘 SHA-224/256/384/512 SHA-256/384/512 SHA-224/256/384/512 Whirlpool SHA-224/256/384/512
국내
- ARIA(Academy Research Institute Agency) : 전자정부 구현 등으로 다양한 환경에 적합한 암호화 알고리즘의 필요성이 대두됐고, 이에 따라 국가보안기술연구소 주도로 학계와 국가 정보원 등의 암호기술 전문가들이 힘을 모아서 개발한 국가 암호화 알고리즘이다. ISPN 구조의 128비트 블록 암호이며, 128비트, 192비트, 256비트 세 가지 키를 제공한다. 이들 각각은 키 길이에 따라 ARIA-128, ARIA-192, IRIA-256으로 구분한다. ARIA의 입출력 크기와 사용 가능한 키 크기는 미국 표준 블록암호인 AES와 동일하다.
- HIGHT(HIGH security and light weightT) : RFID, USN 등과 같이 저전력과 저경량을 요구하는 컴퓨팅 환경에서 기밀성을 제공하기 위해 개발된 64비트 블록 암호이다.
- LEA(Lightweight Encryption Algorithm) : 128비트 경량 고속 블록 암호 알고리즘이다. AES보다 1.5에서 2배는 빠르다. 다양한 정보보안 서비스에서 다양한 데이터를 빠르게 처리할 수 있고, 스마트폰의 보안과 사물 인터넷 등의 저전력 암호화에도 널리 사용 가능하다.
국외
- IDEA(International Data Encrption Algorithm)
- DES를 대체하기 위하여 스위스의 한 연방기술 기관에서 개발한 알고리즘이다. 128비트 키, 64비트 블록 암호로 파이스텔 구조를 변형했다. 파이스텔과 SPN의 중간 형태이다. 8라운드를 걸쳣 데이터를 변환하며, 마지막에 한 번 더 키를 적용시켜 64비트 암호문을 생성하기 때문에, 보통 8.5라운드라고도 부른다. IDEA는 DES와는 달리 S-box를 사용하지 않고 대수적 구조가 서로 다른 연산을 번갈아 사용해서 암호학적인 강도를 높였다. PGP의 데이터 암호 알고리즘으로 채택되어 사용되고 있으며, DES보다 2재 정도 빠르고 무차별 공격에 더욱 효율적으로 대응한다.
- RC5(Ron's Code 5) : 1994년, 미국의 RSA 연구소의 라이베스트가 개발했다. 비교적 간단한 연산으로 빠른 암호화와 복호화 기능을 제공할 수 있는 알고리즘으로, 모든 하드웨어에 적합한 편이다. 입출력과 키, 라운드 수가 가변인 블록 알고리즘이며, 32/64/128비트의 블록을 갖고 있고, 속도는 DES의 약 10배이다. 간단한 알고리즘과 빠른 속도가 특징이다.
- DES : 미국 연방정부(NIST)에서 1977년 표준으로 공표, 16라운드의 알고리즘이며, 블록은 64비트 크기이다.
- AES : 미국 연방정부에서 표준으로 공표, 128/192/256 비트키
- FEAL : 소프트웨어 구현에 적합하다. 64/128비트 블록크기[1][2]
각주
- ↑ 와이준 Nye, 〈(암호학) 기타 대칭키 암호 알고리즘 - IDEA, RC5, SEED, ARIA, HIGHT, LEA〉, 《티스토리》, 2019-11-19
- ↑ ojava, 〈KISA 권고 암/복호화 방식:SEED 128, SEED 256〉, 《티스토리》, 2017-05-15
참고자료
- SEED 위키백과 - https://ko.wikipedia.org/wiki/SEED
- SEED 나무위키 - https://namu.wiki/w/SEED
- 한국인터넷진흥원 공식홈페이지 SEED - https://seed.kisa.or.kr/kisa/algorithm/EgovSeedInfo.do
- 한국인터넷진흥원, 〈[SEED 128 알고리즘 상세 명세서]〉, 《한국인터넷진흥원》, 2009-07
- ojava, 〈KISA 권고 암/복호화 방식:SEED 128, SEED 256〉, 《티스토리》, 2017-05-15
- 관리자1, 〈암호알고리즘 소스코드〉, 《한국인터넷진흥원》, 2019-01-31
- 와이준 Nye, 〈(암호학) 기타 대칭키 암호 알고리즘 - IDEA, RC5, SEED, ARIA, HIGHT, LEA〉, 《티스토리》, 2019-11-19
같이 보기