목록암호학 (5)
controlpro

0. Boolen masking 기본 설계 처음 구조는 다음과 같다. 키 스케줄링에서는 딱히 마스킹이 들어가지 않고 암호화 알고리즘 자체에서만 마스킹이 진행이 된다. 기본적인 개념은 위의 그림처럼 Plaintext를 Xor로 잘라서 각각의 Share로 만들어준다. 이 때, 기본적은 share은 두개이고 하나의 Share는 암호화 할때 항상 랜덤으로 하고 나머지 Share는 plaintext랑 연산을 해줘서 만든다. 동일하게 Roundkey도 plaintext과 동일하게 Share Group을 만든다. 그래서 원래는 Roundkey자체랑 Plaintext 자체 끼리 계산을 하는게 아니라 plain과 RK의 Share끼리 계산이 된다. 그 다음 S-layer를 거치게 되는데 여기서 bitslice로 구현되어..
// TestAppDll.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include int Sbox[16] = { 0xE, 0x3, 0x0, 0x7, 0x2, 0xC, 0xF, 0xB, 0x5, 0xA, 0x6, 0x9, 0x8, 0x1, 0x4, 0xD }; int InverseSbox[16] = { 0x2, 0xD, 0x4, 0x1, 0xE, 0x8, 0xA, 0x3, 0xC, 0xB, 0x9, 0x7, 0x5, 0xF, 0x0, 0x6 }; int guess_key[16] = { 0x0000 , 0x0001 , 0x0010 , 0x0011 , 0x0100 , 0x0101 , 0x0..
// TestAppDll.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include int Sbox[16] = { 0xE, 0x3, 0x0, 0x7, 0x2, 0xC, 0xF, 0xB, 0x5, 0xA, 0x6, 0x9, 0x8, 0x1, 0x4, 0xD }; int InverseSbox[16] = { 0x2, 0xD, 0x4, 0x1, 0xE, 0x8, 0xA, 0x3, 0xC, 0xB, 0x9, 0x7, 0x5, 0xF, 0x0, 0x6 }; extern "C" __declspec(dllexport) void Substitution(int* p, int* c) { *c = (Sbox..

알고리즘 공부하면서 SEED 코딩을 직접해보았다. 옛날에 AES암호를 코딩할 때 보다 코드를 보는 눈이라던가, 코딩 실력이 많이 는거 같다. 저번에 SEED공부할 때 쓰던 문서와 같이 보면 좋을 거같다. Block 암호 코딩 할때 항상 생각해야하는게 평문의 길이라던가 한 블록의 크기 인데 128bit를 담을 만한 크기의 변수 공간이 없어서 unsigned long 형을 4개 이어 붙였다. (L[0] , L[1] , R[0] , R[1]) 시나리오. 1. 16bytes 평문을 파일로 받아서 읽고, 16bytes 암호문을 파일에 저장한다. 1. F 함수 void SEED_F(ULONG L[2], ULONG R[2], ULONG k[2]) { // L이 return 값 //R이 수행값 R[0] = C , R[..

부채널 공부를 하면서 다양한 암호 알고리즘을 스스로 정리하고 공부해야겠다는 생각에 쓴다. 참고는 kisa에서 제공하는 seed 128bit 알고리즘 상세 명세서를 보았다. 1. 기본 알고리즘의 형태 기본적인 알고리즘의 형태는 Feistel 구조로 이루어져 있고 128bit의 평문과 128bit의 키를 입력을 거치고 총 16 Round를 진행 기본적인 알고리즘의 구조를 보면 128bit를 64bit씩 쪼개서 각각 L0 와 R0으로 나눠지고 하나의 Round를 거칠 때 마다 블록이 크로스(?)형태를 띈다. 하나의 블록이 F - 함수를 거치면서 계속해서 암호화되는 구조이다. 2. F-함수 문서에 써져 있는 대로 표현해보자면 우리가 SPN 구조와 다르게 Feistel 구조는 F 함수의 특성에 따라 구분이된다. ..