2019년 7월 28일 일요일

Davinci Resolve - 3D 레고 효과 주기

                                        FXMesh3D1(Brick.fbx)
pImageEmitter - Render1 - Replicate3D1 - Merge3D1 - Renderer3D1 - Merge
                                                              Camera3D1  Background2

연결이 잘 안된다면, 타임라인 가서 영상을 다시 클릭해주자
프록시 연결하지말고 작업하자. (나중에 다시 조절해야함)

1280x720 기준
pImageEmitter 에서 X Density, Y Density 조절 (양 조절) - 0.1
FXMesh3D1 - size 0.005
Replicate3D1 Scale - 0.01 (조절하기). X 로테이션 90도로 조절하기
pImageEmitter 에서 Alpha Threshold 값 조절하기 0.8 - 늘리면 애매한 투명한 애들이 삭제된다. 근데 이거 잘 안되는거같다 성능때문인가?
 Create Particles Every Frame 을 체크해주고 pCustom 을 만들어서 if 로 Alpha Expression 에서
 if(a<0 .5="" 0="" 1="" p="">
BrightnessContrast 알파 체크, 게인을 0으로 주면 사진 사라짐.
폴리곤 연결한다음, Y 축 기준으로 움직이게 함

pImageEmitter1 에서 Lifespan 을 최대로 줌

Camera3D 만들고 각도 잡은다음, perspective - Copy PoV to Camera3D1



2019년 3월 27일 수요일

루트스탁 (RSK) 개념 잡기


루트스탁(RSK)

단순히 비트 코인에 튜링 완전한 스마트 컨트랙트를 올릴수 있게 하는 것으로 알려져 있습니다...만!

현재 RSK 자체가 비트코인을 기본 통화로 사용하고 있고, 2way peg 를 통해1 RBTC = 1 BTC 고정 전환된다는 것일 뿐,

사실상 그 개념 자체는 비트코인 종속적이지 않으며 다른 곳에서도 사이드 체인으로써 동작 가능합니다.

(2way peg에 대해서는 조금 이따 다시 한번 알아보도록 하죠.)

스마트 컨트랙트가 이더리움에서 처음 등장한 것으로 알려져 있지만,
사실 비트코인 스크립트라는 이름으로 이미 존재하고 있었습니다.
(사실 스마트 컨트랙트라는 개념은 비트코인 이전에 이미 존재하던 것이긴 합니다. 빌게이츠 )

그러나 Bitcoin Script는 DoS 공격을 우려한 나머지 Loop 를 지원하지 않아 튜링 완전하지 않았습니다.

그렇다면 튜링 완전하다는 것은 무엇일까요 ?
튜링 머신과 같은 성능을 낼 수 있으면 튜링 완전하다고 봅니다.

그렇다면 튜링 머신은 무엇일까요?
튜링이 1939년에 제시한 하나의 개념입니다.

길다란 테이프가 있고, 테이프 칸 각각에는 지시가 적혀있는 기계를 떠올려 봅시다.



기계는 테이프를 한칸씩  읽으면서 지시를 따라하는 것이죠.

지시는 상태에 따라 다른 테이프의 지시를 변경할 수도 있습니다.

  • '현재 상태가 A인데 기호 '1' 을 읽었다면 '0' 을 기록하고 현재 상태를 E로 바꾼 후 앞으로 한칸 이동.'



이 개념 어디서 많이 본 것 같은데 뭐죠? 컴퓨터입니다. 튜링은 천재였죠

(나의 노트북 == NASA 의 슈퍼컴퓨터 == 튜링 머신... 개념은 똑같다.)

간단히 말해서, 모든 계산 가능한 문제를 풀 수 있는가? 
Yes -> 튜링 완전 하다!

※튜링 머신에 대한 좀 더 자세한 내용 : Gödel : A Life of Logic


RSK의 역사는 아래와 같은데요,

2013년 튜링 완전한 언어 개발
2015년 백서 생성
2016년 테스트넷 펀딩 및 런칭
2017년 메인넷 펀딩
2018년 메인넷에 런칭

비트코인에 올라가는 RSK 는 튜링 완전합니다.

왜냐하면 이더리움을 기반으로 하고 있기 때문입니다.

RSK 는 코드 실행을 위해 RVM이라는 가상 머신을 사용하는데, RVM은 EVM을 가져와서 비트코인에 올라갈 수 있도록 포팅한 것입니다.


그럼 어떻게 이 체인을 유지하고 1 RBTC <=> 1 BTC Transfer 를 지원하는지 아까 제쳐 두었던 2 way peg 개념을 먼저 확인해 봅시다.

2 way peg 

이것은 어쩌면 잠깐의 눈속임이라고 할 수 있겠습니다.

비트코인을 lock 시켜두고, 이후에 사이드 체인에서 같은 양의 코인을 unlock 함으로써

마치 비트코인이 사이드체인으로 옮겨간 것 처럼 보이게 하는 것입니다.

약간은 플라즈마와 닮았네요.

2 way peg는 Side chain, Multi sig, Drive chain등으로 구현할 수 있는데요.

RSK는 Side chain + Drive Chain 의 조합의 Hybrid Chain 으로 Merged Mining 으로 체인을 유지합니다.

더 자세한 내용은 다음 글에서 확인해보도록 하죠.



2016 기준 RSK와 Bitcoin 의 성능 차이



2019년 3월 25일 월요일

Coin Wallet Account - 12 단어의 비밀 (mnemonic 복구 원리)


필요 선행 지식 : Hash, Metamask 등 생성 경험

12 단어, 그 찜찜함

메타마스크도 그렇고 어카운트 생성할 때 항상 12개의 단어를 어디에 잘 적어두라고 하죠?

https://iancoleman.io/bip39/#korean


저는

참석 한문 다행 최악 결과 언덕 공기 영상 다음 근로 마요네즈 사실 사용 운명 청바지

가 나왔는데요. 지갑 분실시 이 mnemonic 으로 복구가 가능하므로 메모가 필요하다고 합니다.

갑자기 궁금하지 않나요? 대체 이 문자들이 무엇이며 어떻게 복구가 가능한 것일까요?

아니 이렇게 쉬운 12개 단어들만 갖고 내 월렛이 복구가 된다고!!!? 한번 정확히 짚어보고 싶군요.


월렛의 역사

사토시가 처음 비트 코인을 고안 했을 때를 생각해 봅시다.

이제 막 '개인키를 갖고 거래를 하겠다' 라는 개념을 도입 했을 것이고

개발 초기에는 하나의 개인키로 거래를 했을 겁니다.

그러다보니 한가지 문제점을 깨닫게 된 것 입니다. 추적이 가능하다!?

네, 하나의 개인키와 공개키 세트로 거래를 하다보니 한 계정의 자산 규모가 대강 나오더라는 것이죠.

그래서 개인키 공개키를 매번 랜덤하게 만들도록 했더니 그걸 본인이 다 로컬에서 관리해야 해서 난감합니다.

로컬의 개인키를 잃어버리기라도 하면 눙물이...

그래서 키 관리 시스템 월렛 이 나오게 된 것이죠.

제 생각에는 카드라고 이름을 붙였다면 혼란이 덜하지 않았을까 싶네요.

실제 월렛도 카드처럼 현금(코인)은 없고 키 그리고 블록체인에 존재하는 코인을 전송하기 위한 로직만 있으니까요.

여튼 최근의 월렛은 HD(Hierarchical Deterministic) 월렛으로, 하나의 시드만을 사용해 계층적으로 관리가 가능합니다.


월렛의 원리

일단 복구를 이해하려면 먼저 월렛의 키가 어떻게 생성되고 관리되는지 알아봐야 할 것 같네요.

가장 먼저, 랜덤하게 생성한 128bits 값에 Hash를 적용해서 Digest 를 만들고,

사전 단어 리스트에 매핑합니다.



정확히는
1. Random 하게 128bits 생성하고
2. SHA256 돌린다음 앞에 4bits 를 떼서
3. 기존 128bits 뒤에 붙입니다
4. 11bits 씩 12개로 나눕니다
5. 사전 단어에 매핑합니다

즉, 12개의 랜덤한 단어가 랜덤한 순서로 생성되게 됩니다.

그 다음 키 스트레칭을 합니다.

DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)

  • PRF: 난수 알고리즘. (HMAC-SHA512 를 사용합니다.)
  • Password: 패스워드. (위에서 만든 12개의 단어로 이루어져 있습니다.)
  • Salt: 암호학 솔트. (mnemonic + 패스워드로 이루어져 있습니다.)
  • c: 원하는 iteration 반복 수. (2048 번 반복합니다.)
  • DLen: 원하는 다이제스트 길이. (길이는 512.)
