비트코인, 이더리움 블록체인 개발 면접 개발자를 위한 기술 면접 질문 리스트, 암호학

👈 Click! 투표!



 

블록체인 개발자 질문 list

블록체인 범용
1. 블록체인 트릴레마란?
확장성 보안성 분산화 3가지를 모두 취할 수는 없어서 한가지는 포기해야한다.

2. 토큰과 코인의 차이는?
메인넷이 있으면 코인 없으면 토큰

3. 크립토 이코노미란
크립토 이코노미란 가상화폐의 사용이 활성화된 경제 시스템을 의미

4. 토큰 디자인이란?

5. 이더리움에서 erc20표준을 만든 이유
Erc20이란 이더리움 블록체인 네트워크에서 정한 표준 토큰 스펙으로 토큰끼리 호환성을 유지하기 위해 만듦
Erc20 기반 토큰들은 동일한 이더리움 지갑으로 전송 가능
Erc20 표준 호환 토큰들은 나중에 통합되어 한번에 이더로 모두 바꾸어 현금화 가능

6. Erc20 vs erc721
Fungible인지 아닌지가 가장 큼. 대체 가능 유무

7. Double spending 공격이란?
블록체인 내에서 이중 지불하는 문제. 이를 막기 위해 어려운 수학 문제를 풀어 블록의 생성 권한을 주는 pow 알고 사용.
트랜잭션에서 같은 utxo 정보를 사용하는 트랜잭션은 한 블록내에 중복으로 들어갈 수 없음.

8. Replay attack?
비트코인: 블록이 하드포크되는 순간에 두개의 블록체인은 결국 rsa 암호로 이루어진 키를 이용하기 따문에 private 키와 공개키, 주소는 같이 사용하게 된다. 이것을 이용해 한쪽 블록체인의 트랜잭션을 다른쪽 블록체인의 트랜잭션에도 실행하게 하여 중복으로 트랜잭션이 실행된다.
이더리움: 리플레이 어택을 막기 위해 노드들에서 받은 메시지의 시간차가 20초 이상이 나면 이상한 메시지라 판단하여 폐기 처리.

9. Eclipse attack?
P2P 노드들의 한 노드를 속이기 위해 여러개의 다른 악의적인 노드들을 네트워크에 끼워놓고 해당 악의젓인 노드들이 메시지의 내용을 속여, 한개의 노드에서 이중지불공격을 행하는 것

10. DEX와 0x protocol이란?
제로엑스 프로토콜은 이더리움 기반의 탈중앙거래소(dex) 코인으로 거래는 이더리움 네트워크 밖인 오프체인에서 이루어지고 최종 거래의 확정만 이더리움 네트워크인 온체인에서 이루어진다.

 

 

비트코인 관련

1. Bitcoin utxo란?
이중지불을 처리하기 위한 지갑
아직 사용하지 않은 트랜잭션으로 비트코인의 경우 각기 다른 양의 금액을 갖고 있게 된다. 예를들어 만원 오천원 천원이 있으명 3개의 utxo를 갖고 있는 것이고 여기서 만육천원을 보낸다고 하면 에러가 발생된다.

2. 비트코인에사 트랜잭션 검증은 어떻게?
A가 트랜잭션을 보낼따 암호화 과정에서 a의 개인키를 이용해 암호화 한다. 다른 사람이 전달 받은 트랜잭션이 사실인지 검증하기 위해 a의 공개키로 복호화하고 이것이 제대로 복호화 되면 진짜로 인식한다.

3. 비트코인 spv는 볼룸필터를 왜 사용하는가?
Spv는 비트코인을 받았다는 거래에 대해 모든 블록을 다운로드하지 않고 검증하는 간이 결제 확인 방법이다.
블룸필터는 spv 노드들이 트랜잭션의 집합을 받을때 그들이 어느 주소에 관심 있는지 노출되지 않게하는 기법이다.

4. 비트코인 segwit이란?
세그윗이란 segregated withness의 약자로 비트코인의 블록에서 디지털 서명 부분을 분리함으로써 블록당 저장 용량을 늘리는 sw 업그레이드를 말함

5. Mnemonic phrases와 HD (계층 결정적) 지갑이란?
니모닉 코드는 16진수로 이루어진 시드를 BIP-0039를 통해 기억하기 쉽게 사람이 읽을 수 있는 텍스트로 표현하는 기법
지갑의 종류로는 비결정지갑. 결정지갑. 계층 결정적 지갑
비결정적 지갑: 말 그대로 무작위로 선택된 private 키가 저장되어 있는 지갑
> 지갑의 손실을 막기 위해서 주기적으로 지갑의 모든 키를 백업해여함
결정적 지갑: 랜덤하게 발생된 common seed에서 단방향 해시 함수를 통해서 개인키를 연속적으로 생성한다.
> pbkdf2 함수를 사용해서 커먼 시드 생성
계층 결정적 지갑은 트리 구조에사 생성된 키를 담고 있으며 부모키가 자식키열을 만들 수 있고 각각의 자식키가 손자키열을 만들 수 있다.
> hmac sha512를 통해 마스터 개인키와 마스터 체인 코드를 생성

