블록체인 TIL-2Week-11Day

디오·2023년 3월 23일
0

2023.03.23 <오전 수업>

오늘도 민서강사님과 즐거운 블록체인 시간을 가졌다. 오늘은 전날 강의하셨던 내용에 대해 복습을 진행하고, 개인키부터 주소만들어지는 과정까지 진행해볼 예정이라고 하셨다. 또한, metamask를 만들어 개인키를 암호화하는 방법까지 알려주셨다.


☑️ 이전 강의 내용.

  • 기초 암호학 복습.
  • 영지식증명 : 개인(prover)이 자신만이 가진 비밀 정보를 공개하지 않고 상대방인 확인자(verifier)에게 정보를 알고 있음을 증명할 수 있는 암호화 체계이다.
    • (다시말해 내가 가진 나만의 중요한 정보를 확인자가 어떤 정보인지 알 수 없지만 중요한 정보를 가지고 있다는것을 증명시킬 수 있는 암호화를 말한다.)
  • 타원곡선 : 타원곡선은 19세기 타원 함수론과 함께 발전하였다. 그래프의 실제 모양이 타원은 아니다. 타원과도 큰 관계는 없다. ‘타원’은 타원의 둘레를 구하기 위하여 사용했던 적분 방법에서 유래했다. 주로 블록체인에서는 타원곡선 디지털서명 알고리즘 즉, ECDSA(Elliptic Curve Digital Signature Algorithm)에 대한 내용을 다룰 때 등장한다.
    • (복잡하게 설명되어 있지만 민서강사님 말씀으로는 어려운사람이 어려운문제 풀려고 어려운방법 만든거라고 하셨다.)
  • sha256 : 어떤 크기의 입력값이 들어가더라도 동일한 용량을 가진 출력값이 나오게 된다. 256비트의 결과가 나온다는건 16진수를 기준으로 항상 64자리의 같은 결과가 나온다는 것이다. ❗여기서 중요한것은 sha256의 출력값의 가지수 지구를 모레로 가득 채워도 넘칠만큼 큰 수이지만 그 수에도 한계점이 있다는 것이다.
  • ❗해시충돌 : 위 sha256의 중요한 점을 기반으로 이야기를 덧붙이자면 해시충돌이 발생하는 원인은 sha256에 있다. sha256의 결과값은 정해져 있는데 그 수가 16의 64승이다. 16의 64승은 위에서도 언급했다시피 지구를 모래로 채워도 넘쳐날만큼 굉장히 큰 숫자인데 input값은 output값인 16의 64승보다 많다. 쉽게 말하자면 sha256이 담을 수 있는 값보다 세상에는 더 많은 값이 있다는 것이다. 그렇다보니 결국 언젠가는 output값을 뛰어넘어 input값이 넘치는 상황이 올텐데 output값이 가득차게 되면 input값이 겹치게 되는 상황이 생길 수 있다. 그것이 바로 해시충돌이다.
  • 해시충돌에 대한 예를 "비둘기집 원리"를 이용해 들어보겠다. A,B,C,D가 있다. 이 네사람이 제주도에 놀러갔는데 숙소에는 방이 3개뿐이였다. 이런경우 3개의 방중 한방에서는 결국 2명이 자야한다는 결론이 나온다. 네 사람을 input값, 3개의 방을 output값이라고 정의했을때 하나의 output방에 2명의 input이 들어가는걸 해시충돌이라고 쉽게 설명할 수 있다.



✅ 가상화폐 지갑, metamask 만들기.

가상화폐 투자 경험이 없는 나는 오늘 처음으로 지갑과 metamask를 만들었다. 아마 지갑과 metamask는 같은 의미인것 같다. metamask를 만드는 방법은 인터넷에도 잘 안내가 되어있기 때문에 다른 부연설명은 하지 않겠다.



✅ 개인키(비공개키) 암호화 과정.

민서강사님은 개인키를 암호화하여 가지고 있으면 보다 안전하게 보관할 수 있다고 하셨다. 그리고 오늘은 그 과정을 직접 실습하며 경험을 통해 익힐 수 있도록 시간을 내어 하나씩 도움을 주시고 설명해주셨다. 처음에는 복잡한 순서 때문에 정신이 없었지만 한번 순서를 익히고 나니 정말 이렇게 진행하면 안전하겠다는 느낌을 확실히 느낄 수 있었다. 오늘은 개인키 암호화하는 과정에 대해서 자세히 안내 해보도록 하겠다.



