본문 바로가기

암호 구현

(6)
타원 곡선 암호(ECC) 연산 ECADD, ECDBL 위의 if와 else if는 0+P를 했을때 P가 나오길 원해서 한 것임 뒤의 scala multiplication시 필요하다고 생각됨 타원 곡선암호에서는 a값에만 좌우됨 b값은 연산시 사라짐으로 추정됨 ECADD를 구현하고 싶다면 가장 밑의 x3,y3를 구현하면됨 나누기의 경우 inverse를 먼저 구하고 곱하는 과정을 거침 결과 확인을 위해서는 ECDBL이 필요함 그래야 P+2P를 하여 3P의 결과를 확인 할수 있음 ECDBL(EC DouBLe) 원래는 x, y의 좌표가 필요하여 새로운 구조체를 만들어 두개의 두 구조체를 가지고 있게 만드려고 했으나 더 불편하였음 코드를 보다 보면 dest가 있는 자리는 앞과 인자가 겹치지 않음 앞에서 인자를 겹치게 하였다가 터졌기에 그런것임 또한 result를 내부..
ECC ㅡ BIG NUMBER (SQUARE, INVERSE) BIG number ㅡ square(제곱) 곱셈과 다르지 않습니다, 곱셈에 대해 설명은 전 글에 있습니다 BIG NUMBER INVERSE (역원) 역원을 구하는 방법은 많습니다 대표적으로 유클리드 호제법이 있고 제가 사용한 방법은 페르마 소정리입니다 Z^P-2을 구함으로써 역원을 찾을 수 있습니다 중간 결과값을 비교하고 확인하는 과정이 굉장히 힘들었습니다. 그래서 연구실 선배님들께서 sagecell을 사용하라 하셨고 파이썬을 하나도 모르는 저였지만 기본 계산 정도는 쉽게 할수 있었습니다 Sage Cell Server (sagemath.org) Sage Cell Server Type some Sage code below and press Evaluate. About SageMathCell About Sa..
ECC - BigNumber 구현 by C(곱셈 ,fast reduction in Fp) Big Number - 곱셈 곱셈은 이렇게 크게 PS, OS 두가지가 있다 OS가 더 빠른것으로 알고 있다 Big Number - REDUCTION 소수체 상에서의 곱셈, 제곱 연산의 결과를 다시 소수체 상 의 원소로 만들기 위해 필요한 연산이다 일반적으로 나눗셈을 수행한 후 나머지를 취한다 유의 할 점은 s들의 원소들은 반대로 들어가야 한다는 것 그 외에는 슈도코드를 따라가기만 하면 된다 비고 reduction을 짜고 맞춰 보던중 메모리가 터졌다.. 사실 함수들에서 계속 모두 동적할당을 해주었는데 해제를 안 해주었기 때문이었다 함수 내에서 변수들은 함수 호출이 끝나면 스택에서 해제 되므로 동적할당을 안 써야 겠다고 생각이 들었다 https://github.com/dlwotjr/ECC GitHub - d..
ECC - BigNumber 구현 by C(더하기, 빼기 in Fp) C언에에서 가장 큰 자료형은 long long으로 알고 있다 그렇다면 그것보다 큰 256비트는 어떻게 다루는가 이것이 bigNumber를 구현하는 이유이다 c를 아직 잘 사용 하지 못해서 c연습과 동시에 하고 있어 아직 미숙한 부분이 많다 FINITE FIELD 현대대수학 용어이다. 이 big number에서는 모든 연산에 modula 소수 P를 해줌으로 생각 하면 된다 소수 P FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF 테스트 벡터의 소수 값이다 Big Number 구조체 Big Number - Add 구조체를 보면 각각의 bigInt는 carry를 가지고 있다 이를 통해 8개의 32비트와 몇번의 reduction이 필요한지 알수..
LEA-CBC 구현(KAT, MCT, MMT검증) CBC MODE 테스트 벡터 https://seed.kisa.or.kr/kisa/algorithm/EgovLeaInfo.do KISA 암호이용활성화 - 국산 암호기술 - LEA 국산 암호기술 정보보호의 기반 암호기술 및 정책에 대한 다양한 정보전달 HOME 국산 암호기술 소개 국산 암호기술 차세대 암호 암호모듈검증 암호 역기능 대응 자료실 알림마당 LEA SEED HIGHT ARIA L seed.kisa.or.kr 파일 입출력 fscanf(fin, "KEY = ", read_buf); ---> KEY = 만큼 이동하라 for (int cnt_j = 0; cnt_j 128비트 받아야 함으로 %02x가 16개 { fscanf(fin, "%02X", &read_tmp[0])..
LEA 암호 구현 개요 블록암호 LEA는 Lightweight Encryption Algorithm의 약자로 128비트 데이터 블록을 암호화하며 비밀키로는 128, 192, 256비트를 사용 할 수 있다. 32비트 단위의 연산만으로 구성되어 있으며 따라서 uint32_t의 자료형을 사용한다. s-box의 사용을 배제하여 경량구현을 가능하게 했다. 주의 사항으로는 test vector가 big endian으로 되어 있다는 것이다. 참고 및 테스트 벡터 https://seed.kisa.or.kr/kisa/algorithm/EgovLeaInfo.do lea의 헤더 파일 8비트 자료형을 byte, 32비트 자료형을 uint32로 선언하였다 128비트 중간값들의 저장을 위한 uint32 state[4] 24라운드의 32*6비트 길..