월렛 표준 중 하나인 BIP-0039 에서 마스터 시드는 괄호 안의 값을 바탕으로 생성됩니다. 

즉, 입력 받은 랜덤한 단어와 패스워드를 바탕으로 512길이의 Digest를 생성하는 것입니다.


왜 근데 하필 단어 12자를 넣도록 했을까요?

랜덤한 128bits 는 외우기도 어렵고 숫자 0 이랑 영문자 O 등등 헷갈리니까요.

즉, 사람의 편의를 위해서 입니다.


이후 이렇게 생성된 마스터 시드(Digest) 를 기반으로 개인키를 생성 하므로,

우리는 12개의 단어 및 순서와 패스워드만 알면 개인키를 생성 할 수 있게 됩니다.

즉, 어딘가 저장되어있는 개인키를 Restore 하는 것이라기 보다는 Re-Generation 한다는 개념이 맞습니다.

실제로는 온라인에서 생성하면 안되겠죠?


요약 .

1. 랜덤한 128bits 키로 12개의 랜덤한 단어를 생성한다.
2. 위에서 생성한 단어들과 패스워드 조합으로 개인키를 생성한다.
3. 즉, PKI 와 다르게 개인키를 즉석에서 Derive 할 수 있기 때문에 딱히 로컬에서 개인키를 잘 관리할 필요는 없고 단어와 패스워드만 잘 기억해두면 된다.
4. 무작위 seed 대입을 통해 위에서 만든 개인키를 생성하려면 패스워드가 없다고 가정해도 괴에에엥장히 오랜 시간(최악의 경우 내 PC로 약 2500000000000000000000000 정도)이 걸린다.