การโจมตี 51% attack คืออะไร?

01-51-attack

การโจมตี 51% จะหมายถึงการกระทำโดยความตั้งใจในการสร้างห่วงโซ่ที่ยาวที่สุดของบล็อกเพื่อที่จะแทนที่บล็อกอื่นๆ บนเครือข่าย Blockchain นี้จะทำให้คุณแทนที่รายการธุรกรรมที่ถูกขุดขึ้นมาบน Blockchain 

การโจมตีนี้เป็นการกระทำที่ง่ายที่สุดเมื่อคุณมีพลังการขุดส่วนใหญ่ ซึ่งนี้คือเหตุผลว่าทำไมจึงอ้างว่าเป็น “การโจมตีส่วนใหญ่” หรือ “การโจมตี 51% (51% attack)”

การโจมตี 51% (51% attack) มีการทำงานอย่างไร?

Node มักจะยอมรับห่วงโซ่ที่ยาวที่สุดของบล็อกที่มีการรับรู้ว่าเป็นเวอร์ชั่นที่ถูกต้องของ Blockchain เพราะฉะนั้นหากคุณต้องการที่จะ “ยกเลิก” รายการธุรกรรมจาก Blockchain คุณแค่ต้องสร้างห่วงโซ่ของบล็อกที่ไม่มีรายการธุรกรรมนั้นๆ ขึ้นมาใหม่

02-example-build-longest-chain

คิดซะว่าเราซื้อรถด้วย Bitcoin และขับรถออกไปพร้อมกับมัน

เมื่อ Node ได้รับห่วงโซ่ใหม่ของบล็อกที่มีความยาวมากกว่า พวกมันจะทำการปรับโครงสร้างของห่วงโซ่เพื่อที่จะปิดการใช้งานบล็อกในห่วงโซ่ที่ยาวที่สุดของพวกมันและเปิดใช้งานบล็อกนี้ในห่วงโซ่ที่ยาวที่สุดที่คุณให้พวกมันไป

รายการธุรกรรมในห่วงโซ่เก่าตอนนี้เป็นโมฆะ การจ่ายเงินเพื่อซื้อรถยนต์ของเราจะถือว่าไม่เคยเกิดขึ้น

เพราะฉะนั้น การสร้างห่วงโซ่ใหม่เพื่อที่จะแทนที่ห่วงโซ่เดิมที่มีอยู่ คุณจะต้องเขียน Blockchain ขึ้นมาใหม่และสร้างประวัติของรายการธุรกรรมสำหรับให้ทุกๆ Node บนเครือข่ายเพื่อยอมรับ ผลก็คือคุณจะทำการย้อนกลับรายการธุรกรรมที่เราเคยคิดว่าอยู่ในส่วนที่ไม่อาจจะลบทิ้งได้ของ Blockchain 

อย่างไรก็ตาม การจะทำการโจมตี 51% (51% attach) นี้ไม่ได้ง่ายนัก

สามารถป้องกันการโจมตี 51% (51% Attack) ได้อย่างไร?

นักขุดทุกคนจะได้รับแรงจูงใจให้ทำงานบนห่วงโซ่ของบล็อกที่ยาวที่สุด เพราะฉะนั้นหากประมวลผลของนักขุดทั้งหมดบนเครือข่ายมากกว่าพลังประมวลผลของคุณ การทำงานได้เหนือกว่านักขุดอื่นๆ ในระบบและสร้างห่วงโซ่ที่ยาวที่สุดขึ้นมาใหม่ แทนที่ห่วงโซ่เดิมที่อยู่บนเครือข่ายจึงเป็นเรื่องที่ยากอย่างเหลือเชื่อ

04-prevent-combined-mining

นักขุดที่ทำงานด้วยกันสามารถสร้างห่วงโซ่ได้เร็วกว่าคุณซึ่งทำงานคนเดียวอย่างแน่นอน

แต่แน่นอน หากคุณมีพลังงานในการขุดมากกว่านักขุดทั้งหมดในระบบรวมกัน คุณก็จะสามารถทำการขุดได้เร็วกว่าและสร้างห่วงโซ่ที่ยาวที่สุดสำหรับให้ทุกคนในระบบนำไปใช้งานได้

05-prevent-majority-power

หากคุณควบคุมพลังในการขุดส่วนใหญ่ของเครือข่าย การที่คุณจะสร้างห่วงโซ่ที่ยาวที่ขึ้นมาได้ก็ขึ้นอยู่กับเวลาเท่านั้น

เพราะฉะนั้น เพื่อป้องกันไม่ให้มีนักขุดคนใดคนหนึ่งควบคุมพลังงานในการขุดส่วนใหญ่เพียงผู้เดียว ระบบจึงเปิดรับนักขุดจากทั่วโลกและจูงใจนักขุดเหล่านั้นด้วยการมอบรางวัลในการขุด

