블록체인 Infra - NomadJin/Blockchain-Study GitHub Wiki
2018-06-11
프로비저닝
IT인프라 자원을 사용자 또는 비즈니스의 요구사항에 맞게 할당, 배치, 배포해서 시스템을 사용할 수 있도록 만들어 놓는 것 ex) 서버 자원 프로비저닝, OS 프로비저닝, 소프트웨어 프로비저닝 등
TLS Authentication
SSL : 보안 소켓 계층(Secure Sockets Layer)
TLS : 전송 계층 보안(Transposrt Layer Security), TLS 프로토콜은 모든 종류의 인터넷 트래픽을 암호화한다. 브라우저 상의 주소 URL이 "https"로 시작하면 TLS를 통해 연결된 것이다.
TLS의 작동 방식
가장 안전한 암호화 방식은 비대칭 암호화 => 공용키, 개인키 2개의 암호 키를 사용하며, 공용키는 암호화에 사용하고 개인키는 복호화에 사용한다.
비대칭 암호화에는 이와 같은 어려운 문제가 수반되기 때문에 컴퓨팅 자원이 많이 소요된다. 통신 세션에서 모든 정보를 암호화하면 감당이 안돼 컴퓨터와 연결이 서서히 중단될 정도. TLS는 이문제를 해결하기 위해 통신 세션이 맨 처음 시작할 때만 비대칭 암호화를 사용. 패킷 암호화에 서버와 클라이언트가 사용할 하나의 ‘세션 키’에 합의하기 위해 양쪽이 나누는 대화를 암호화하는 것이다. 공유된 키를 사용하는 암호화를 ‘대칭 암호화’라고 한다. 비대칭 암호화에 비해 컴퓨터 자원 소모가 덜하다. 해당 세션 키는 비대칭 암호 작성 방식을 이용해 설정되었기 때문에 그렇지 않은 경우에 비해 통신 세션 전체가 훨씬 더 안전하다. 해당 세션 키가 합의되는 프로세스의 명칭은 악수를 의미하는 핸드셰이크(handshake)이다.
TLS 핸드셰이크 프로세스
TLS 핸드셰이크 프로세스는 꽤 복잡하다. 프로토콜은 여러 개의 변형을 허용한다. 주요 작동 방식은 다음과 같다.
-
클라이언트가 서버에 접속해 안전한 연결을 요청한다. 서버는 사용할 줄 아는 암호화 스위트(cipher suite) 목록으로 응답한다(암호화 스위트란 암호화된 연결을 만드는 알고리즘 툴킷이다). 클라이언트는 이 목록과 자신이 지원하는 암호화 스위트 목록을 비교해 한 가지 암호화 스위트를 선택한 후 이를 서버와 클라이언트 모두에서 사용할 것임을 서버에 알려 준다.
-
이제 서버는 ‘디지털 인증서’를 제공한다. 디지털 인증서란 서버의 신원을 확인해 주는 외부 인증 기관이 발급한 전자 문서이다. 인증서에서 가장 중요한 정보는 서버의 공용 암호 키이다. 클라이언트는 인증서의 진위를 확인한다.
-
서버의 공용 키를 사용해 클라이언트와 서버는 세션 나머지 기간 동안 양쪽에서 통신 내용 암호화에 사용할 세션 키를 설정한다. 이를 위한 기법은 여러 가지다. 클라이언트는 공용 키를 사용해 임의의 숫자를 암호화한 후 서버로 보내 복호화하게 한 다음 양쪽이 해당 숫자를 이용해 세션 키를 설정할 수 있다. 혹은 양쪽이 ‘디피-헬먼 키 교환(Diffie-Hellman key exchange)’이라는 것을 이용해 세션 키를 설정하는 방법도 있다.
이름에서 알 수 있듯이 세션 키는 중간에 끊어지지 않는 하나의 통신 세션 중에만 유효하다. 클라이언트와 서버 간의 통신이 네트워크 문제 또는 너무 오래 진행된 클라이언트의 유휴 상태 등으로 중단되면 통신이 재설정될 때 새로운 핸드셰이크를 통해 새 세션 키를 설정해야 한다. 더 자세한 내용은 SSL.com을 참고하면 된다.
IPFS
기업 대상 비즈니스에서 중앙 파일 관리 시스템과의 차별화는? 속도? 투명성 및 안정성?
BitTorrent 와 Git 원리 알아보기
Ripple
탈중앙화된 암호화 원장 거래 네트워크 서버.
- 검열 저항 거래 처리?
- 빠르고, 효율적인 합의 알고리즘 : 1500 tps
- 유한한 XRP 공급
- 믿을만한 S/W 관리
- 안전하고, 채택된 암호화
- 스마트 컨트랙트를 위한 최신의 기능
- 탈중앙화된 거래
Ansible
시스템 환경 설정 및 애플리케이션 배포 자동화 플랫폼. 에이전트가 없는 구조. 에이전트 관리에 신경을 쓰지 않아도 됨. SSH를 통해서 통신 함.
Quorum example
Key enhancements over go-ethereum:
- Privacy - Quorum supports private transactions and private contracts through public/private state separation and utilising Constellation, a peer-to-peer encrypted message exchange for directed transfer of private data to network participants
- Alternative Consensus Mechanisms - with no need for POW/POS in a permissioned network, Quorum instead offers multiple consensus mechanisms that are more appropriate for consortium chains:
- Raft-based Consensus - a consensus model for faster blocktimes, transaction finality, and on-demand block creation
- Istanbul BFT - a PBFT-inspired consensus algorithm with transaction finality, by AMIS.
- Peer Permissioning - node/peer permissioning using smart contracts, ensuring only known parties can join the network
- Higher Performance - Quorum offers significantly higher performance than public geth
Quorum cakeshop
2018 6/25 - 6/29
-
CloudZ managed 서비스 여부 확인(홍장헌 수석, 010-5158-5066, 내일 오전)
- Bear Metal or VM 으로 환경을 구성할 확률이 높은데 Managed 되는 Incident Management 시스템이 있는지, 아니면 로드맵은 어떻게 되는지,
- 구성 환경 별 Matric은 어떻게 되는지(Iaas, Bluemix, BearMetal, VirtualMachine)
-
REST API의 Rate Limit 관련
- Request Pool 관리 필요
- https://community.apigee.com/articles/6490/nodejs-performance-tips-socket-pooling.html
- Queue Limit을 Nodejs 구현 가능
- https://medium.com/node-js-tips-tricks/implementing-a-job-queue-with-node-js-ffcfbc824b01
-
Callback 함수 이해하기 + Smart contract Event 이해하기
- Event Handler(Solidity, Client code) 예제 찾아보기
-
Junit5 변화 찾아보기
- 기존 단위 테스트에서 Spring boot로 넘어오고 나서 통합테스트를 지향(어플리케이션 서버까지 같이 구동되기 때문에)
- mock object 테스트
-
이더리움 구조 이해하기
- Block 과 Transaction의 상세 구조 및 기존 이더리움 API 및 Geth의 구조 분석
-
Annotation 이해하기
-
스마트 컨트랙트 이해하기
- Smart contract detecting
- Smart contract parsing
- Data extract
-
프로비져닝 bootstrap 코드 살펴보기
Grafana
Dashboard setting query
- Process
select blocked,running,sleeping,total,total_threads,zombies from processes where host =~ /^$host$/ and $timeFilter
- CPU
SELECT mean("usage_idle") FROM "cpu" WHERE "host" =~ /^$host$/ AND $timeFilter GROUP BY time($interval) fill(null)
SELECT mean("usage_iowait") FROM "cpu" WHERE "host" =~ /^$host$/ AND $timeFilter GROUP BY time($interval) fill(null)
SELECT mean("usage_user") FROM "cpu" WHERE "host" =~ /^$host$/ and $timeFilter GROUP BY time($interval) fill(null)
SELECT mean("usage_system") FROM "cpu" WHERE "host" =~ /^$host$/ and $timeFilter GROUP BY time($interval) fill(null)
- DISK
SELECT non_negative_derivative(mean("write_bytes"), 10s) FROM "diskio" WHERE "host" =~ /^$host$/ AND "name"= 'vda' AND $timeFilter GROUP BY time($interval) fill(null)