본문 바로가기

분류 전체보기

(66)
AWS 서버 아키텍처 구축하기 REST API 서버가 필요한 상황이 와서 AWS를 통해 서버를 구축하게 되었는데 결과적을 구축된 아키텍처 와 왜 이렇게 사용했는지에 대해 기록하려 한다. 만약 나처럼 AWS는 처음 다뤄보는 사람에게는 도움이 되길. 요구 사항 1. 부하 테스트를 통해 적절한 스펙의 서버(5분마다 약 1만 건의 API 요청) 2. 부하 테스트를 통해 적절한 적절한 RDS 구비 3. 서버와 RDS의 이중화 4. 서버가 다운되더라도 다시 올라올 수 있게 가용성 유지 5. HTTPS 통신 6. 도매인 구입 ​ 요구 사항에 맞추기 1. EC2 AWS는 다양한 플랫폼을 제공하지만 그중 대표적인 EC2를 이용하여 서버를 구축했다. 여기서 문제는 EC2 가 너무 다양하게 제공하는 것인데 운영체제부터 스펙까지 너무 다양했고 운영체제는 ..
JPA 에서 GeneratedValue 를 하지않는다는것은 JPA 에서 Entity 를 생성하여 PK 를 잡는 ID 를 지정할때 @Id @GeneratedValue @Column(name = "order_id") private Long id; private String title; @ManyToOne(fetch = LAZY) @JoinColumn(name = "member_id") private Member member; 위와같이 GeneratedValue 를 통해 자동생성을 둘수도있지만 String 와 같은 다른 타입 PK 로지정이 가능하다. GeneratedValue 가 아닌 다른 타입으로 지정한다는것은 결국 데이터를 추가할때 PK를 미리 지정해준다는 의미일것이다. GeneratedValue 의 동작 GeneratedValue 는 Entity 객체를 생성후 ..
단방향 해시의 문제 와 PBKDF2 TL;DR 단방향 해시는 쉽게 해킹당할수있다 따라서 솔팅 이나 키스트레칭으로 이를 해결한다. PBKDF2는 패스워드를 솔팅이라는 값과 함께 여러번 해시를 하는 작업이다. 단방향 해시 문제점 대부분 패스워드 관리와 같은 중요한 정보는 해시를 통해 저장을하게되는데 사실 해시는 패스워드 저장에 설계된것이 아닌 매우 빠른 처리속도로 데이터를 검색하기위해 설계되어 이로인해 해킹공격또한 가능해지게된다.(레인보우 테이블 획득 속도 증가) 해결 방안 1. 솔팅(salting) 솔트(salt)는 다이제스트(해시된 값) 을 생성할때 추가하는 임의의 문자열을 말한다. 만약 패스워드 q1w2e3r4 를 해시할때 솔팅 작업을 한다고하면 (raonsalt(솔트) + q1w2e3r4 (패스워드)) → 해시 → 결과 의 작업을 수행..
RSA는 왜 공개키부터 만들까? 꽤나 의미 없는 의문일 수 있지만 갑자기 드는 의문에 굉장히 궁금해서 좀 알아보게 되었다. ​ 나는 개인적으로 공개키와 개인키의 사이에서는 개인키를 먼저 구하고 공개키를 개인키에 맞춰 구하는 거라고 생각하고 있었으나 RSA의 키 생성 알고리즘을 보니 공개키 생성 후 개인키 생성하는 것을 많은 책이나 블로그에서 확인하였다. RSA 키 생성 1. 큰 소수 p , q 생성 2. n = p * q 3. Φ(n) = (p - 1) * (q - 1) 4. 1 < e < Φ(n) 이며 Φ(n) 과 e 가 서로소인 e 생성 //공개키 5. (e * d) mod Φ(n) = 1 //개인키 많은 곳에서 해당 RSA 키 알고리즘을 확인하였으나 수식에 대한 설명이 조금 다를 뿐 모두 공개키, 개인키 순으로 구하는 방식이었다...
CL Signature SL Signature CL서명은 2001년 Jan Camensisch 와 Anna Lysyanskaya 에 의해 만들어졌으며 익명성 강화 암호화에 사용된다. 기존의 서명은 서명을 할때마다 점점 자신의 신분을 노출하게되는데 CL서명은 이러한 경우가없고 예로 18세 이상임을 익명으로 증명할수있게된다. 이렇기 위해서는 사용자(prover)는 18세 이상이라는것을 신뢰할수있는곳(issuer)에서 먼저 서명을 받고 검증자(verifier)에게 이 서명문을 제출하는것으로 검증하게된다. 사용자는 나이 이름 주소 를 가지고 하나의 서명문을 받았다고 해도 사용자는 검증자에게 나이만 제출할수도 있게되며 이 서명문의 주인이라는것도 함께 증명하게된다. 흐름 Issuer의 공개키 먼저 Issuer은 공개된 장소에 공개키를 노..
영지식 증명 (Zero-Knowledge Proof) 가 무엇일까 Zero-Knowledge Proof 영 지식(zero-knowledge) + 증명 먼저 지식이라는 것은 결국 어떠한 정보를 의미하며 개인 정보와 밀접한 관계를 가질 수 있다. ​ 하지만 앞에 zero, 즉 어떠한 정보도 들어내지 않는다는 영지식과 증명이 하나로 만난 용어이다. 결국 영 지식 증명의 의미로는 "정보를 노출하지 않고 증명하는 것" 을 의미한다. 가장 핵심적이고 가장 궁금한 부분은 어떻게 정보를 노출하지 않고 증명하는가에 대해서이다. Prover 즉 검증받는 존재는 자신의 정보를 노출하지 않고 자신의 증거를 제출해야 하고 Verifier 즉 검증하는 존재는 Prover이 준 증거가 옳은지 옳지 않은 지 확인할 수 있어야 한다. ​ 이렇게 증명하는 시스템이 2가지가 존재한다. 대화형 영지식 증..
블록체인 에서의 이중 지불 문제 와 해결 이중 지불 이중 지불이란 하나의 자산이 한 번만 결제가 되는 것이 아니라 두 번 결제되는 상황을 말한다. 즉 내가 계좌에 만 원이 있다면 핸드폰으로는 친구 A에게 만 원을 입금할 준비를 하고 컴퓨터로 친구 B에게 만 원을 입금할 준비를 한 후 동시에 입금을 하게 되면 어떻게 될까 중앙 관리 시스템의 이중 지불 중앙 관리 시스템인 기존의 금융 시스템은 일을 동시에 처리하는 것이 아닌 거래 요청이 들어온 순서대로 먼저 온 요청을 처리하고 뒤에 온 요청을 처리하기 때문에 이중 지불 문제를 해결할 수 있다. 블록체인의 이중 지불 블록체인에서의 이중 지불을 알아보자 블록체인에서 나의 지갑에서 다른 곳으로 코인을 보낸다고 하는 것은 UTXO를 소모한다는 것이다. 이중 지불이라는 것은 결국 하나의 UTXO를 2번 사..
UTXO 에 대해 알아보자. UTXO (Unspent Transaction Output) UTXO는 사용되지 않은 트랜잭션을 의미한다. 트랜잭션을 남은 잔액이라고 생각해서 이해하면 쉽게 접근할 수 있다. UTXO는 보유하고 있는 잔액의 단위의 개수라고 볼 수 있다. 예로 내가 만 원짜리 한 장과 천 원짜리 한 장이 있다고 했을 때 금액은 11000원이겠지만 여기서의 UTXO는 2가 된다. 나의 잔액 단위 개수는 2개이며 각 단위들은 사로 다른 잔액을 가리키고 있다. 하나는 만 원, 하나는 천원 만약 만원 한 장, 천원 두 장이라고 본다면 UTXO는 3개가 된다. 블록체인 위에서의 UTXO 도 위와 같이 이해할 수 있다. UTXO는 남은 잔액을 알려주는 것이 아닌 남은 잔액의 수를 알려주는 것으로 각각의 UTXO는 각각 다른 개수의 ..