전체 글
-
비트코인 채굴 시스템Cryptography 2021. 10. 26. 20:58
비트코인이 탄생한 2009년 이래로, 비트코인 채굴자들은 비트코인 채굴을 위해 다양한 방법을 사용해 왔습니다. 채굴이 기반한 핵심 원리가 double SHA256 알고리즘이기 때문에, 전문가들은 그러한 해시값 계산하는 시스템을 더욱 빠르게 발전시켜 왔습니다. 이번 글에서는 비트코인에 사용되는 다양한 종류의 채굴 방법을 알아보고 어떻게 진화해왔는지 살펴보겠습니다: CPU GPU FPGA ASICs CPU CPU 채굴은 오리지널 비트코인 클라이언트에서 사용가능했던 첫 번째 타이비의 방식입니다. 사용자는 심지어 노트북이나 데스크톱 컴퓨터를 사용해 비트코인을 채굴할 수 있었습니다. CPU 채굴은 더 이상 이익이 되지 않으며 ASIC 기반의 방식과 같은 더욱 발전된 방법이 사용됩니다. CPU 채굴은 비트코인이 탄..
-
비트코인 채굴(마이닝, mining)이란?Cryptography 2021. 10. 24. 21:16
비트코인 채굴(mining)은 새로운 블록이 블록체인에 추가되는 프로세스입니다. 트랜잭션들을 포함한 블록은 비트코인 네트워크 상의 '채굴 노드'의 채굴 프로세스를 통해서 인증(validated)됩니다. 채굴되고 검증된 블록은 블록체인에 추가되며 블록체인의 크기는 계속 커져갑니다. 이 프로세스는 PoW 요구사항으로 인해서 자원을 많이 사용하게 됩니다. PoW 요구사항으로 인해서 채굴자들은 네트워크 상의 타겟 난이도(difficulty target)보다 작은 숫자를 찾기 위해 서로 컴퓨팅 경쟁을 해야하기 때문입니다. 정확한 값을 찾아야 하는 이 난이도는 새롭게 추가되는 블록이 허용되기 전에 채굴자들이 요구되는 자원을 소비하도록 만듭니다. 그러한 채굴자들은 partial hash inversion 문제라고도 ..
-
JDBC란? (feat. 데이터베이스 커넥션 풀링)Java 2021. 10. 24. 12:12
JDBC(Java Database Connectivity)는 RDBMS에 접근하기 위한 프로그래밍 인터페이스입니다. JDBC의 실행은 대부분 SQL을 데이터베이스 서버에 전송하고 수행하는 것들인데요. 이번 글에서는 JDBC를 중심으로 아래와 관련된 사항들을 알아보겠습니다: JDBC 기초 JDBC 버젼 발전과정 JDBC 드라이버 타입 JDBC 기초 JDBC는 SQL 문장을 처리하는 엔진에 대한 Call-Level Interface(CLI)에 기반해 있습니다. 좀 더 구체적으로는, JDBC는 SQL92 언어 문법 스탠다드를 따르는 X/Open SQL CLI(X/Open은 국제 규격 조직)를 사용하는데요. 아래 이미지는 어떻게 SQL CLI와 JDBC가 내부적으로 동작하는지 보여줍니다: 위 이미지에서 JDBC..
-
비트코인 블록체인의 구조Cryptography 2021. 10. 16. 09:03
블록체인은 트랜잭션들에 대한 분산된 원장(distributed ledger)입니다. 특히, 비트코인의 관점에 있어서 블록체인은 공용이고, 분산형 원장으로 비트코인 네트워크 상에 모든 트랜잭션 기록들을 가지고 있는 것입니다. 이 안의 트랜잭션들은 일시(timestamp)가 적혀있고, 정렬되어 있으며, 변경이 불가능(immutable)한데요. 이후 트랜잭션은 채굴자에 의해 선택(pick up)되어 채굴을 위해 블록에 포함되게 됩니다. 각 블록은 하나의 해시값을 통해 식별되고 이전 블록의 해시값을 헤더에 포함하여 이전 블록을 참조하게 됩니다. 이번 글에서는 비트코인 블록체인의 구조를 살펴보겠습니다: 비트코인 블록체인의 구조 Genesis 블록 Stale 및 Orphan 블록 블록체인의 크기 네트워크 diffi..
-
비트코인 트랜잭션의 인증(Validation)Cryptography 2021. 10. 15. 22:18
트랜잭션 인증 비트코인 트랜잭션의 검증과정(verification process)은 비트코인 노드를 통해서 수행됩니다. 노드들은 하나의 트랜잭션을 검증할 때에 아래 3가지를 체크하게 됩니다: 먼저, 해당 트랜잭션 인풋이 이전에 지불된 적이 없는지 체크합니다. 이 검증 단계는 해당 트랜잭션 인풋이 중복 지불되지 않도록 합니다. 트랜잭션 아웃풋의 합계가 트랜잭션 인풋의 합계보다 크지 않은지 체크합니다. "인풋의 합계 >= 아웃풋의 합계"여야 하는데요. 이를 통해, 비트코인이 출처가 없이 생성되는 것을 막습니다. 디지털 서명이 유효한지 확인하여 script가 유효함을 확인합니다. 비록 트랜잭션 생성과 인증이 일반적으로 안전한 프로세스이긴하나, 비트코인에는 아래와 같은 몇 가지 취약점이 존재합니다. 트랜잭션 버..
-
비트코인 스크립트의 종류Cryptography 2021. 10. 15. 18:01
비트코인에는 검증과 코인 전송을 처리하기 위해서 다양한 스탠다드 스크립트가 존재합니다. 이러한 스크립트들은 트랜잭션에 대한 요구사항에 따라 간단한 것부터 매우 복잡한 것까지 존재하는데요. 스탠다드 트랜잭션들은 IsStandard()와 IsStandardTx() 테스트를 사용해서 평가되고, 그러한 테스트를 통과한 것들만이 비트코인 네트워크 상에서 브로드캐스트되거나 채굴될 수 있습니다. 그러나, non-스탠다드 트랜잭션들도 유효성 검사를 통과한다면 네트워크 상에서 허용됩니다. 이번 글에서는 그러한 스탠다드 스크립트를 다뤄볼 예정입니다: 종류 스크립트의 실행 흐름 종류 Pay-to-Public-Key Hash (P2PKH) P2PKH는 가장 일반적으로 사용되는 트랜잭션 타입으로 비트코인 주소로 트랜잭션을 송신..
-
비트코인 트랜잭션 데이터 구조Cryptography 2021. 10. 15. 17:09
트랜잭션은 비트코인 에코시스템의 핵심입니다. 트랜잭션은 요구사항에 따라 간단하게 비트코인을 특정 주소로 보내는 것일 수도 있고, 조금 더 복잡한 형태일 수도 있습니다. 각 트랜잭션은 최소한 한 개 이상의 인풋과 아웃풋으로 구성되어 있습니다. 인풋은 이전 트랜잭션에서 생성되어 '보내지는' 코인이고, 아웃풋 생성되는 코인이라고 볼 수 있습니다. 만약 한 트랜잭션이 새로운 코인을 만든다면, 인풋이 존재하지 않고, 서명(signature)도 필요 없습니다. 만약 트랜잭션이 코인을 다른 비트코인 주소로 보내려면, 송신자는 트랜잭션에 송신사의 비밀키(private key)로 서명을 하여야 합니다. 이러한 경우 코인의 기원을 보여주기 위해서 이전 트랜잭션에 대한 레퍼런스도 필요합니다. 그렇기에 코인은 '지불되지 않은..
-
Two-Phase Commit이란? (2PC)SE Concepts 2021. 10. 7. 07:17
HDFS(하둡분산파일시스템) 주요 개념 및 아키텍쳐 HDFS는 하둡 환경에서 분산 파일 시스템 기능을 담당하는 하둡의 주요 모듈입니다. 이번 글에서는 HDFS와 관련해 다음과 같은 부분들을 다루고자 합니다: HDFS의 주요 목적 HDFS 주요 개념 및 아키텍 kadensungbincho.tistory.com Two-phase 커밋은 여러 노드들 상에서의 원자적 트랜잭션 커밋을 이루기 위한 알고리즘(또는 프로토콜)입니다. 하나의 트랜잭션에 대해 모든 노드가 동일하게 커밋하거나 아니면 실패처리하는 것을 보장하기 위해 분산 데이터베이스에서 사용되는데요. 2PC는 몇몇의 데이터베이스 내부에 사용되거나 XA transaction(Java transaction API에서 지원), WS-AtomicTransactio..