-
KMS11 : C language ECC 키 연산 중간 보고(4 - 0.0.2)Program_Light 2021. 4. 24. 13:00
KMS11 : ECC algorithm 지난번에 개발하던 RSA알고리즘을 거의 마무리 짓고 ECC 알고리즘을 개발하여, 프로그램이 입력값에 따라 계산을 하고 그 결과를 확인할 수 있는 수준까지 개발하였다. 아직 완벽한 단계는 아니며, 약 30%까지 개발했다고 할 수 있다.
최근 세 달 정도 ECC제작을 핑계로 포스팅을 잘 하지 않았다.(+기말고사, NYPC, KOI)
사실상 블로그 조회수의 대부분은 그나마 덜 마이너한 이진법 암호가 모두 책임지고 있지만 활동은 안해서인지 유입량이 줄었다.
조회수 늘어난다고 딱히 쓸 곳은 없지만 개인적으로 참 아쉬운 기분이다. 게임에서 골드 빼았기는 기분이 이런건가.
* 이 글은 2020.10.31에 작성된 제작자의 네이버 블로그 글입니다.
결론적으로 말하자면 세 달을 투자한 것에 비해 결과가 좋지 못하게 나왔다.
내가 생각해도 세 달만에 RSA7.0까지 만든 나에게 세 달 투자에 이런 결과가 나온것에 매우 유감이다.
변명을 하자면 이번 ECC는 중간에 하다가 3번을 뒤집어 까 엎었다. 함수구조가 마음에 안들어서. 소스파일을 모두 삭제했다는 뜻이다. 그래서 이번이 4번째 ECC구현이다. 사실상 일주일 ~ 5일 내에 나온 작업물이기에 그나마 위안이 된다.
이번에 ECC코드가 워낙 허술해서 코드 공개를 할지 말지 고민했다.
하지만 이번에도 코드를 공개하지 않기록 했다.
사유는 지난 RSA와 반대로 코드가 너무 하찮다. 이런걸 공개할빠에 연산결과만을 공개하는 것이 낮다 판단하였다. 그래서 공개를 안할 것이다.
그토록 찾아보기 힘든 [오픈소스 라이브러리 없이 구현한 ECC]를 기다하고 들어온 독자에게는 죄송하다.
/*
made by KMS_STUDIOKMS11_ECC_algorithm_0_0_Mars_progect
made by 2020 KMS studio(Myung Seok Kang)
20year 09m 11d 16h 12m ~ 20year 09m 17d 02h 18m
Copyright 2020 KMS studio all rights reserved.
thanks for Kyung Taek Park
Si Hyun Kim
*/
테스트 구조
우선 ECC의 적폐가 하나 있습니다.
무.한.원.점
원래는 어떤 점 n을 곱해 최초로 무한원점이 나오는 수를 상수 n으로 지정하고 곱하는 수를 x를 n보다 적게 정의 해야 하지만, 테스트를 할 때마다 n값을 계산할 수도 없고, 어차피 나중에 256secp의 n값을 상수로 사용할 것이기에 이 부분은 계산하지 않았습니다. 완성형 프로그램이 나왔을때 입력한 ECC-curve의 규격이 정해져 있기에, 타원 곡선, 생성자의 입력과 계산은 구현하지 않았습니다.
둘 모두 나중에 완성형 프로그램을 만들때 사용할 수 있는 표준 규격이 있기에 가능한 가정입니다.참고로 이 변수는 16진법을 사용합니다.
테스트 코드 구조
간단하게 (mod p)의 유한체 위 curve곡선에 속하는 점 G에 x값을 곱한 것을 출력합니다.
코드가 너무 단순하여 설명은 붙이지 않습니다.
#include <stdio.h> #include <stdlib.h> #include "KMS11.h" int main(void) { CURVE curve; KMS x; POINT alpha; HEADER_SETUP(); set("10", &curve.a); set("11", &curve.b); set("1100001", &curve.p); set("11", &curve.G.x); set("110", &curve.G.y); set("11", &x); kECC_pointMtp(&alpha, &x, &curve); kECC_print(&alpha.x); kECC_print(&alpha.y); return 0; }
테스트 결과
참고로 저 숫자가 의미하는 바는 (80, 87)이고, 3 * (3, 6) (mod p, curve{ 2, 3})의 값이 80, 87입니다. 정확한 값이 나오는 것을 확인할 수 있습니다.
위 식에 따른 계산결과와 값이 같은 것을 확인할 수 있기 떄문입니다.
https://ethresearch.kr/t/topic/165 참고로 저 그림이 순환형 (5P = 0P) 인 이유는 닫힌 계에서의 군의 연산이기 때문입니다. 자세한 설명은 생략합니다.
* 2020. 9. 1에 작성된 네이버 블로그 글입니다
* 글을 쓰고 보니 ECC + KOI + 중간 스트레스가 겹쳐서 글이 예민해 보이네요... 양해바랍니다.
'Program_Light' 카테고리의 다른 글
KMS12 : Python PyQt5를 이용한 줌 반자동 참가기 (source) (0) 2021.06.05 KMS11 : C language ECC 키 연산 결과 보고 (0) 2021.05.01 KMS10 : C language RSA 키 연산 결과 보고(Arduino Due 순정) (0) 2021.04.17 KMS08 : C++ 한글→숫자 변환함수 소스 (0) 2021.04.10 KMS07 : C++ 소인수분해, 소수판별, 확장유클리드 알고리즘 소스 (0) 2021.04.03