이더리움 관련

1. 이더리움 트랜잭션 검증은 어떻게?
이더리움 타원곡선 암호 ecdsa 알고리즘을 사용한다. 이더리음 트랜잭션 안에는 공개키가 포함되지 않고, 이더리움 주소를 보낸다.
(이더리움 주소 = hash(공개키))
타원곡선 암호 안에는 이더리움 주소와 서명을 이용해 4개의 공개키 후보군을 뽑아낼 수 있고, 어떤 공개키를 써야할지 트랜잭션 안에 정보를 담아 보낸다.

서명만을 트랜잭션에 담아 전달. 이후 검증자가 해당 서명에서 공개키 도출, 해당 공개키로 만들어진 주소가 있는지 확인. 해당 주소가 있다면 비밀키가 존재하는 것으로 인식하여 신뢰할 수 있다 판단.

2. 이더리움 트랜잭션과 raw 트랜잭션 차이?
트랜잭션은 개인키로 서명되지 않은 트랜잭션을 보낼때
로우트랜잭션은 개인키로 서명 된 트랜잭션을 보낼때

3. 이더리움에서 사용되는 nonce의 개념?
넌스는 tx의 수를 카운트하는 숫자. Tx이 발생할때 마다 넌스 값이 증가하게 되며, 여러 tx 같은 넌스를 갖지 못 한다. 이를통해 이중 지불 공격을 방지 가능

4. 이더리움에서 볼룸필터 사용 이유?
피투피 네트워크 상에서 유용한 tx만 식별하기 위해

5. 이더리움 머클패트리샤트리란?

6. 이더리움 RLP는 무엇?
Rlp는 이더리움 네트워크에서 쓰이는 직렬화 기법으로 바이트 스트림은 최소 단위를 바이트로 하는 데이터 묶음
> rlp는 데이터를 저장하거나 전송하는데 필요한 통일된 포멧을 제공한다. 데이터는 rlp로 변환되어 트랜잭션 전송. 블록 state 및 receipt저장. Db저장에 사용됨

7. 이더리움 플라스마란?
플라스마는 이더리움의 확장성 문제를 해결하기 위한 오프 체인 해결책

8. 이더리움 노드 디스커버리는 어떻게?
노드 디스커버리 작동은 이더리움 자체에 하드포크 되거나 자신이 입력한 seed node로부터 시작된다. Table.go 파일에 구현되어 있는 무한 루프가 doResult함수를 호출하여 항상 새로운 이웃 노드들을 자신의 테이블에 저장하거 상태 체크를한다. 이웃노드 탐색에는 lookup 함수가 사용되어 FIND_NODE 프로토콜을 이용하여 재귀적으로 이웃노드들을 찾는다. 이 과정에서 자신의 테이블에 자신과 가까운 노드들을 많이 담게되고 자신도 다른 노드들의 탐색과정을 도와야하기 때문에. 랜덤한 node id로부터 탐색도 하며 다양한 노드를 담을 수 있게 된다.  이렇게 라우팅 테이블에 노드들이 담겨 계속 살아있는 노드로 업데이트 된다.

9. 이더리음 주소를 퍼블릭키 자체 사용이 아니라 끝자리 20byte만 사용하는 이유?
사용자 친화적 관점에서의 접근. 암호화되어 있기 때문에 굳이 긴 byte를 사용할 필요 없다.

10. EIP-55 체크섬이란?
Eip55는 16진수 주소의 대소문자를 수정하여 이더리움 주소에 대해 이전 버전과 호환되는 체크섬을 제공. 이더리움 주소는 대소문자를 구분하지 않으며 모든 지갑을 대소문자 구분 없이 주소 해석

11. 이더리움 블록싱크 방식? 분기가 발생했을때?
가장 연산이 많이 일어난 경로를 유효한 경로로 판단 > 가장 최근의 블록 넘버를 생산했다는 의미로 다른 블록보다 더 많은 연산을 했기에 비트코인의 경우 가장 긴 채인을 채택

12. 이더리움 저장용량을 줄이기 위한 prunning?
Prunning은 소위 가지치기를 통하여 저장공간을 줄여주는 방식이다. 이더리움에서 state는 항상 최신 상태만 유지하지 않고 일정기간 히스토리도 보관한다. 그 이유는 노드간 합의가 되어 한 블록이 생성되어도 아직 확정되지 않은 경우 분기가 될 가능성이 있고 분기 발생시 state를 되돌려야 될수도 있기 때문이다. 최종 확정되기 전까지 히스토리가 있어야한다. 이후 일정시간이 지나면 프루닝을 통해 히스토리가 삭제되고 저장공간을 줄여준다.

13. 이더리움에서 이벤트(log)는 어떻게 발생되며 클라이언트는 어떻게 감지?

 

암호학

1. Hmac이란?
Hmac은 간단히 말하면 기존에 돌아가는 해쉬를 특정 모듈에 장착하는 방식으로, 송신자와 수신자만이 알고 있는 key와 msg를 혼합하여 hash를 만든다.

 

2021.12.24 – [개발] – 빗썸코리아 블록체인 개발 경력직 면접 후기