CLIEN

본문 바로가기 메뉴 바로가기 보기설정 테마설정
톺아보기 공감글
커뮤니티 커뮤니티전체 C 모두의광장 F 모두의공원 I 사진게시판 Q 아무거나질문 D 정보와자료 N 새로운소식 T 유용한사이트 P 자료실 E 강좌/사용기 L 팁과강좌 U 사용기 · 체험단사용기 W 사고팔고 J 알뜰구매 S 회원중고장터 B 직접홍보 · 보험상담실 H 클리앙홈
소모임 소모임전체 ·굴러간당 ·아이포니앙 ·주식한당 ·MaClien ·일본산당 ·방탄소년당 ·개발한당 ·안드로메당 ·나스당 ·자전거당 ·이륜차당 ·소시당 ·걸그룹당 ·골프당 ·소셜게임한당 ·물고기당 ·바다건너당 ·패스오브엑자일당 ·노젓는당 ·스팀한당 ·AI그림당 ·클다방 ·요리한당 ·AI당 ·육아당 ·콘솔한당 ·덕질한당 ·여행을떠난당 ·키보드당 ·e북본당 ·가상화폐당 ·3D메이킹 ·X세대당 ·ADHD당 ·날아간당 ·사과시계당 ·배드민턴당 ·야구당 ·농구당 ·블랙베리당 ·곰돌이당 ·비어있당 ·FM당구당 ·블록체인당 ·보드게임당 ·활자중독당 ·볼링친당 ·캠핑간당 ·냐옹이당 ·문명하셨당 ·클래시앙 ·쿠키런당 ·대구당 ·DANGER당 ·뚝딱뚝당 ·디아블로당 ·개판이당 ·동숲한당 ·날아올랑 ·전기자전거당 ·갖고다닌당 ·이브한당 ·패셔니앙 ·도시어부당 ·FM한당 ·맛있겠당 ·포뮬러당 ·젬워한당 ·안경쓴당 ·차턴당 ·총쏜당 ·땀흘린당 ·하스스톤한당 ·히어로즈한당 ·인스타한당 ·IoT당 ·KARA당 ·꼬들한당 ·어학당 ·가죽당 ·레고당 ·리눅서당 ·LOLien ·Mabinogien ·임시소모임 ·미드당 ·밀리터리당 ·땅판당 ·헌팅한당 ·오른당 ·영화본당 ·MTG한당 ·소리당 ·노키앙 ·적는당 ·방송한당 ·PC튜닝한당 ·찰칵찍당 ·그림그린당 ·소풍간당 ·심는당 ·라즈베리파이당 ·품앱이당 ·리듬탄당 ·달린당 ·Sea마당 ·SimSim하당 ·심야식당 ·윈태블릿당 ·미끄러진당 ·축구당 ·나혼자산당 ·스타한당 ·파도탄당 ·퐁당퐁당 ·테니스친당 ·테스트당 ·빨콩이당 ·공대시계당 ·터치패드당 ·트윗당 ·창업한당 ·VR당 ·시계찬당 ·WebOs당 ·위스키당 ·와인마신당 ·WOW당 ·윈폰이당
임시소모임
고객지원
  • 게시물 삭제 요청
  • 불법촬영물등 신고
  • 쪽지 신고
  • 닉네임 신고
  • 제보 및 기타 제안
© CLIEN.NET
공지[점검] 잠시후 서비스 점검을 위해 약 30분간 접속이 차단됩니다. (금일 18:15 ~ 18:45)

블록체인당

강좌와 팁 암호화폐에 관한 지대넓얕 (1) - 해시 알고리즘 17

16
2018-02-04 05:08:12 수정일 : 2018-03-19 11:26:24 116.♡.74.44
서민신랑

개발자로서 암호화폐만큼 평가하기 힘든 기술이 있을까 싶습니다.


POW, 일명 채굴이 지금 트렌드인 딥러닝과 관련되어 틈틈이 공부하다가 2018년 1월에야 코린이로 입문하여 처절한 손실을 맛보고 있는 중입니다.