☢️개인키 암호화 방법

  • 먼저 자신이 사용하는 비공개키를 복사한다.

  • 이미지 순서대로 진행하고, 마지막에 나온 암호화된 개인키를 원하는곳에 보관 또는 저장한다.

  • encode-decode 홈페이지 이동. (클릭)
    • 위 이미지대로 진행하여 암호화 된 private key 또한 생성해 낸다. 이때 이미지에는 표시하지 못했지만 아래 있는 패스워드를 꼭 입력하여 암호화를 시킨다. 그리고 암호화 된 private key 또한 암호화된 개인키와 함께 보관 또는 저장해두고 암호화 시킨 비밀번호만 꼭 기억해둔다. 비밀번호는 오로지 머릿속에만 기억해야 한다.



☢️개인키 복호화 방법

  • 복호화는 반대로 진행하면 된다. 위 이미지 내용대로 진행하되 아래 패스워드를 입력해야 private key를 복호화 할 수 있다.

  • 이미지 순서대로 진행하면 되는데 위에서 복호화 했던 private key를 2번순서에 맞게 넣고 진행하면 최종적으로 5번에서 나의 원래 개인키를 복호화 할 수 있다.



❗이렇게 암호화를 시켜 개인키를 보관해두면 해킹을 당하거나 예기치못한 상황에서도 나의 지갑을 지킬 수 있다. 본인이 개인적으로 보관해야 하는 정보는 "암호화된 개인키"와 "암호화된 Private Key"만 저장해두고 위에 설정했던 비밀번호만 꼭 기억하고 있으면 된다. 만약 비밀번호를 까먹게 되면 영영 찾을 수 없게될수있다.



2023.03.23 <오후 수업>

오후 수업은 어제에 이어 개인프로젝트를 위한 javascript 교육을 진행했다. 어제는 시계기능을 만들었는데 오늘은 명언기능을 만드는 강의를 진행하셨다. 역시나 코드를 따라가는것만으로도 벅찼다. 디테일한 코드에 대한 리뷰는 내일 TIL에 작성하는걸로 하고 오늘은 강의중에 메모했던 부분들에 대해서만 간략하게 정리하도록 하겠다.

  • querySelector = 함수
  • const = 상수
  • let = 변수
  • <파싱한다>
    1.배열을 만든다
    2.let b = JSON.stringify(a); 문자열화 한다.
    3.let c = JSON.parse(b); 파싱한다.
  • 랜덤함수 / floor함수

    • Math.random() - 지정된 수 안에 랜덤 (기본은 0~1)

    • Math.floor(Math.random() * ) - 지정된 수 안에 내림정수 (6-5, 5-4, 4-3)

    • Math.floor(Math.random() * quotesArray.length) - 지정된 수를 정하면 배열의 길이를 토대로 랜덤값을 추출할 수 있음.

    • 배열에 push를 넣을수도 있는데 넣으면 length에 추가할 수 있다.

❤️같은날 세명님 velog - 세명님이 워낙 정리를 잘해 놓으셔서 부가적으로 필요한 내용들이 궁금하다면 세명님 블로그를 보는게 좋겠다. 정리 정말정말 잘하신다. 짱짱!



🌜하루를 마치며..

오늘도 아픈 허리를 부여잡고 열심히 수업에 임했다. 오늘 마지막 한시간은 회고팀 시간을 가졌는데 민서형님이 오후수업에는 참가하지 않으셔서 회고팀 시간에도 얼굴을 뵐 수 없었다. 회고팀이 프로젝트팀과는 다르게 중요도가 떨어진다고는 하지만 그래도 나는 나름대로 처음 만들어진 우리팀이라는 소속감에 좀 더 의지를 가지고 함께 잘해나가고 싶었는데 아무래도 민서형님은 많이 버거우신가보다. 뭔가 아쉽기는 하지만 개인사정과 개인차가 분명히 존재하는것이기 때문에 어쩔수없다고 생각한다. 당장 내 앞가림도 못하는 상황에 어찌보면 나의 행동이 오지랖이 될수도 있다고 생각한다. 다만 현재 남은 기원형님과 주용님이라도 나와 공감대를 형성하며 함께 이겨나가줬으면 하는 작은 바램도 어쩔수없이 있다. 은찬스승님과 매니저님들도 들어오셔서 이런저런 이야기를 많이했고, 위로도 해주시고 조언도 해주셔서 다시 힘을 내야겠다는 생각을 하기도 했다. 하루하루 퀘스트가 어려워지는 느낌이지만 버티다보면 이해가 되기 시작하는 구간이 생긴다고 하셨다. 일단은 버텨보는게 중요하겠다는 생각이 든다. 그리고 기왕 버틴다면 최대한 후회가 남지않게 열심히 버티는것도 중요하다고 생각한다. 앞으로의 인생에서 이제 다시 나에게 이런기회가 없을거라는 생각이 든다. 정말 나에게는 큰 도전인만큼 나중에 후회되는 마음이 들지는 않았으면 한다. 오늘도 열심히했다!

profile
개발자가 되어가는 개린이"

0개의 댓글