File Depender 중간 발표
목 차 프로그램 A. 목적 B. 진행 사항 C. 보완 사항 내부 구현 A. SEED B. 인터페이스
1.프로그램
A.목적 일상 생활에서 사용하는 파일을 SEED 보안 알고리즘을 통하여 파일의 내용을 자신만이 복호화 시킬수 있도록 하는것이 목적이다.
B.진행 사항 프로그램의 외형 – 완성 및 보완 가능 주요 알고리즘인 SEED 암호 알고리즘 - 분석중 -
C.보완 사항 파일을 암호화 함에 있어서 파일의 PADDING처리 및 기타 여러 가지 일어 날수 있는 변수에 대해 채크 하여 이를 보완.
2. 내부 구현
A.SEED SEED 알고리즘의 정의 참조 표준 및 권고 용어 정의 알고리즘 전체 구성도 라운드 키 생성과정 S-Box
SEED 알고리즘의 정의 SEED는 대칭키 암호알고리즘으로,블록 단위로 메시지를 처리하는 블록 암호알고리즘이다 대칭키 블록 암호알고리즘은 비밀성을 제공하는 암호시스템의 중요 요소이다. n비트 블록 암호알고리즘이란 고정된 n비트 평문을 같은 길이의 n비트 암호문으로 바꾸는 함수를 말한다(n비트 : 블록 크기). 이러한 변형 과정에 암·복호키가 작용하여 암호화와 복호화를 수행한다.
SEED 알고리즘의 정의 블록 암호알고리즘은 대부분 Feistel 구조로 설계된다(예 : DES, FEAL, LOKI, MISTY, Blowfish, CAST, Twofish 등). Feistel 구조란 각각 t비트인 블록으로 이루어진 2t비트 평문 블록이 r라운드()를 거쳐 암호문 으로 변환되는 반복 구조를 말한다. 반복 구조란 평문 블록이 여러 라운드를 거쳐 암호화되는 과정을 말한다(라운드 함수 란 암호키 로부터 유도된 각 서브키 (또는, 라운드 키라 불림)를 중요 입력으로 하여 를 통해 로 바꾸어 주는 함수를 말한다).
SEED 알고리즘의 정의 또한, 전체 알고리즘의 라운드 수는 요구되는 비도와 수행 효율성의 상호 절충적 관계에 의해 결정된다. 보통 Feistel 구조는 3라운드 이상이며, 짝수 라운드로 구성된다. 이러한 Feistel 구조는 라운드 함수에 관계없이 역변환이 가능하며(즉, 암·복호화 과정이 같음), 두 번의 수행으로 블록간의 완전한 diffusion이 이루어지며, 알고리즘의 수행속도가 빠르고, H/W 및 S/W로 구현이 용이하고, 아직 구조상의 문제점이 발견되고 있지 않다는 장점을 지니고 있다.
참조 펴준 및 권고 2.1 국제표준 ISO 10126-2(1991) : Banking - Procedure for message encipherment(wholesale) - Part 2 : DEA algorithm ISO 8372(1987) : Information processing-Modes of operation for a 64-bit block cipher algorithm ISO/IEC 10116(1997) : Information technology-Security techniques - Modes of operation for an n-bit block cipher 2.2. 국내표준 KS X 1201(1986) : 데이터 부호 알고리즘 DEA 1 명세 KS X 6314-2(1995) : 금융업의 메시지 암호화 절차(도매금융) - 제2부 : DEA 알고리즘 KS X 1202(1986) : 64비트 블록 부호 알고리즘의 연산 모드 KS X 1205(1994) : 정보 보안의 n비트 블록 암호 알고리즘의 운영 모드
용어 정의 반복 블록 알고리즘 : 라운드 함수를 순차적으로 반복하여 암∙복호화를 수행하는 블록 암호 알고리즘 Feistel 구조 : 각각 t비트인 L0, R0블록으로 이루어진 2t비트 평문 블록이 r라운드를 거쳐 암호문으로 변환되는 반복 구조 라운드 함수 : 반복 블록 암호알고리즘의 각 라운드에서 사용되는 함수 라운드 키 : 라운드 함수에서 사용되는 키 암호키 : 평문 또는 암호문의 암∙복호화에 사용되는 비밀정보
알고리즘 전체 구성도 본 알고리즘의 전체 구조는 Feistel 구조로 이루어져 있으며, 128비트의 평문 블록단위당 128비트 키로부터 생성된 16개의 64비트 라운드 키를 입력으로 사용하여 총 16라운드를 거쳐 128비트 암호문 블록을 출력한다. 128비트 입력 평문블록을 2개의 64비트 블록으로 나누어, 16개의 64비트 라운드 키를 이용하여 16라운드를 수행한 후, 최종 128비트 암호문 블록을 출력한다.
라운드 키 생성과정 128비트 입력키를 32비트식 4개의 조각으로 쪼갠 후(A, B, C, D) K1,0 = G(A+C-KC0); K1,1 = G(B-D+KC0)로 1라운드 키를 생성하고 A||B = (A||B)>>8 K2,0 = G(A+C-KC1); K2,1 = G(B-D+KC1)로 2라운드 키를 생성하고 C||D = (C||D)<<8 K3,0 = G(A+C-KC2); K3,1 = G(B-D+KC2)로 3라운드 키를 생성하고 계속해서 16라운드 키를 생성할 때까지 반복한다.
라운드 키 생성과정
S-Box i S1(I) 169 1 133 2 214 3 211 4 84 5 29 6 172 7 37 8 93 9 67 10 24 11 30 12 81 13 252 14 202 15 99 16 40 17 68 18 32 19 157 20 224 21 226 22 200 23 165 25 143 26 27 123 28 187 210 31 238 112 33 140 34 63 35 168 36 50 221 38 246 39 116 236 41 149 42 43 87 44 92 45 91 46 189 47 48 49 115 51 152 52 53 204 54 242 55 217 56 57 231 58 114 59 131 60 155 61 209 62 134 201 64 96 65 80 66 163 235 69 182 70 158 71 79 72 183 73 90 74 198 75 120 76 166 77 78 175 213 97 195 82 180 83 85 125 86 141 88 89 153 94 247 95 225 253 118 98 100 176 101 139 102 103 171 104 162 105 110 106 147 107 108 109 124 111 191 113 239 243 197 135 117 254 119 222 121 122 126 127
S-Box(계속) i S1(I) 128 2 129 245 130 146 131 138 132 12 133 179 134 126 135 208 136 122 137 71 150 139 229 140 38 141 142 173 143 223 144 161 145 48 55 147 174 148 54 149 21 34 151 56 152 244 153 167 154 69 155 76 156 157 233 158 159 160 53 203 162 206 163 60 164 113 165 17 166 199 168 117 169 251 170 218 171 248 172 89 175 196 176 255 177 73 178 57 103 180 192 181 207 182 215 183 184 15 185 186 66 187 35 188 189 108 190 219 191 52 193 241 194 72 195 111 197 61 198 45 64 200 201 62 202 204 205 78 85 59 209 220 210 104 211 127 212 213 216 214 74 86 119 217 237 70 221 43 222 101 250 224 227 225 226 228 94 249 230 231 232 49 234 109 235 95 236 240 238 239 22 58 242 88 243 98 41 246 7 247 51 27 5 121 252 253 106 254 42
S-Box(계속) i S2(I) 56 1 232 2 45 3 166 4 207 5 222 6 179 7 184 8 175 9 96 10 85 11 199 12 68 13 111 14 107 15 91 16 195 17 98 18 51 19 181 20 41 21 160 22 226 23 167 24 211 25 145 26 27 28 29 188 30 54 31 75 32 239 33 136 34 108 35 168 36 37 196 38 39 244 40 194 69 42 225 43 214 44 63 61 46 142 47 152 48 49 78 50 246 62 52 165 53 249 55 223 216 57 58 102 59 122 60 241 114 64 66 65 212 67 192 115 103 70 172 71 139 72 247 73 173 74 128 76 202 77 170 79 80 210 81 82 238 83 233 84 93 148 86 87 248 88 89 174 90 197 92 205 94 134 95 185 255 97 125 193 99 100 245 101 138 106 177 104 209 105 215 109 110 113 112 219 157 153 116 117 190 118 230 119 120 221 121 144 123 220 124 154 163 126 171 127 208
S-Box(계속) i S2(I) 128 129 15 130 71 131 26 132 227 133 236 134 141 135 191 136 150 137 123 138 92 139 162 140 161 99 142 35 143 77 144 200 145 158 146 156 147 58 148 12 149 46 186 151 110 152 159 153 90 154 242 155 243 157 73 120 204 160 21 251 112 163 117 164 127 165 53 166 16 167 3 168 100 169 109 170 198 171 116 172 213 173 180 174 234 175 9 176 118 177 25 178 254 179 64 18 181 224 182 189 183 5 184 250 185 1 240 187 42 188 94 190 86 67 192 193 20 194 195 196 197 229 72 199 121 201 252 202 30 203 33 205 206 27 207 95 208 119 209 84 210 211 29 212 37 79 214 215 70 216 237 217 88 218 82 219 235 220 126 221 222 223 253 48 225 226 101 60 228 230 231 124 232 14 233 80 57 38 50 238 105 239 55 241 36 244 245 83 246 10 247 248 249 76 59 74 255 SEED의 S-Box는 8비트 입력을 받아 8비트 출력을 내는 함수로써, 예를 들면, S1-box의 경우, 입력이 “21”이면 출력은 “226”이 된다.
B.인터페이스 SEED의 S-Box는 8비트 입력을 받아 8비트 출력을 내는 함수로써, 예를 들면, S1-box의 경우, 입력이 “21”이면 출력은 “226”이 된다.
B.인터페이스 최대한 간단한 인터페이스 제공 차후 변경에 따라 인터페이스의 미세한 변경. SEED의 S-Box는 8비트 입력을 받아 8비트 출력을 내는 함수로써, 예를 들면, S1-box의 경우, 입력이 “21”이면 출력은 “226”이 된다.