2010년에 비트코인을 접하고도 신박한 정도로만 생각했지 이 기술에 대한 적절한 가치와 가격을 몰라보고 주욱 관망만 하다가 늦게 뛰어든 덕에 수익 인증은 고사하고 결국 흑두루미가 되고 말았군요.


자의가 아닌 강제적으로 Buy and Hold, 일명 John-Buh 전략을 지향하게 된 코린이로써 블록체인당과 가상화폐당의 수준 높은 글들을 읽으며 빤스런의 욕구를 참고 있습니다.

저 또한 여러 고수님들께 많은 가르침을 받은 입장에서 이런 폭락장에서 혹여라도 이 글을 읽으며 조금이라도 재미있으신 분이 있다면 보람을 느낄 수 있겠지요.



오늘은 보안 이론 중에서 증명의 가장 기본단위인 해시(hash) 알고리즘에 대해 넓고 얕게 써보도록 하겠습니다.


http://www.whatsmyip.org/hash-generator/ 사이트로 가서 Input String 란에 "나는 흑두루미입니다." 를 입력하고 Calculate Hashes 버튼을 클릭해보세요.




빨간색 박스에 나열된 것들은 해시 알고리즘 종류이고 녹색 박스는 Input String 란에 입력한 문자열을 해시 함수로 돌려서 출력한 값입니다.


비트코인에서 사용되는 해시 알고리즘인 sha256 하나만 살펴보도록 하죠.

“나는 흑두루미입니다.” -> sha256 -> b95f6ac40aeeaf8e8a78df839d18f29e70b11ba9f5ee5966a007fa3215e3c684


왠지 좀 유식해 보이도록 표현해보겠습니다. ㅎㅎ

sha256(“나는 흑두루미입니다.”) = b95f6ac40aeeaf8e8a78df839d18f29e70b11ba9f5ee5966a007fa3215e3c684


이번엔 "나는 흑두루미입니다."를 “나는 백두루미입니다.”라고 살짝 바꿔서 입력하고 Calculate Hashes 버튼을 클릭해보겠습니다.

하단의 Hashes 항목들이 모두 바뀌는 것을 보실 수 있을겁니다.


sha256(“나는 흑두루미입니다.”) = b95f6ac40aeeaf8e8a78df839d18f29e70b11ba9f5ee5966a007fa3215e3c684

sha256(“나는 백두루미입니다.”) = f6e1b73aefa59bf190b1be5b6b8d9f853480a2c4d2530412253a0372191aa812


흑과 백, 한 글자 차이인데도 해시 값이 많이 달라졌습니다.



해시 함수는 입력 값이 약간만 바뀌어도 출력 값이 바뀌는 특징을 가지고 있습니다.

또한 이론적으로 입력값으로 문자열을 입력하던, 커다란 바이너리 값을 입력하던 입력 값의 길이 제한이 없으나 출력 값의 길이는 항상 일정합니다.


이런 특징이 얼마나 유용하냐 하면 


  1. A가 2기가 바이트짜리 문서를 작성하고 이 파일을 해시한 값을 보관합니다.
  2. A는 B에게 인터넷으로 문서 파일을 전송합니다.
  3. 인터넷으로 전송되는 중간에 해커는 A가 작성한 이 파일을 가로채서 데이터를 살짝 1바이트만 바꿔버린 후 B에게 보내줍니다. 아마도 이 해커는 2기가나 되는 문서에서 1바이트 정도만 살짝 바꿔도 누구도 알아채지 못할 것이라고 생각할겁니다.
  4. A는 B와 따로 만나서 문서의 해시 값만 알려줍니다. sha256으로 해시한다면 32바이트(16진수 처리하면 64자)이므로 포스트잇에 써서 따로 전달해줄 수 있습니다.
  5. B는 인터넷으로 전송받은 문서파일이 안전한지 검사하기 위해 문서 파일을 해시한 값과 A에게 따로 받은 포스트잇에 적힌 해시 값을 비교해봅니다. 해커가 중간에서 문서 파일의 1바이트만 살짝 바꾸었기 때문에 당연히 A가 작성한 원본 문서의 해시 값과 B가 인터넷으로 전송받은 문서의 해시 값은 다를 것이며, B는 누군가 이 문서의 값을 변조한 것을 알아차릴 수 있을 겁니다.


