본문 바로가기

분류 전체보기

거래 (Transaction) 1. 거래의 생성 거래는 간단하게 돈을 송금한다는 의사표시로 생각할 수 있으며, 실제로 제출되기 전까지는 금융 시스템 내에 보이지 않는다. 거래는 온라인 혹은 오프라인 상에서도 가능하며, 이는 거래의 내용과 서명이 체인상에서 발생하는 것이 아니라는 것을 의미한다. 즉 거래는 체인과 무관하게 발생하며, 이를 실제로 의미있는 거래가 되게 하기 위해서는 체인 상에 전파하는 것이 필요하다. 거래는 간단하게 그 거래의 내용이 존재하며, 서명으로 그 거래가 유효한 거래임을 표시하는 과정으로 구성되어 있다. 거래에는 개인키를 비롯하여 어떠한 민감한 정보가 포함되어 있지 않기 때문에 네트워크 상에서 공개되어도 무방하다. 2. 거래의 전송 비트코인 기준 거래의 크기는 300~400바이트 크기이며, 노드 중에 하나에 도달..
Simple Java HttpServer and HttpURLConnection HttpServer import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; public class HttpServerApplication { final static HttpHandler indexHandler = httpExchange -> { final String response = "This is index page..."; httpExchange.sendResponseHeaders(200, response.length()); final Ou..
Diffie-Hellman key exchange with elliptic curves Alice와 Bob이 공유 비밀값을 구하기 위한 기본적인 Diffie-Hellman 교환은 다음의 절차를 따른다. 1. Alice와 Bob은 각자 자신의 기본키와 공개키인 (ka, Ka), (kb, Kb)를 생성한다. 서로 공개키를 교환하고, 개인키는 보관한다. 2. 다음의 내용은 명확하다. S = kaKb = kakbG = kbkaG = kbKa Alice는 개별적으로 S = kaKb를 연산할 수 있고, Bob은 S = kbKa를 연산할 수 있다. 이는 그들이 공유 비밀값으로서 이 S를 사용할 수 있다. 예를 들어 만일 Alice가 Bob에게 m이라는 메시지를 보내야하는 경우, Alice는 공유 비밀값 S를 h = H(S)와 같이 해싱한다. 그리고 x = m + h를 계산한 뒤, x를 Bob에게 전달한..
HD Wallet: Key Derivation 키를 유도하는 방식은 크게 3가지로 나누어진다. 첫번째는 부모 개인키에서 자식 개인키를 유도하는 경우, 두번째는 부모 공개키에서 자식 공개키를 유도하는 경우, 세번째는 부모 개인키에서 자식 공개키를 유도하는 경우이다. 부모 개인키에서 자식 개인키 유도 부모 개인키에서 유도할 때는 강화된 방식으로 유도하는 경우 부모의 개인키를 직접적으로 해시 함수의 입력값으로 사용하지만 일반 유도 방식에서는 부모의 개인키를 공개키로 전환하여 공개키를 입력 값으로 하여 자식키를 유도한다. 키를 유도할 때는 부모의 확장된 키(부모키, 부모의 체인 코드), 인덱스가 사용된다. CKDpriv((kpar, cpar), i) → (ki, ci) (kpar: 부모의 개인키, cpar: 부모의 체인 코드, i: 인덱스, ki: i번째 ..
암호학 - 마스터링 이더리움 개요 암호학은 수학의 한 분야로 이더리움의 기반 기술 암호화는 비밀 작성에 그치는 것이 아니며, 비밀을 드러내지 않고 지식을 증명(디지털 서명)하거나, 데이터의 진위성(해시를 통한 디지털 지문)을 증명할 수 있음이더리움 플랫폼과 노드 간 통신은 암호화되어 있지 않아 모두가 들여다 볼 수 있어 합의에 도달할 수 있음 향후에는 영 지식 증명과 동형 암호화 같은 고급 암호화 도구에 대한 도입 가능성이 있음 이번장에서는 현재 이더리움 암호 방식인 공개키 암호화(Public Key Cryptography, PKC)를 소개함 본론 키와 주소 이더리움의 두가지 계정 유형: 외부 소유 계정(Externally Owned Account, EOA)과 컨트랙트 계정(Contract) 디지털 개인키(private key), ..
What is Tendermint 이 문서는 Tendermint 오피셜 문서 중 What is Tendermint를 번역한 것으로 오번역되었거나 표현이 불분명한 부분에 대한 댓글은 언제든 환영합니다. 원문은 아래의 링크에서 확인하실 수 있습니다. What is Tendermint https://docs.tendermint.com/master/introduction/what-is-tendermint.html What is Tendermint | Tendermint Core What is Tendermint Tendermint is software for securely and consistently replicating an application on many machines. By securely, we mean that Tendermi..
정리된 형태의 JSON 출력하기 const newWindow = window.open('', 'new window') const jsonString = JSON.stringify({obj}, null, 2); newWindow.document.write(`${jsonString}`) JSON을 화면에 출력하다보면 정리된 형태로 나오지 않고 읽기 힘들게 모두 붙어서 나오는 경우가 있다. 이경우 JSON.stringify를 통하여 JSON 문자열로 변경하고, 이를 태그에 넣으면 의도한대로 출력되게 된다. JSON.stringify의 세번째 파라미터인 2는 JSON의 구조에서 들여쓰기를 어떻게 할 것인가를 의미한다. 숫자 2는 두 칸 space를 입력하는 것이고 tab을 원하면 "\t"를 넣어주면 된다. 자세한 내용은 아래의 링크를 참조할 ..
Spring AOP: AOP Concepts 2 이 글은 Spring Framework 5.2.8 버전 Core Technologies의 AOP 문서에 기반하여 작성되었습니다. Spring AOP 다음과 같은 Advice 타입들이 있습니다. Before advice Join point 앞에서 작동하지만 Join point로 흘러가는 흐름은 제어할 수는 없는 Advice입니다. (exception이 발생하는 경우는 제외) After returning advice Join point가 문제없이 정상적으로 종료되었을 때 작동하는 Advice입니다. (exception을 던지지 않고 정상적으로 return 된 경우 등) After throwing advice exception에 의해 method가 종료되는 경우 작동하는 Advice입니다. After (fin..