본문 바로가기

전체글139

github action matrix strategy 활용 상황 설명 1. 우리 프로젝트는 PR 올리면 자동으로 테스트를 실행시키기 위해(CI 빌더로써) github action 을 활용한다. 2. 네이버망에 있는 서버와 API 통신을 할 때 Proxy 서버를 거쳐서 가도록 수정이 필요하다(보안 요구사항). WebClient 는 아래 코드와 같이 isSecurityProxyEnabled 가 true 인 경우(Proxy 서버를 거쳐가야 하는 경우), proxy 메서드를 통해 Proxy 서버 주소와 포트를 알려준다. @Value("${security-proxy.enabled:false}") private boolean isSecurityProxyEnabled; // true 이면, proxy서버를 거쳐야 한다 HttpClient httpClient = HttpCli.. 2022. 11. 13.
[논문분석] 블록체인 기반 분산 스토리지 시스템Storj Frameup 공격 및 대책 Storj 는 블록체인 기반 저장소 플랫폼이다. 해당 플랫폼을 공격하는 방법과 대책에 대한 논문을 분석하고 정리했다. 먼저 구글 드라이브 같은 전통적인 클라우드 저장소 플랫폼은 아래 왼쪽 그림과 같다. 기업 데이터센터에서 모든 파일들을 관리하고 클라우드 서비스를 제공한다. 하지만 Storj 는 업로드된 파일을 보관하는 역할도 일반 유저가 한다. 이런 역할을 수행하는 유저를 Farmer 라 부르는데, 개인 저장공간을 제공함으로써 보상으로 Storj 암호화폐 토큰을 얻을 수 있다. 반대로 Storj 암호화폐 토큰을 지불하고 서비스를 이용하는 유저를 Renter 라고 한다. 아래 오른쪽 그림을 보면 마치 Storj Bride 서버가 중앙집중식으로 모든걸 관리하는것처럼 보이지만, Renter 파일을 어느 Far.. 2022. 11. 12.
서명 생성과 검증 여기에서 설명했듯이 스칼라 곱셈이 공개키 암호 기법의 핵심이다. 비트코인에서는 secp256k1 타원곡선을 사용한다. 타원곡선은 $y^2 = x^3 + ax + b$ 인데 secp256k1 는 a=0, b=7 인 곡선이다. 유한체 위수(order) p 값(소수)은 `2**256 - 2**32 - 977` 다. 생성점 $G_x$ 값은 `0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798` 다. 생성점 $G_y$ 값은 `0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 ` 다 G(생성점) 의 유한순환군 위수 n 값은 `0xffffffffffffffffffffffffffff.. 2022. 10. 29.
타원곡선 위 점의 스칼라 곱셈 타원곡선위 한점을 계속 더하는것이다. 그리고 그 결과는 예측하기 어렵다. $ (170,142) + (170, 142) = 2 \cdot (170, 142) $ $ 2 \cdot (170, 142) + (170, 142) = 3 \cdot (170, 142) $ prime = 223 a = FieldElement(0, prime) b = FieldElement(7, prime) x1 = FieldElement(170, prime) y1 = FieldElement(142, prime) p = Point(x1, y1, a, b) print(p + p) 스칼라 곱셈의 또다른 특징이 있다. 어떤 점에 스칼라 값을 계속 증가시키면서 곱하다 보면 무한원점(덧셈에 대한 항등원. I) 에 도달한다. 그래서 만약 어떤 점.. 2022. 10. 29.
유한체에서 정의된 타원곡선 덧셈 유한체에서 정의된 타원곡선 유한체에서 정의되었기 때문에 타원곡선 모양이 실수체에서 정의된것과 많이 다르다. 유한체 원소들은 연속적이지 않기 때문이다. 유일하게 관찰되는 패턴은, $y^2$ 항 때문에 y 축의 중간값(100) 을 지나는 수평축을 기준으로 대칭이다. 실수체에서의 곡선처럼 x 축으로 대칭도 아니다. 유한체에서 음수가 없기 때문이다. # 연습문제 3.1 prime = 223 a = FieldElement(0, prime) b = FieldElement(7, prime) def on_curve(x, y): return y ** 2 == x ** 3 + a * x + b print(on_curve(FieldElement(192, prime), FieldElement(105, prime))) prin.. 2022. 10. 29.
타원곡선 덧셈 타원곡선 위의 점 덧셈 기본원리는 아래 그림과 같다. 덧셈에 대한 모든 케이스는 아래 세가지로 나눠서 따져봐야한다. 1. 두 점이 x 축에 수직인 직선 위에 있는 경우 p1 = Point(-1, -1, 5, 7) p2 = Point(-1, 1, 5, 7) inf = Point(None, None, 5, 7) print(p1 + inf == p1) print(p2 + inf == p2) print(p1 + p2 == inf) def __add__(self, other): # None 은 무한원점을 의미한다. self 가 무한원점이면, other 를 리턴. ex) A(other) + I(self) = A if self.x is None: return other # other.x 가 무한원점이면, self 를.. 2022. 10. 29.