위의 항목들에 개인키/공개키를 적용하면 전자서명을 통한 무결성을 증명하는 확인 절차를 구현할 수 있습니다만 일단 다음으로 미루고 해시 알고리즘의 특징인 무결성을 증명하는 예문으로 이해해주시기 바랍니다.



대용량 파일을 전송받는 경우에도 마찬가지입니다.



몇 백 메가바이트가 넘는 유틸리티 파일을 다운받을 때 보면 저런식으로 해시 값(빨간색 박스)을 표시해주는 사이트들이 간혹 있습니다.

인터넷으로 파일을 다운로드하다 보면 전송 오류로 파일의 손상이 되었거나 실행 파일의 경우 중간에 해커가 가로채서 백도어나 랜섬웨어를 심었을 수도 있습니다.

그럼 뭘 믿고 제대로 다운로드했는지 알 수 있을까요?

다운로드를 완료한 다음에 해시 유틸리티로 돌려서 사이트에서 표시하는 해시 값과 비교해보고 해시 값이 서로 동일하다면 사이트에 올려놓은 원본과 같으니 안심하고 사용하라는 의미입니다.



sha-X (X=1, 256, 384, 512...)

보통 해시 함수는 알고리즘 이름(sha) 뒤에 숫자(1, 256, 384, 512...)가 붙는 식인데 이 숫자가 길수록 내부 상태와 블럭 크기가 증가해서 해시 값이 길어지게 됩니다.

이렇게 해시 값이 길수록 입력 값이 바뀌어도 출력되는 해시 값이 겹치는 충돌 가능성이 줄어들게 됩니다.


알고리즘

해시값 크기

내부 상태 크기

블록 크기

길이 한계

워드 크기

과정 수

사용되는 연산

충돌

SHA-0

160

160

512

64

32

80

+,and,or,xor,rotl

발견됨

SHA-1

160

160

512

64

32

80

+,and,or,xor,rotl

발견됨

SHA-256/224

256/224

256

512

64

32

64

+,and,or,xor,shr,rotr

-

SHA-512/384

512/384

512

1024

128

64

80

+,and,or,xor,shr,rotr

-


위 표의 가장 마지막 컬럼인 충돌 항목에서 해시 값이 상대적으로 짧은 SHA-0과 SHA-1은 입력 값이 다름에도 불구하고 출력되는 해시 값이 같게 출력되는 충돌의 경우가 보고되었지만 아직 sha256 이상의 해시 알고리즘에서는 충돌을 발견하지 못했습니다.

따라서 이러한 해시 알고리즘을 열심히 테스트하시다가 충돌의 경우를 발견하시면 보안 관련 학술지에 이름을 남기실 수 있습니다.

명예를 위한 채굴이라 생각하시고 한번 도전해보시는 것도... 그렇지만 발견 못해도, 인생의 좋은 경험이라고 생각하고 열심히 해야지 방법이 없습니다.



해시 함수는 출력되는 값을 통해서 입력 값을 알아낼 수 없는 단방향 함수이며, 실제로 해시 알고리즘을 돌려보기 전까지 어떠한 입력 값을 넣어서 어떠한 출력 값을 나올지 추측할 수 없습니다.

입력 값 -> 해시 함수 -> 출력 값 (O)

출력 값 -> 해시 함수를 역연산 -> 입력 값 (X)


해시 함수는 압축 함수도 암/복호화 함수도 아닙니다. 오직 가변적인 입력 값을 받아서 정해진 길이의 값으로만 출력할 수 있습니다.

상식적으로 생각해서 2기가 짜리 문서 파일을 해시해서 나온 값은 길어봤자 64바이트(16진수로 128자)인데, 이 값으로는 2기가 짜리 문서 파일을 복원할 수 있을까요? 할 수 있다면 기적의 압축 알고리즘이겠죠.


예를 들어 웹사이트를 개발할 때 서비스 가입자의 로그인 암호는 해시 함수를 돌린 후 데이터베이스에 저장하도록 권장(이라 쓰고 강제라고 읽음)하게 되어있습니다. 

