hash สมการเบื้องหลัง bitcoin (blockchain)

Trust Tanapruk
Dcen.io
Published in
4 min readDec 14, 2017

buzz word ในโลกไอทีช่วงนี้คงเป็นอะไรไปไม่ได้นอกจาก bitcoin และที่สำคัญกว่านั้นคือ เทคโนโลยีที่อยู่เบื้องหลังอย่าง blockchain

ขอนิยาม Blockchain อย่างย่อว่า

  • มันคือระบบ database แบบนึง
  • ที่นำ ก้อนข้อมูล (block) มาวางต่อเนื่องกันเป็นลูกโซ่ (chain)
  • ซึ่งข้อมูลนำมาเชื่อมกันโดยใช้ hash function
  • และข้อมูล database ทั้ง blockchain จะถูกคัดลอกและกระจายไปเก็บไว้หลายที่ใน network (Decentralization)

Bitcoin เป็นเจ้าแรกที่การประยุกต์ใช้ blockchain โดยข้อมูลแต่ละ block ก็เป็นข้อมูลผู้รับ ผู้ส่ง จำนวนเงิน และ hash ของ block ก่อนหน้า

อะไรคือ hash function

เทคนิคการทำงานของ blockchain มีรายละเอียดเยอะมาก แต่บทความนี้จะเน้นทำความเข้าใจคำว่า hash

เริ่มที่การทำงานมันก่อน

hash function จากเว็บ http://www.xorbin.com/tools/sha256-hash-calculator

ตามภาพข้างบน hash คือการแปลงข้อมูลให้อยู่ในรูปที่อ่านไม่ออก

hello1 → 91e9240f415223982edc345532630710e94a7f52cd5f48f5ee1afc555078f0ab

hello2 → 87298cc2f31fba73181ea2a9e6ef10dce21ed95e98bdac9c4e1504ea16f486e4

hello3 → 47ea70cf08872bdb4afad3432b01d963ac7d165f6b575cd72ef47498f4459a90

สังเกตได้ว่า input ของเรา hello1, hello2, hello3 ต่างกันแค่เลขตัวหลังสุด แต่ output ต่างกันลิบลับเลย ดูไม่มีแพทเทินอะไรเลย

ดังนั้น เราไม่สามารถแกะแพทเทิน output เพื่อ reverse กลับไปหา input ได้เลย ในขณะที่ ถ้าเราใส่ hello1 เข้าไปใน hash function เราก็จะได้ข้อมูล 91e9240f415223982edc345532630710e94a7f52cd5f48f5ee1afc555078f0ab เหมือนเดิมเสมอ

เรียกได้ว่า hash เป็น one-way function สมการที่ไม่สามารถไหลย้อนกลับ ส่วน algorithm ของสมการ sha256 (hash function) ก็มีเปิดเผยใน wikipedia

https://en.wikipedia.org/wiki/SHA-2

แต่ผมคงไม่พิสูจน์ sha256 ให้ดู เพราะแค่ผมเห็นตัวอักษร Greek ผมก็มึนหัวแล้ว

สมการที่เป็น one-way function แบบเข้าใจง่าย

49 + 51 = 100

49 + 51 ได้ 100 แน่นอน

แต่ถ้ามีแค่ output 100 มา ถามว่า input คืออะไร

100 = 1 + 99

100 = 2 + 98

100 = 3 + 97

เราไม่มีทางรู้เลยว่า input ตอนแรกคืออะไร ได้แค่ประมาณค่าเอา เพราะ 100 จะมาจาก 1 + 99 ก็ได้ หรือ 2 + 98 ก็ได้ และแน่นอนว่า hash function เต็มรูปแบบอย่าง sha256 มีความซับซ้อนกว่านี้

มีเว็บใจดีสอนการ hash sha1 แบบ ทีละขั้นตอน ส่วนตัวผมทำได้ครึ่งทางก็รู้แล้วว่าผม reverse ไม่ได้แน่ ใครสนใจลองดูครับ

hash function มีหลายรูปแบบมาก เช่น MD5, SHA and etc.

ใช้ hash function เก็บข้อมูลที่เป็นความลับ

ประโยชน์ที่เด่นที่สุดคือใช้เก็บข้อมูลลับ

สมมติผมสมัครเว็บไซต์นึง ใช้ username และ password ว่า bob 123456 ตามลำดับ server ควรเก็บข้อมูลในรูปแบบ

bob 5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5

ทุกครั้งที่ผม login ทาง server จะหยิบ password ที่พิมพ์ไปทำการ hash ก่อนนำ output ไปเทียบกับ password ที่ hash ไว้แล้วบน server

ข้อมูลต้องถูกเก็บในรูปแบบนี้ เพราะหาก server โดน hack ทาง hacker จะเห็น password ที่ถูก hash ไว้เรียบร้อย

