전체 글 19

[하이퍼레저 인디]#4

HyperledgerIndy#4Aries가 필요한 이유인디(Indy) : 온체인 영역. 스키마, 공개 키, CredDef 등 검증에 필요한 암호학적 재료 저장.에리스(Aries) : 오프체인 영역. 실제로 지갑을 생성하고, 영지식 증명을 만들고, 주체들끼리 1:1로 증명서를 주고받은 역할.에리스의 3가지 핵심 요소에이전트사람이나 기관을 대신해서 일하는 대리인 프로그램스마트폰에 설치하는 앱이 될 수도 있고, 클라우드 서버에 띄어놓는 백엔드 서버가 될 수도 있음DIDComm에이전트끼리 메시지를 주고받는 표준 통신 프로토콜일반적인 HTTP/REST API가 아닌 철저히 서로의 DID를 기반으로 1:1 종단간 암호화(E2EE) 채널을 열어서, 그 누구도 중간에서 데이터를 가로채거나 엿볼 수 없게 통신보안 지갑개..

[하이퍼레저 인디]#3

인디의 다중 원장 아키텍처원장을 4개로 쪼개서 관리 . 분리하면 각 트랜잭션의 처리 속도가 훨씬 빨라지고, 필요한 원장만 가볍게 조회할 수 있음도메인 원장 : 신원 관련 데이터를 저장. 발급자의 DID, 공개키, 증명서 스키마, CredDef 등이 기록됨. 개인정보는 절대 포함되지 않음풀 원장 : 네트워크에 참여하는 노드들의 정보를 관리하는 장부. 어떤 노드가 합의에 참여할 자격이 있는지, 노드의 IP 주소와 포트 번호, 노드의 공개 키 등을 기록. 노드가 추가되거나 삭제될 때 업데이트 됨.설정 원장 : 블록체인 네트워크의 운영 규칙을 담고 있음.감사 원장 : 위 세가지 원장들이 서로 동기화 되고 올바른 상태를 유지하고 있는지 검증하기 위한 원장플레넘(Plenum)알고리즘하이퍼레저 패브릭의 Raft(비잔..

[하이퍼레저인디]#2

Hyperledger Indy#2영지식 증명이란 무엇인가영지식 증명은 내가 어떤 비밀 데이터를 알고 있다는 사실을, 그 정보 자체를 공개하지 않고도 상대방에게 수학적으로 증명하는 기술ex) 내 지갑이 편의점 시스템에서 이 사람은 2007넌 1월 1일 이전 출생자임이 참입니다. 라는 암호학적 증거만 생성해서 보냄. 편의점은 내 나이나 생일을 몰라도 내가 성인이라는 사실을 확신할 수 있음.AnonCreds(익명 자격 증명)인디 생태계에서 영지식 증명을 구현하기 위해 AnonCreds라는 독자적인 개방형 스펙을 사용. ZKP기반으로 3가지 프라이버시 보호 기능 제공.선택적 정보 공개 : 사용자는 발급받은 하나의 증명서(VC)안에서 원하는 속성만 쏙쏙 골라서 검증자에게 제출할 수 있음조건부 증명 : 데이터의 실..

[하이퍼레저 인디] #1 시작

BMS에 하이퍼레저 인디를 적용하기 위해 스터디를 시작한다. 하이퍼레저 인디 : 분산 신원 증명(DID,Decentralized Identifier)과 자기 주권 신원(SSI,Self-Sovereign Identity) 생태계를 구축하기 위해 특별히 설계된 블록체인 플랫폼영지식 증명을 활용해 정보의 유효성만 검증함.인디를 관통하는 핵심 개념DID : 중앙 기관 없이 생성하고 제어할 수 있는 고유한 식별자VC(Verifiable Credential) : 검증 가능한 자격 증명AnonCreds(Anonymous Credentials) : 인디의 핵심적인 암호화 기능, 영지식 증명을 사용하여 필요한 정보만 선택적으로 제공할 수 있게 해줌하이퍼레저 인디 아키텍처의 특징플레넘(Plenum) 합의 알고리즘 :인디..

[알고리즘]트리의 정의와 이진 트리

트리 계층적인 구조를 나타내는 자료 구조 보통 뿌리(root)가 위에, 나뭇가지(branch)와 잎(leaf)이 아래로 자라는 형태로 표현 트리 사용 예:회사 조직도, 대학 교과 과정의 수강 트리, 파일 시스템 디렉터리 구조 트리의 구성 요소 노드:트리의 데이터를 저장하는 원소 단위.정점. 에지: 노드와 노드를 연결하는 선. 간선. 트리의 에지는 부모-자식 계층 관계만을 나타냄 노드의 개수가 N이면 항상 N-1개의 에지가 존재 트리 용어 루트(root):맨 위의 노드 부모(parent)-자식(child):에지로 연결되어 있는 상대적인 관계. 위의 노드가 부모, 아래의 노드가 자식 리프(leap):가장 아래의 노드(가장 말단) 내부 노드(internal node):자식노드 중 리프가 아닌 것 형제(sibl..

알고리즘 2024.04.01

[백준][C++]10816

처음에는 그냥 평범하게 선형 탐색을 활용했더니, 역시나 시간초과. 다른 방법으로 풀어야 했다. 그래서 사용 한 방법이 이진 탐색. upper_bound-lower_bound하면 원소의 갯수를 알수 있다. #include #include #include using namespace std; int main() { int N, M, n; std::vector v; std::cin >> N; while (N--) { std::cin >> n; v.push_back(n); } std::sort(v.begin(), v.end()); std::cin >> M; while (M--) { std::cin >> n; std::cout

백준 2024.03.30

[알고리즘]선형 탐색과 이중탐색

선형 탐색(linear search) 전체 자료를 처음부터 마지막까지 순서대로 탐색하는 방법. 순차 탐색. 하나의 for loop: 시간 복잡도=O(n) 작정이 간단하고 직관적 정렬되지 않은 자료에도 사용가능 비효율적 bool linear_search(int data[], int n, int target) { for (int i = 0; i < n; i++) { if (data[i] == target) return true; } return false; } 이진 탐색(binary search) 정렬된 배열에 대해 검색 단계별로 검색 범위를 반으로 줄여가면서 데이터를 탐색하는 기법 시간 복잡도 : O(log n) 선형 탐색에 비해 검색 속도 빠름 이미 정렬되어있는 데이터에만 적용 가능 bool binary..

알고리즘 2024.03.30

[백준][C++]18870

배열에서 중복된 원소를 없앤 후 정렬을 해주면 된다고 생각함. 그리고 미리 또다른 배열을 만들어 입력 좌표를 미리 저장한 후 정렬/중복원소 삭제된 배열에서 찾는 알고리즘을 생각해냈다. 또 찾을 때 이중for문을 이용하기 보단 vector stl에 있는 find를 쓸려고 했고, 사용해보니 시간 초과가 났다. 그리서 lower_bound를 사용하여 풀었다. #include #include #include using namespace std; int main() { int N; cin >> N; vector v(N); for(int i=0;i> v[i]; } vector v2 = v; sort(v.begin(),v.end()); v.erase(unique(v.begin(), v.end()), v.end());..

백준 2024.03.27

[알고리즘] 분할정복과 정렬 알고리즘

분할정복 :주어진 문제의 규모가 커서 한 번에 해결하기 어려운 경우, 이를 작은 부분 문제로 나눠서 해결하는 방식 분할 : 주어진 문제를 동일한 방식으로 해결할 수 있는 부분 문제로 나누기 정복 : 각 부분 문제에 대한 솔루션 구하기 결합 : 각 부분 문제의 솔루션을 결합하여 전체 문제에 대한 솔루션 구하기 병합 정렬 :분할 정복에 의한 정렬 알고리즘의 하나 입력 배열을 두 개의 부분 배열로 분할->각 부분의 배열의 원소가 하나가 될 때까지 반복 부분 배열을 병합->이때 병합된 배열의 원소가 정해진 정렬 순서에 부합되도록 순서를 조정 병합 정렬의 시간 복잡도 배열을 분할 또는 병합하는 단계:log n 배열 병합하는 과정의 시간 보잡도:O(n) 전체 시간 복잡도:O(n log n) 병합 정렬의 특징 실제 ..

알고리즘 2024.03.25

[알고리즘]정렬의 기본.

정렬(sort) 주어진 데이터를 정해진 기준에 따라 순서를 재배열 하는 작업. 오름차순 or 내림차순 정렬 알고리즘의 종류 버블정렬(bubble sort) 선택정렬(selection sort) 삽입정렬(insertion sort) 위의 세가지 정렬들은 구현은 단순하나 비효율적이다. 아래의 정렬들은 구현은 복잡하나 다소 효율적이다. 쉘정렬(shell sort) 병합정렬(merge sort) 퀵정렬(quick sort) 힙정렬(heap sort) 기수정렬(radix sort) 버블 정렬 :정렬되지 않은 부분에서 인접한 두 원소의 크기를 비교하여 교환하는 작업을 반복. 시간복잡도 = O(n^2) void bubble_sort(int data[],int n) { for(int i=0;ii;j--){ if(dat..

알고리즘 2024.03.25