왜 이렇게 할 까요? 암호를 암호화시켜서 저장할 수도 있을텐데 말이죠.


암호를 암호화하면 암호화할 때 사용했던 키로 복호화도 할 수 있습니다. 만약 해커가 이 암호를 암호화할 때 사용했던 키를 털면 데이터베이스에 저장된 사용자의 암호들도 다 복호화할 수 있게 되어 해당 사용자 계정들은 다 털려버립니다.


사용자가 가입할 때 해시 함수를 사용해서 암호를 해시하여 데이터베이스에 저장하고, 로그인할 때 암호를 입력하면 이를 해시하고 데이터베이스에 저장된 해시 값과 비교하여 같으면 로그인을 허용합니다. 오오~~~ 그럴 듯 하지 않습니까?


초창기 웹서비스들을 보면 사용자 암호를 잊어버렸을 때 인증 절차를 거치고 나면 이메일이나 SMS로 이전에 설정했던 암호를 알려주는 방식이었습니다. 그런데 말입니다. 


이런식으로 사용자의 암호를 알려줄 수 있다면 적어도 사용자의 암호를 해시해서 데이터베이스에 저장하지 않았다는 증거로 볼 수 있으며 해킹으로 데이터베이스가 털리면 해당 사용자들의 계정은 자동문이 되겠죠.

사용자 암호를 암호화하여 복원하기 힘들게 만들었다고 해도 암호화에 사용된 키가 사용자마다 다른게 아닌, 모두 같은 키로 암호화했다면 키 하나만 알아내면 되기 때문에 털리는 것은 시간문제라고 봐야죠.


요즘 웹서비스들은 사용자 암호를 잊어버렸을 때 인증 절차를 거치고 나면 이메일이나 SMS로 사용자의 암호를 재설정하거나 임시 암호를 발급해서 알려주는 방식입니다.

데이터베이스에 사용자의 암호를 해시해서 보관하고 있으므로 단방향 함수인 해시 함수의 특징 상 원래의 암호를 복원하는 것이 불가능하기 때문에 아예 재설정해버리는 겁니다.



다음번에는 이러한 해시 함수의 특징을 활용하여 어떤식으로 비트코인에 사용되는 nonce 값과 결합하여 블럭을 생성(이라고 읽고 채굴이라고 씀)하는지 살펴보려 합니다. 많은 응원 부탁드립니다.



시간이 널널하면 아래와 같은 글들을 써보려고 합니다.

  • 암호화폐에 관한 지대넓얕 - 비트코인, POW의 해답인 nonce?
  • 암호화폐에 관한 지대넓얕 - 왜 POW, 채굴에는 GPU를 사용하는가?
  • 암호화폐에 관한 지대넓얕 - 대칭키/공개키/개인키 그리고 공인인증서
  • 암호화폐에 관한 지대넓얕 - 병렬 컴퓨팅의 관점에서 채굴이랑 딥러닝은 먼 친척 관계?


시간이 널널한데, 이더리움과 리플 둘 다 떡상하면 !!!

  • 암호화폐에 관한 지대넓깊(?) - 채굴 프로그램 개발에 도전해보자.
  • 암호화폐에 관한 지대넓깊(?) - POW를 적용한 짭 트론을 만들어보자.



퍼가실 때, 꼭 출처를 밝혀주시길 바랍니다.


감사합니다.


출처 : https://steemit.com/kr/@loveiori/1
서민신랑 님의 게시글 댓글
  • 주소복사
  • Facebook
  • X(Twitter)
댓글 • [17]
HYPEMACHINE
IP 175.♡.33.241
02-04 2018-02-04 13:56:48
·
좋은글 감사합니다
산야스
IP 112.♡.79.85
02-04 2018-02-04 16:53:24
·
좋은 글 감사합니다..공부 잘 했습니다.