นักขุดจะได้รับรางวัลเป็นสิ่งจูงใจให้เข้ามาขุดบนห่วงโซ่ที่ยาวที่สุด

ผลก็คือ นักขุดทั้งหมดบนระบบจะมุ่งมั่นทำการสร้างห่วงโซ่เดียวกัน ทำให้การที่นักขุดใดนักขุดหนึ่งจะเขียนข้อมูลบนเครือข่ายใหม่ทับข้อมูลเดิมนั้นเป็นเรื่องที่ยากอย่างมาก

ตราบเท่าที่พลังงาน CPU ส่วนใหญ่ถูกควบคุมโดย Node ที่ไม่ได้ทำงานร่วมกันเพื่อโจมตีเครือข่าย พวกมันจะสร้างห่วงโซ่ที่ยาวที่สุดและทำงานอย่างรวดเร็วจนการโจมตีไม่อาจจะเกิดขึ้นได้ – Satoshi Nakamoto

การทำการโจมตี 51% (51% Attack) มีความยากแค่ไหน?

ส่วนที่ยากก็คือมันจะต้องทำให้ฮารด์แวร์ทั้งหมดสามารถทำการโจมตีให้ได้ก่อน ซึ่งถือว่าต้องใช้ทรัพยากรที่มีราคาแพงและยากมาก อย่างไรก็ตาม หากคุณสามารถทำการควบคุมพลังงานในการขุดส่วนใหญ่ได้สำเร็จ จากนั้นการสร้างห่วงโซ่ที่มีความยาวที่สุดขึ้นมาใหม่ก็ขึ้นอยู่กับเวลาเท่านั้น

แต่ว่าไปแล้ว การทดแทนบล็อกจำนวนมากจะต้องใช้การทำงานที่มากกว่าการสร้างบล็อกขึ้นมาทดแทนเพียงไม่กี่บล็อก เพราะฉะนั้น ยิ่งย้อนรายการธุรกรรมที่อยู่บน Blockchain ลงไปมากเท่าไหร่ ก็จะยิ่งใช้พลังงานและเวลาในการเข้าถึงและย้อนกลับรายการธุรกรรมเหล่านั้นนานเท่านั้น

07-depth-work

ยิ่งย้อนรายการธุรกรรมไปเท่าไหร่ใน Blockchain ก็จะยิ่งทำการทดแทนยากขึ้นไปเรื่อยๆ

แต่อีกครั้ง เหตุการณ์นี้อยู่บนข้อสันนิษฐานว่าคุณควบคุมพลังงานการขุด 51% เพื่อที่จะทำงานแซงหน้านักขุดอื่นๆ ขอให้โชคดีก็แล้วกัน 

อย่างไรก็ตาม คุณสามารถลองดำเนินการโจมตีในรูปแบบนี้ดูได้แม้จะควบคุมพลังงานในการขุดน้อยกว่า 50% แต่ก็จะมีโอกาสเป็นไปได้ต่ำมาก

เราสามารถเขียนข้อมูล Blockchain ขึ้นมาใหม่ด้วยพลังงานการขุดที่น้อยกว่า 50% ได้ไหม?

ได้ แต่โชคต้องเข้าข้างคุณนะ 

การขุดเป็นกระบวนการที่ไม่อาจจะคาดการณ์ได้ เพราะฉะนั้นหากคุณมีพลังงานในการขุดจำนวนน้อยนิด ไม่มีอะไรมากำหนดว่าคุณจะไม่โชคดี สามารถขุดบล็อกถัดไปได้ 2 บล็อกติดกัน แม้จะเกิดขึ้นไม่บ่อย แต่ก็เป็นไปได้ ความเป็นไปได้นี้จะขึ้นอยู่กับคุณมีพลังงานในการขุดเท่าไหร่ เทียบกับคนอื่นๆ 

08-rewrite-luck

แน่นอนว่า ยิ่งรายการธุรกรรมที่อยู่บน Blockchain อยู่ล่างลงไปเท่าไหร่ คุณก็ยิ่งต้องใช้โชคในการขุดบล็อกจำนวน X ต่อกัน หากไม่มีใครควบคุมพลังงานในการขุดส่วนใหญ่ การแทนที่รายการธุรกรรมต่อไปเรื่อยๆ มันก็จะยิ่งยากเป็นทวีคูณ

09-mining-power-success-chart

ยกตัวอย่างเช่น หากนักขุดควบคุมพลังงานในการขุด 40% พวกเขาจะมีโอกาส 50% ที่จะสามารถสร้างรายการธุรกรรมที่อยู่ล่างลงไป 5 บล็อกขึ้นมาทดแทน