อย่างไรก็ดีถึง hash ไว้แล้ว หาก password ง่ายมาก ก็อาจถูก dictionary attack ได้ เช่น 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 สามารถเอา pattern นี้ไป search หาใน google ได้ว่ามันคือคำว่า password password ที่ดี ก็ตามที่คำเตือนส่วนใหญ่แนะนำ ให้ใส่ตัวใหญ่ตัวเล็ก ผสมตัวอักษร หรือประกอบด้วยประโยคหลายตัวติดต่อกัน

hash function ใน blockchain

ตัว blockchain ของจริงมีความซับซ้อนกว่านี้ ตัวอย่างนี้ใช้แบบง่ายเพื่อให้เข้าใจแนวคิด

blockchain เชื่อมข้อมูลระหว่างกันโดยใช้ hash function

ข้อมูลแต่ละ block ซึ่งประกอบไปด้วยข้อมูลที่เป็น plain text ธรรมดา จะถูก hash ให้กลายเป็น hash code

และใน block ถัดไปก็จะมี hash code ของ block ก่อนหน้าเป็นข้อมูลอยู่

เอาข้อมูล block ก่อนหน้ามา hash เป็นข้อมูลก้อนถัดไป

ดังนั้นถ้าจะโกง blockchain ด้วยการ mock ข้อมูลใน block ล่าสุด ต้องสามารถแงะเอา hash code ของ block ก่อนหน้าที่มี hash code ของ block ก่อนหน้า…

Proof-of-work ค้นหา hash ที่นำหน้าด้วยเลข 0

ในการสร้าง bitcoin ก้อนใหม่ ตัวระบบจะมีเงื่อนไขให้หา hash ที่ตัวเลขนำหน้าด้วย 0 ซึ่งจะเป็น 0 กี่ตัวขึ้นอยู่กับ difficulty ในตอนนั้น เช่น ต้องการเลข 0 นำหน้า 12 ตัว

000000000000998062d5d3b4a2806bfcffee34ab04b2d7a16264b4eca3bfac24

เราก็ต้องเปลี่ยนค่าใน input ไปเรื่อยๆ จนกว่าจะเจอ hash ที่มีเลข 0 นำหน้า 12 ตัว

เหนื่อย?

เราสามารถเขียน code ที่ให้คอมฯ เราช่วยวนลูปอันนี้ได้ แต่ว่ามันไม่ทันใจ และไม่ทันคนอื่น

ทางเลือกแรก — Graphic card rigs

ทางเลือกที่สอง — Mining Device

ความสามารถ 14TH/s หรือแปลเป็นภาษามนุษย์ว่า 14,000,000,000,000 hash ต่อวินาที หรือทำไอ้กระบวนการ Proof-of-work 14 ล้านล้านครั้งต่อวินาที

Total Hash Rate ทั้งโลก ในปัจจุบัน (13 Dec 2017) 14,709,608 TH/s หรือ มีไอ้เครื่องข้างบน 1 ล้านตัวทั่วโลก

จุดบอดของ hash function

สิ่งที่ hash function กลัวที่สุด คือ collision หรือ input 2 อันที่แปลงมาเป็น hash ตัวเดียวกัน

สมมติว่ามีคนจะแฮกข้อมูลเรา และได้ hash code ไป hacker ไม่ต้องรู้ password ต้นแบบเรา รู้แค่ input อื่นที่หลัง hash แล้วได้ hash code เดียวกับเรา

hash function อย่าง sha256 จะแสดง output ตายตัวที่ 256-bit หรือ 64 ตัวอักษร แต่ input มีรูปแบบหลากหลายมากกว่า output เยอะมาก มีโอกาสที่ input 2 แบบ จะกลายเป็น output แบบเดียวกันก็เป็นไปได้

hash function ที่ดี ควรมี collision resistance สูง

MD5 หนึ่งใน hash function ยอดฮิตในสมัยก่อน หลังจากเจอ collision ก็ถูกห้ามใช้กับข้อมูลที่เป็นความลับ

sha256 เป็น hash function ที่ bitcoin ใช้

ถ้าจะ hack sha256 ทำได้ยากมากเมื่อคิดตามความน่าจะเป็นของ 2²⁵⁶

สรุป

hash function คือ one-way function ที่เป็นเบื้องหลัง blockchain เมื่อแปลงข้อมูล input นิดเดียว hash code ที่เป็น output จะเปลี่ยนแปลงไปอย่างสิ้นเชิง

ข้อมูลแต่ละ block ของ blockchain จะพึ่งพิงกับ hash code ข้อมูลของ block ก่อนหน้า ดังนั้นเราจะสร้างข้อมูลหลอกให้เหมือนได้ยากมาก

Proof-of-work คือ การสุ่มเลข input ให้ได้ hash code ที่นำหน้าด้วย 0 ในปริมาณที่ต้องการ

hash function มีข้อที่ควรระวังคือ collision หรือ input 2 ตัวแปลงกลายเป็น hash code ตัวเดียวกัน hash function ที่ดี ควรมี collision resistance สูง สำหรับ bitcoin ที่ใช้ sha256 ยังอยู่ในระดับที่ปลอดภัย

--

--