'Security' 카테고리의 다른 글
WebKnight Rule 매뉴얼 (0) | 2011.05.17 |
---|---|
OWASP Top 10 2010 (0) | 2011.04.29 |
WebKnight Rule 매뉴얼 (0) | 2011.05.17 |
---|---|
OWASP Top 10 2010 (0) | 2011.04.29 |
WebKnight 설치/설정 가이드(설치중심) (0) | 2011.05.17 |
---|---|
OWASP Top 10 2010 (0) | 2011.04.29 |
그냥 평범한 이 뉴스를 보세요...
뉴스 자체는 평범합니다. 뭐 여기에 오류는 딱히 없겠죠. 다만 그 내용이 걱정스러울 뿐이죠.
'끝내리시드' 소리까지 들어가며 반다이 배를 불려준 동인녀용 건담과 백합 성향(?) 학원물이 뭐가 문제냐구요? 우연인지 필연인지는 모르겠지만, 이 두 단어만 보면 KISA나 국정원에도 뭔가 애니메이션 마니아가 있다는 의심을 지울 수 없습니다만...(이름 한 번 참 멋지게 지었습니다.) 하지만 이 기사는 사실 그렇게 기쁜 소식은 아닙니다. 곡해해서 들으면 이렇게 들릴 수 있기 때문입니다.
도대체 무슨 소리냐구요? SEED와 ARIA는 만든 곳과 그 규격은 조금씩 다르지만 웹 브라우저와 서버가 주고 받는 데이터를 암호화하는 규격입니다. SEED가 민간 규격이자 국제 규격이며, ARIA는 정부 주도의 KS 규격이라는 점만 다를 뿐입니다. 그런데 이것과 ActiveX가 무슨 상관이 있냐구요? 상관이 있으니까 이야기를 꺼내겠죠.
암호학 - 고전암호 :: 치환암호 (0) | 2011.05.07 |
---|---|
암호학 - Block Cipher :: 운영모드 (0) | 2011.05.07 |
암호학 - Block Cipher :: ARIA C# Code (0) | 2011.05.07 |
암호학 - Block Cipher :: AES S-Box, GF(2^8) 의 x^-1 Table (0) | 2011.05.07 |
암호학 - Involutional SPN (0) | 2011.05.07 |
SEED와 ARIA 확대 노력... 국내 인터넷을 '건담 찌질이화' 시키려는가? (1) | 2011.05.07 |
---|---|
암호학 - Block Cipher :: 운영모드 (0) | 2011.05.07 |
암호학 - Block Cipher :: ARIA C# Code (0) | 2011.05.07 |
암호학 - Block Cipher :: AES S-Box, GF(2^8) 의 x^-1 Table (0) | 2011.05.07 |
암호학 - Involutional SPN (0) | 2011.05.07 |
일정한 크기의 블록 단위의 암호화를 진행한다고 했습니다.
그렇다면 여기서, 만약 암호 알고리즘에서 제공하는 블록 크기보다 더 큰 크기의 평문을 암호화 하려면... ????
이 때 필요한 것이 블록 암호의 운영 모드입니다.
블록암호의 운영 모드는 크게 ECB, CBC, OFB, CFB, CTR의 다섯 가지 모드로 나뉩니다.
- ECB (Electronic Code Book)
ECB 모드는 매우 간단하게 생각해서 평문을 블록 크기로 잘라서 암호화 하는 방식입니다.
구지 수식으로 표현하면 ... Ci = E(Pi, K) 이렇게 되겠군요 ...
특징이라면 병렬 처리가 쉽다는 장점과 동시에
보안적 측면에서 입력이 랜덤화 되지 않고 평문이 쉽게 조작 될 수 있다는 단점이 있습니다.
- CBC (Cipher Block Chaining)
CBC 모드는 첫 번째 블록의 결과가 다음 블록의 암호화에 반영이 되기 때문에
ECB 모드보다 보안적 특성이 뛰어납니다.
다만 한 블록에서 에러가 발생되면 다음 블록에 영향을 미친다는 단점이 있습니다.
수식으로 표현하면 ... Ci = E((Pi xor Ci-1), K) 가 되겠군요
- OFB (Output FeedBack)
CBC 모드가 에러가 발생하면 에러가 발생한 다음 블록부터 계속 에러가 전파되는 현상이 있었습니다.
반면 OFB 모드는 이런 단점을 보완하여 평문에서 1-bit 에러가 발생하면
암호문에도 1-bit 에러만 발생하게 됩니다.
OFB 모드를 보면 키 스트림을 생성하고 평문과 XOR를 하여 암호를 만들어 내는 방법이기에
어떤 의미로는 스트림 암호로 볼 수 있습니다.
- CFB (Cipher FeedBack)
CFB 모드는 OFB 모드와 구조적으로 비슷해 보이나, 다소 다른 양상을 보입니다.
우선 한 암호문이 다음 블록의 키로 사용되기 때문에,
암호문을 알고 있는 상황에서 복호화를 병렬 처리 할 수 있다는 점이 특징입니다.
따라서 MISTY와 같이 복호화가 느린 시스템에서 사용하기에 좋겠지요
- CTR (Counter)
CTR 모드는 EBC 모드 처럼 병렬 처리가 가능 할 뿐만 아니라
EBC 모드 처럼 한 블록에서 생긴 에러가 다음 블록으로 전파 되지도 않으며
EBC 모드보다 안전합니다.
최종적으로 정리하면 다음과 같습니다.
|
EBC |
CBC |
OFB |
CFB |
Security |
- 평문 패턴 유지 - 블록 암호 입력이 랜덤화되지 않음 - 평문 조작이 쉬움 |
- 평문 패턴 없어짐 - 블록 암호 입력이 랜덤화 됨 - 평문 조작 어려움 |
- 평문 패턴 없어짐 - 블록 암호 입력이 랜덤화 됨 - 평문 조작이 쉬움 |
- 평문 패턴 없어짐 - 블록 암호 입력이 랜덤화 됨 - 평문 조작 어려움 |
Efficiency |
- 병렬처리 가능 - 전처리 불가능 |
- 복호화 병렬처리 - 전처리 불가능 |
- 병렬처리 불가능 - 전처리 가능 |
- 복호화 병렬처리 - 전처리 불가능 |
Error Propagation |
- 암호문 에러가 평문의 한 블록에만 영향을 줌 | - 암호문 에러가 다음 블록에 영향을 줌 | - 암호문 에러가 평문에 대응하는 비트에만 영향을 줌 | - 암호문 에러가 현재 블록과 다음 블록에 영향을 줌 |
표랑 본문을 이전 텍스트큐브 시절에 포스팅 한 걸 그대로 옮겨 온 것인데,
표를 다시 그리려니 ... 귀찮 ... 어려워서 그냥 CTR 모드는 표에 반영 못했네요 llorz
그 때는 그림도 같이 첨부 됐었는데, 그림 자료도 다 잃어버렸네요 ㅠㅠㅠㅠㅠㅠ
SEED와 ARIA 확대 노력... 국내 인터넷을 '건담 찌질이화' 시키려는가? (1) | 2011.05.07 |
---|---|
암호학 - 고전암호 :: 치환암호 (0) | 2011.05.07 |
암호학 - Block Cipher :: ARIA C# Code (0) | 2011.05.07 |
암호학 - Block Cipher :: AES S-Box, GF(2^8) 의 x^-1 Table (0) | 2011.05.07 |
암호학 - Involutional SPN (0) | 2011.05.07 |
소스보기
using System;
using System.Text;
class ARIA {
private byte[,] S = {
{
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
}, {
0xe2, 0x4e, 0x54, 0xfc, 0x94, 0xc2, 0x4a, 0xcc, 0x62, 0x0d, 0x6a, 0x46, 0x3c, 0x4d, 0x8b, 0xd1,
0x5e, 0xfa, 0x64, 0xcb, 0xb4, 0x97, 0xbe, 0x2b, 0xbc, 0x77, 0x2e, 0x03, 0xd3, 0x19, 0x59, 0xc1,
0x1d, 0x06, 0x41, 0x6b, 0x55, 0xf0, 0x99, 0x69, 0xea, 0x9c, 0x18, 0xae, 0x63, 0xdf, 0xe7, 0xbb,
0x00, 0x73, 0x66, 0xfb, 0x96, 0x4c, 0x85, 0xe4, 0x3a, 0x09, 0x45, 0xaa, 0x0f, 0xee, 0x10, 0xeb,
0x2d, 0x7f, 0xf4, 0x29, 0xac, 0xcf, 0xad, 0x91, 0x8d, 0x78, 0xc8, 0x95, 0xf9, 0x2f, 0xce, 0xcd,
0x08, 0x7a, 0x88, 0x38, 0x5c, 0x83, 0x2a, 0x28, 0x47, 0xdb, 0xb8, 0xc7, 0x93, 0xa4, 0x12, 0x53,
0xff, 0x87, 0x0e, 0x31, 0x36, 0x21, 0x58, 0x48, 0x01, 0x8e, 0x37, 0x74, 0x32, 0xca, 0xe9, 0xb1,
0xb7, 0xab, 0x0c, 0xd7, 0xc4, 0x56, 0x42, 0x26, 0x07, 0x98, 0x60, 0xd9, 0xb6, 0xb9, 0x11, 0x40,
0xec, 0x20, 0x8c, 0xbd, 0xa0, 0xc9, 0x84, 0x04, 0x49, 0x23, 0xf1, 0x4f, 0x50, 0x1f, 0x13, 0xdc,
0xd8, 0xc0, 0x9e, 0x57, 0xe3, 0xc3, 0x7b, 0x65, 0x3b, 0x02, 0x8f, 0x3e, 0xe8, 0x25, 0x92, 0xe5,
0x15, 0xdd, 0xfd, 0x17, 0xa9, 0xbf, 0xd4, 0x9a, 0x7e, 0xc5, 0x39, 0x67, 0xfe, 0x76, 0x9d, 0x43,
0xa7, 0xe1, 0xd0, 0xf5, 0x68, 0xf2, 0x1b, 0x34, 0x70, 0x05, 0xa3, 0x8a, 0xd5, 0x79, 0x86, 0xa8,
0x30, 0xc6, 0x51, 0x4b, 0x1e, 0xa6, 0x27, 0xf6, 0x35, 0xd2, 0x6e, 0x24, 0x16, 0x82, 0x5f, 0xda,
0xe6, 0x75, 0xa2, 0xef, 0x2c, 0xb2, 0x1c, 0x9f, 0x5d, 0x6f, 0x80, 0x0a, 0x72, 0x44, 0x9b, 0x6c,
0x90, 0x0b, 0x5b, 0x33, 0x7d, 0x5a, 0x52, 0xf3, 0x61, 0xa1, 0xf7, 0xb0, 0xd6, 0x3f, 0x7c, 0x6d,
0xed, 0x14, 0xe0, 0xa5, 0x3d, 0x22, 0xb3, 0xf8, 0x89, 0xde, 0x71, 0x1a, 0xaf, 0xba, 0xb5, 0x81
}, {
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
}, {
0x30, 0x68, 0x99, 0x1b, 0x87, 0xb9, 0x21, 0x78, 0x50, 0x39, 0xdb, 0xe1, 0x72, 0x09, 0x62, 0x3c,
0x3e, 0x7e, 0x5e, 0x8e, 0xf1, 0xa0, 0xcc, 0xa3, 0x2a, 0x1d, 0xfb, 0xb6, 0xd6, 0x20, 0xc4, 0x8d,
0x81, 0x65, 0xf5, 0x89, 0xcb, 0x9d, 0x77, 0xc6, 0x57, 0x43, 0x56, 0x17, 0xd4, 0x40, 0x1a, 0x4d,
0xc0, 0x63, 0x6c, 0xe3, 0xb7, 0xc8, 0x64, 0x6a, 0x53, 0xaa, 0x38, 0x98, 0x0c, 0xf4, 0x9b, 0xed,
0x7f, 0x22, 0x76, 0xaf, 0xdd, 0x3a, 0x0b, 0x58, 0x67, 0x88, 0x06, 0xc3, 0x35, 0x0d, 0x01, 0x8b,
0x8c, 0xc2, 0xe6, 0x5f, 0x02, 0x24, 0x75, 0x93, 0x66, 0x1e, 0xe5, 0xe2, 0x54, 0xd8, 0x10, 0xce,
0x7a, 0xe8, 0x08, 0x2c, 0x12, 0x97, 0x32, 0xab, 0xb4, 0x27, 0x0a, 0x23, 0xdf, 0xef, 0xca, 0xd9,
0xb8, 0xfa, 0xdc, 0x31, 0x6b, 0xd1, 0xad, 0x19, 0x49, 0xbd, 0x51, 0x96, 0xee, 0xe4, 0xa8, 0x41,
0xda, 0xff, 0xcd, 0x55, 0x86, 0x36, 0xbe, 0x61, 0x52, 0xf8, 0xbb, 0x0e, 0x82, 0x48, 0x69, 0x9a,
0xe0, 0x47, 0x9e, 0x5c, 0x04, 0x4b, 0x34, 0x15, 0x79, 0x26, 0xa7, 0xde, 0x29, 0xae, 0x92, 0xd7,
0x84, 0xe9, 0xd2, 0xba, 0x5d, 0xf3, 0xc5, 0xb0, 0xbf, 0xa4, 0x3b, 0x71, 0x44, 0x46, 0x2b, 0xfc,
0xeb, 0x6f, 0xd5, 0xf6, 0x14, 0xfe, 0x7c, 0x70, 0x5a, 0x7d, 0xfd, 0x2f, 0x18, 0x83, 0x16, 0xa5,
0x91, 0x1f, 0x05, 0x95, 0x74, 0xa9, 0xc1, 0x5b, 0x4a, 0x85, 0x6d, 0x13, 0x07, 0x4f, 0x4e, 0x45,
0xb2, 0x0f, 0xc9, 0x1c, 0xa6, 0xbc, 0xec, 0x73, 0x90, 0x7b, 0xcf, 0x59, 0x8f, 0xa1, 0xf9, 0x2d,
0xf2, 0xb1, 0x00, 0x94, 0x37, 0x9f, 0xd0, 0x2e, 0x9c, 0x6e, 0x28, 0x3f, 0x80, 0xf0, 0x3d, 0xd3,
0x25, 0x8a, 0xb5, 0xe7, 0x42, 0xb3, 0xc7, 0xea, 0xf7, 0x4c, 0x11, 0x33, 0x03, 0xa2, 0xac, 0x60
}
};
private byte[,] KRK = {
{0x51, 0x7c, 0xc1, 0xb7, 0x27, 0x22, 0x0a, 0x94, 0xfe, 0x13, 0xab, 0xe8, 0xfa, 0x9a, 0x6e, 0xe0},
{0x6d, 0xb1, 0x4a, 0xcc, 0x9e, 0x21, 0xc8, 0x20, 0xff, 0x28, 0xb1, 0xd5, 0xef, 0x5d, 0xe2, 0xb0},
{0xdb, 0x92, 0x37, 0x1d, 0x21, 0x26, 0xe9, 0x70, 0x03, 0x24, 0x97, 0x75, 0x04, 0xe8, 0xc9, 0x0e}
};
byte[] DL(byte[] i) {
byte[] o = new byte[16];
byte T;
T = (byte)(i[ 3] ^ i[ 4] ^ i[ 9] ^ i[14]);
o[ 0] = (byte)(i[ 6] ^ i[ 8] ^ i[13] ^ T);
o[ 5] = (byte)(i[ 1] ^ i[10] ^ i[15] ^ T);
o[11] = (byte)(i[ 2] ^ i[ 7] ^ i[12] ^ T);
o[14] = (byte)(i[ 0] ^ i[ 5] ^ i[11] ^ T);
T = (byte)(i[ 2] ^ i[ 5] ^ i[ 8] ^ i[15]);
o[ 1] = (byte)(i[ 7] ^ i[ 9] ^ i[12] ^ T);
o[ 4] = (byte)(i[ 0] ^ i[11] ^ i[14] ^ T);
o[10] = (byte)(i[ 3] ^ i[ 6] ^ i[13] ^ T);
o[15] = (byte)(i[ 1] ^ i[ 4] ^ i[10] ^ T);
T = (byte)(i[ 1] ^ i[ 6] ^ i[11] ^ i[12]);
o[ 2] = (byte)(i[ 4] ^ i[10] ^ i[15] ^ T);
o[ 7] = (byte)(i[ 3] ^ i[ 8] ^ i[13] ^ T);
o[ 9] = (byte)(i[ 0] ^ i[ 5] ^ i[14] ^ T);
o[12] = (byte)(i[ 2] ^ i[ 7] ^ i[ 9] ^ T);
T = (byte)(i[ 0] ^ i[ 7] ^ i[10] ^ i[13]);
o[ 3] = (byte)(i[ 5] ^ i[11] ^ i[14] ^ T);
o[ 6] = (byte)(i[ 2] ^ i[ 9] ^ i[12] ^ T);
o[ 8] = (byte)(i[ 1] ^ i[ 4] ^ i[15] ^ T);
o[13] = (byte)(i[ 3] ^ i[ 6] ^ i[ 8] ^ T);
return o;
}
void RotXOR(byte[] s, int n, ref byte[] t) {
int q = n/8;
n %= 8;
for (int i=0; i<16; i++) {
t[(q+i) % 16] ^= (byte)(s[i] >> n);
if (n != 0) t[(q+i+1) % 16] ^= (byte)(s[i] << (8-n));
}
}
void KeyExpansion(byte[] k, ref byte[] w0, ref byte[] w1, ref byte[] w2, ref byte[] w3) {
int i;
byte[] Tmp = new byte[16];
for(i=0; i<16; i++) w0[i] = k[i];
for(i=0; i<16; i++) Tmp[i] = S[i%4, KRK[0, i]^w0[i]];
w1 = DL(Tmp);
for(i=0; i<16; i++) Tmp[i] = S[(i+2)%4, KRK[1, i]^w1[i]];
w2 = DL(Tmp);
for(i=0; i<16; i++) w2[i] ^= w0[i];
for(i=0; i<16; i++) Tmp[i] = S[i%4, KRK[2, i]^w2[i]];
w3 = DL(Tmp);
for(i=0; i<16; i++) w3[i] ^= w1[i];
}
void RoundKey(byte[] w0, byte[] w1, byte[] w2, byte[] w3, int n, ref byte[] rk) {
int i;
for(i=0; i<16; i++) rk[i] = 0;
switch(n) {
case 0:
RotXOR(w0, 0, ref rk);
RotXOR(w1, 19, ref rk);
break;
case 1:
RotXOR(w1, 0, ref rk);
RotXOR(w2, 19, ref rk);
break;
case 2:
RotXOR(w2, 0, ref rk);
RotXOR(w3, 19, ref rk);
break;
case 3:
RotXOR(w3, 0, ref rk);
RotXOR(w0, 19, ref rk);
break;
case 4:
RotXOR(w0, 0, ref rk);
RotXOR(w1, 31, ref rk);
break;
case 5:
RotXOR(w1, 0, ref rk);
RotXOR(w2, 31, ref rk);
break;
case 6:
RotXOR(w2, 0, ref rk);
RotXOR(w3, 31, ref rk);
break;
case 7:
RotXOR(w3, 0, ref rk);
RotXOR(w0, 31, ref rk);
break;
case 8:
RotXOR(w0, 0, ref rk);
RotXOR(w1, 67, ref rk);
break;
case 9:
RotXOR(w1, 0, ref rk);
RotXOR(w2, 67, ref rk);
break;
case 10:
RotXOR(w2, 0, ref rk);
RotXOR(w3, 67, ref rk);
break;
case 11:
RotXOR(w3, 0, ref rk);
RotXOR(w0, 67, ref rk);
break;
case 12:
RotXOR(w0, 0, ref rk);
RotXOR(w1, 97, ref rk);
break;
}
}
static void Main(string[] args) {
ARIA aria = new ARIA();
byte[] State = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F};
byte[] Key = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF};
for(int i=0; i<1000; i++) {State = aria.Enc(State, Key);
for(int j=0; j<16; j++) Console.Write("{0:X2} ", State[j]);
Console.WriteLine();}
}
byte[] Enc(byte[] Plaintext, byte[] Key) {
int i;
int j;
byte[] Ciphertext = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
byte[] W0 = new byte[16];
byte[] W1 = new byte[16];
byte[] W2 = new byte[16];
byte[] W3 = new byte[16];
byte[] Tmp = new byte[16];
byte[] RK = new byte[16];
KeyExpansion(Key, ref W0, ref W1, ref W2, ref W3);
for(j=0; j<16; j++) Ciphertext[j] = Plaintext[j];
// Encryption
for(i=0; i<5; i++) {
RoundKey(W0, W1, W2, W3, 2*i, ref RK);
for(j=0; j<16; j++) Tmp[j] = S[j%4,RK[j]^Ciphertext[j]];
Ciphertext = DL(Tmp);
RoundKey(W0, W1, W2, W3, 2*i+1, ref RK);
for(j=0; j<16; j++) Tmp[j] = S[(2+j)%4,RK[j]^Ciphertext[j]];
Ciphertext = DL(Tmp);
}
RoundKey(W0, W1, W2, W3, 10, ref RK);
for(j=0; j<16; j++) Tmp[j] = S[j%4, RK[j]^Ciphertext[j]];
Ciphertext = DL(Tmp);
RoundKey(W0, W1, W2, W3, 11, ref RK);
for(j=0; j<16; j++) Tmp[j] = S[(2+j)%4, RK[j]^Ciphertext[j]];
RoundKey(W0, W1, W2, W3, 12, ref RK);
for(j=0; j<16; j++) Ciphertext[j] = (byte)(Tmp[j] ^ RK[j]);
return Ciphertext;
}
}
암호학 - 고전암호 :: 치환암호 (0) | 2011.05.07 |
---|---|
암호학 - Block Cipher :: 운영모드 (0) | 2011.05.07 |
암호학 - Block Cipher :: AES S-Box, GF(2^8) 의 x^-1 Table (0) | 2011.05.07 |
암호학 - Involutional SPN (0) | 2011.05.07 |
암호학 - Block Cipher :: SEED - C++/CLR 프로그램 (0) | 2011.05.07 |
암호학 - Block Cipher :: 운영모드 (0) | 2011.05.07 |
---|---|
암호학 - Block Cipher :: ARIA C# Code (0) | 2011.05.07 |
암호학 - Involutional SPN (0) | 2011.05.07 |
암호학 - Block Cipher :: SEED - C++/CLR 프로그램 (0) | 2011.05.07 |
암호학 - Public Key Cipher :: RSA와 안전성 (0) | 2011.05.07 |
암호학 - Block Cipher :: ARIA C# Code (0) | 2011.05.07 |
---|---|
암호학 - Block Cipher :: AES S-Box, GF(2^8) 의 x^-1 Table (0) | 2011.05.07 |
암호학 - Block Cipher :: SEED - C++/CLR 프로그램 (0) | 2011.05.07 |
암호학 - Public Key Cipher :: RSA와 안전성 (0) | 2011.05.07 |
암호학 - Shannon :: Confusion, Diffusion (0) | 2011.05.07 |