เพราะฉะนั้น นอกจากว่าคุณจะควบคุมส่วนหนึ่งในพลังงานในการขุดที่มีนัยยะสำคัญบนเครือข่าย Bitcoin โอกาสที่คุณจะสร้างรายการธุรกรรมมาทดแทนก็น้อยเหลือเกิน และโอกาสเหล่านั้นก็จะยิ่งลดน้อยลงอย่างรวดเร็วเมื่อยิ่งย้อนรายการธุรกรรมบนห่วงโซ่ลงไปเรื่อยๆ 

นี้คือตารางของโอกาสที่จะเป็นไปได้ที่ชัดเจน:

ความเป็นไปได้ที่จะทดแทนบล็อกบนสุดจำนวน X บล็อกบน Blockchain ตามจำนวนพลังงานการขุดที่คุณควบคุม

50% Control

40% Control

30% Control

20% Control

10% Control

1

100%

74.6%

44.6%

20.4%

5.1%

2

100%

66.4%

32.5%

10.3%

1.3%

3

100%

60.3%

23.9%

5.3%

0.4%

4

100%

55.0%

17.7%

2.7%

0.1%

5

100%

50.4%

13.2%

1.4%

0.02%

6

100%

46.2%

9.9%

0.7%

0.006%

7

100%

42.5%

7.4%

0.4%

0.001%

8

100%

39.1%

5.6%

0.2%

0.0004%

9

100%

36.0%

4.2%

0.1%

0.0001%

10

100%

33.2%

3.1%

0.06%

0.00003%

สมการ

ความเป็นไปได้ที่จะทำการเขียนข้อมูลบล็อกขึ้นมาใหม่อย่างตั้งใจบน Blockchain เป็นเพียงแค่ฟังก์ชั่นทางคณิตรศาสตร์ระหว่างจำนวนพลังงานในการขุดที่คุณควบคุมและจำนวนของบล็อกที่คุณต้องการที่จะพยายามทดแทนมัน

หลักฐานที่แสดงให้เห็นว่าบล็อกยิ่งอยู่ล่างห่วงโซ่เท่าไหร่ก็ยิ่งทำการทดแทนยากเท่านั้นเป็นส่วนสำคัญของการบูรณาการและความปลอดภัยของระบบ สมการนี้มาจาก Bitcoin Whitepaper (Section 11)

อย่างไรก็ตาม หากอยู่ใน Ruby Code สมการดังกล่าวจะเป็นตามด้านล่างนี้

# p = probability honest node finds the next block
# q = probability attacker finds the next block
# z = number of blocks to catch up

def attacker_success_probability(q, z)
  p = 1 - q
  lambda = z * (q / p) # expected number of occurrences in the poisson distribution
  sum = 1.0

  for k in 0..z
    poisson = Math.exp(-lambda) # exp() raises e (natural logarithm) to a number
    for i in 1..k
      poisson *= lambda / i
    end

    sum -= poisson * (1 - (q/p)**(z-k) )
  end

  return sum
end

# Example
puts attacker_success_probability(0.4, 5) #=> 0.5506251290702077
Another Chart
success_chart_50_blocks

คุณจะเห็นค่าความเป็นไปได้ที่จะแทนที่รายการธุรกรรมที่อยู่ลึกลงไปจะยิ่งต่ำลงไปเรื่อยๆ ตามความลึกของบล็อกบน Blockchain

Frequently Asked Questions

มีใครเคยทำการโจมตี 51% (51% Attack) สำเร็จแล้วบ้าง?

ไม่นะ ยังไม่เคยมี

ในประวัติศาสตร์ของ Bitcoin มีนักขุดบางคนเกือบไปถึง 50% หรือมากกว่าพลังการขุดทั้งหมด แต่ยังไม่มีใครเคยทำการโจมตี 51% attack ได้สำเร็จ

10-mining-distribution-ghash-2014

GHash.io ควบคุมการขุดใกล้เคียง 50% ในปี 2014

github.com/in3rsha/bitcoin-mining-distribution

เราต้องใช้พลัง Hash เท่าไหร่ในการทำการโจมตี 51% (51% attack)?

คุณสามารถใช้ค่าเป้าหมาย (Target) ปัจจุบันในการคาดคะเนว่าพลัง Hash เท่าไหนที่คุณใช้เพื่อที่จะควบคุมกำลังหมู่มาก

อันดับแรก เราจะหาค่าเป้าหมาย (Target) ปัจจุบันได้จากการค้นหาในขอบข่ายข้อมูล ‘Bits’ ภายในหัวบล็อก (Block Header) ของบล็อกที่เพิ่งขุดมาล่าสุด