구화라
IP 223.♡.10.83
02-04 2018-02-04 18:18:24
·
감사합니다 흥미롭게 읽었습니다!
Fefe
IP 180.♡.223.97
02-04 2018-02-04 20:05:33
·
잘 봤습니다. 다음 시리즈도 꼭 부탁드립니다.
koku
IP 110.♡.14.252
02-04 2018-02-04 23:34:24
·
너무 쉽게 써주셔서 컴맹인 제가 이해할 수 있을 정도입니다. 진심으로 감사드립니다! ㅠㅠ
secunix
IP 121.♡.241.4
02-05 2018-02-05 09:42:53
·
sha-256은 인터넷 뱅킹에도 이용중인 해시 알고리즘이죠. 좋은글 잘 봤습니다.
서민신랑
IP 116.♡.87.5
02-05 2018-02-05 10:44:27
·
네 맞습니다. 초창기 공인인증서는 16진수 처리하여 40자짜리 md5나 sha1을 사용했는데 충돌이 발견되어 해시길이가 긴 sha256으로 바꾸게 되었죠
threepinple
IP 112.♡.170.60
02-05 2018-02-05 18:29:38
·
다음 시리즈도 꼭 부탁드립니다.2222
준군
IP 220.♡.4.224
02-05 2018-02-05 21:50:49
·
연재 부탁드립니다:)
GranJ
IP 210.♡.166.66
02-06 2018-02-06 16:01:17
·
좋은 글 감사합니다
커피짱조아
IP 119.♡.102.145
02-07 2018-02-07 12:35:18
·
최고입니다!!! 지금까지 읽었던 블록체인 글 중에서 탑!!!
HelloMoney
IP 1.♡.106.116
02-08 2018-02-08 16:09:48
·
감사합니다. 잘 읽고 도움이 많이 되었습니다
ymsong
IP 183.♡.11.121
02-08 2018-02-08 16:34:09
·
좋은글 감사해요~!
자기 시간 들여서 이렇게 양질의 글을 써주시는 분들 .. 정말 존경합니다~!
프로마크
IP 223.♡.219.45
02-08 2018-02-08 19:20:22
·
좋은 글 감사합니다 후속편도 기대됩니다.
/Vollago
속담삼매경
IP 110.♡.57.40
02-16 2018-02-16 15:27:43
·
아... 이렇게나 훌륭한글이...

다음편 쓰실때 반드시 쪽지부탁드립니다

가르침받고싶습니다
또또가스
IP 218.♡.209.76
02-17 2018-02-17 20:03:01 / 수정일: 2018-02-17 20:40:24
·
이런쪽으로 1의 지식도 갖지 않은 사람입니다. 글이 정말 재밌습니다.
이제서야 해시함수가 뭔지 제대로 이해하게 된 것 같아요!


파랑새6
IP 211.♡.66.205
02-20 2018-02-20 02:34:14
·
추천쾅~!!
좋은글 감사합니다~ ^^
새로운 댓글이 없습니다.
이미지 최대 업로드 용량 15 MB / 업로드 가능 확장자 jpg,gif,png,jpeg,webp
지나치게 큰 이미지의 크기는 조정될 수 있습니다.
목록으로
글쓰기
글쓰기
목록으로 댓글보기 이전글 다음글
아이디  ·  비밀번호 찾기 회원가입
이용규칙 운영알림판 운영소통 재검토요청 도움말 버그신고
개인정보처리방침 이용약관 책임의 한계와 법적고지 청소년 보호정책
©   •  CLIEN.NET
보안 강화를 위한 이메일 인증
안전한 서비스 이용을 위해 이메일 인증을 완료해 주세요. 현재 회원님은 이메일 인증이 완료되지 않은 상태입니다.
최근 급증하는 해킹 및 도용 시도로부터 계정을 보호하기 위해 인증 절차가 강화되었습니다.

  • 이메일 미인증 시 글쓰기, 댓글 작성 등 게시판 활동이 제한됩니다.
  • 이후 새로운 기기에서 로그인할 때마다 반드시 이메일 인증을 거쳐야 합니다.
  • 2단계 인증 사용 회원도 최초 1회는 반드시 인증하여야 합니다.
  • 개인정보에서도 이메일 인증을 할 수 있습니다.
지금 이메일 인증하기
등록된 이메일 주소를 확인하고 인증번호를 입력하여
인증을 완료해 주세요.