วันเสาร์ที่ 18 เมษายน พ.ศ. 2558

เอาชนะ SHA256 !!!! ภาค #1

1. เกริ่นนำ
        หลังจาก สนุกสนานไปกับ การค้นหา Web Site ที่ แจก Free BitCoin (และ Alt-Coin อื่นๆ) จำนวนมาก....
ผมได้ พบกับ Web Site จำนวน 2 Web Site ที่ สร้างความท้าทาย กระตุ้นให้เกิด คำถาม

คล้ายๆ Web Site พยายามจะบอกว่า ....
การเข้ารหัสด้วย (Encryption) ด้วย Algorithm "SHA256" นั้นแข็งแกร่ง.... คุณมึงถอดรหัส ไม่ได้หรอก....
การทดลองซนๆ เยี่ยง บทความนี้ จึง ก่อกำเนิดเกิดขึ้น

Web Site แรก นั้นคือ Blockchain-Library.com

2. การใช้งาน Blockchain-Library.com
        จะมี ตารางขนาด 20 คูณ 20 (รวม 400 ช่อง) แต่ละช่องบรรจุ ตัวเลข ที่ไม่ซ้ำกัน ตั้งแต่ 1 - 400
เกมจะเริ่ม โดย ระบบ จะสุ่มเลือก ตัวเลข ใน ตาราง มาทั้งสิ้น 280 ตัว
หน้าที่เรา คือ การทายให้ถูกว่า ตัวเลข 10 ตัว (จาก 280 ตัว ที่ระบบ เลือกมา) คือ ตัวเลขใด บ้าง


ถ้า เราทายถูกครบทั้ง 10 ตัว จะได้รับ รางวัลใหญ่สุด คือ 10,000 Shatoshis (ประมาณ 0.72 บาท = 70 สตางค์)

เพื่อความ บริสุทธิ์ใจ ว่า Blockchain-Library.com ไม่ได้โกง เรา....
(โกง โดยการเลือก ตัวเลข 280 ตัว หลังจาก ที่ เราเลือก ตัวเลข 10 ตัว)

Blockchain-Library.com จะให้ค่า SHA256 ของ ตัวเลข 280 ตัว ที่ถูกเลือก ไว้ก่อนแล้ว มาให้เรา ก่อนที่เราจะเลือก ตัวเลข 10 ตัว


3. ทดลองเล่น Blockchain-Library.com

        หลังจาก หลับหู หลับตาเลือก ตัวเลข 10 ตัว ใน ตาราง .... พบว่า ผมทายถูก 9 ตัว ดังรูป
ได้ รางวัลปลอบใจ Bitcoin 250 Shatoshis (ไม่กล้า คำนวนเป็น เงินบาท กลัว ตกใจ !!!! :P )



สิ่ง ที่ผมสนใจ คือ ค่า SHA256 และ ค่า Input (ตัวเลข 280 ตัว) ที่ทำให้เกิด ค่าดังกล่าว



SHA-256: b3644fc1413482d26f88ebfa57dc1f73242d5ca4e88e734db1881637f1a2d699
Of: 85,112,113,210,317,267,379,51,103,107,129,159,172,233,36,298,62,366,93,194,20,43,375,180,101,143,373,205,216,335,299,10,96,227,228,155,308,372,396,240,157,202,171,276,329,156,108,65,109,68,137,333,110,174,294,235,168,209,119,63,346,6,281,390,360,273,122,199,286,136,330,268,45,49,271,392,301,387,186,19,376,393,319,78,222,5,389,31,83,324,118,105,388,311,288,1,354,181,307,250,125,127,218,219,77,187,220,263,15,367,44,377,176,297,338,121,391,166,356,313,76,272,29,18,22,213,13,229,97,278,92,214,264,32,104,139,82,345,260,57,359,369,352,132,262,306,2,316,192,246,341,215,280,206,291,34,191,195,161,289,28,275,141,160,170,254,146,142,361,353,358,384,130,56,54,24,169,111,248,261,115,134,339,368,106,394,179,86,117,116,343,256,21,73,292,84,244,322,59,67,348,9,207,197,70,61,99,211,27,126,55,296,351,290,225,164,287,50,395,64,224,196,323,35,398,144,95,312,365,274,12,325,91,364,39,397,336,89,355,102,60,153,193,148,383,75,158,25,162,8,293,234,309,80,350,189,100,14,242,188,295,38,374,87,81,71,318,326,79,88,74,152,98,245,284,42,337,124,257,315


4. ตรวจสอบ ค่า SHA256Sum ที่ได้มา
เราสามารถตรวจสอบ ค่าตัวเลข Input 280 ตัวที่ได้มา ว่า นำไป คำนวนด้วย Algorithm "SHA256Sum" แล้วได้ผลลัพธ์เป็น ค่า SHA256Sum ตามที่ระบบ แจ้งมาได้ที่ Web Site : http://www.xorbin.com/tools/sha256-hash-calculator



ใส่ ค่า Input คือ ตัวเลข 280 ตัว


Click ปุ่ม Calculate SHA256Sum hash


ค่า SHA256Sum เท่ากับ b3644fc1413482d26f88ebfa57dc1f73242d5ca4e88e734db1881637f1a2d699
ตรงกับที่ Web Site : Blockchain-Library.com แจ้งมา

5. ทราบค่า SHA256Sum คำนวนหา ตัวเลข Input 280 ตัวได้หรือไม่ ?
        ตามทฤษฎีแล้ว SHA256Sum นั้นเป็น One Way Function พูดง่ายๆ คือ การคำนวน หาค่า Input จาก ค่า Output นั้นแทบจะเป็นไปไม่ได้

แต่นั้นแหละ .... ถ้าผมทำโดย การ รวบรวม ค่า SHA256Sum ทั้งหมด จาก Input ทั้งหมด ที่เป็นไปได้ มาเก็บไว้ ผมก็ พอจะบอกได้ว่า SHA256Sum ค่านี้เกิด จาก ค่า Input ใด

เช่น ณ ตอนนี้ ผมทราบว่า ค่า Output "SHA256Sum" = b3644fc1413482d26f88ebfa57dc1f73242d5ca4e88e734db1881637f1a2d699

เกิดจาก ค่า Input 85,112,113,210,317,267,379,51,103,107,129,159,172,233,36,298,62,366,93,194,20,43,375,180,101,143,373,205,216,335,299,10,96,227,228,155,308,372,396,240,157,202,171,276,329,156,108,65,109,68,137,333,110,174,294,235,168,209,119,63,346,6,281,390,360,273,122,199,286,136,330,268,45,49,271,392,301,387,186,19,376,393,319,78,222,5,389,31,83,324,118,105,388,311,288,1,354,181,307,250,125,127,218,219,77,187,220,263,15,367,44,377,176,297,338,121,391,166,356,313,76,272,29,18,22,213,13,229,97,278,92,214,264,32,104,139,82,345,260,57,359,369,352,132,262,306,2,316,192,246,341,215,280,206,291,34,191,195,161,289,28,275,141,160,170,254,146,142,361,353,358,384,130,56,54,24,169,111,248,261,115,134,339,368,106,394,179,86,117,116,343,256,21,73,292,84,244,322,59,67,348,9,207,197,70,61,99,211,27,126,55,296,351,290,225,164,287,50,395,64,224,196,323,35,398,144,95,312,365,274,12,325,91,364,39,397,336,89,355,102,60,153,193,148,383,75,158,25,162,8,293,234,309,80,350,189,100,14,242,188,295,38,374,87,81,71,318,326,79,88,74,152,98,245,284,42,337,124,257,315

นั้น คือ เป็นไปได้ ที่ผมจะทราบได้ว่า SHA256Sum ค่านี้ๆๆๆ เกิดมาจากค่า Input ใดๆ


6. รูปแบบของ Input ที่เป็นไปได้ มีมากน้อย แค่ไหน ?
        ด้วย ความรู้ คณิตศาสตร์ ชั้นมัธยมก็จะ คำนวน ได้ว่า
กรณีนี้ รูปแบบของ Input ที่เป็นไปได้ = 400x399x398x......x122x121
หรือเท่ากับ 400! หารด้วย 120!

คำนวนเลข ใหญ่โต มโหฬาร ต้องใช้ พลัง ของ Python ช่วย คำนวน
maquid@DeepGreen:~$ 
maquid@DeepGreen:~$ date ; python3 ; date
Sat Apr 18 20:56:56 ICT 2015
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import math
>>> a=math.factorial(400)
>>> b=math.factorial(200)
>>> 
>>> a//b
81194299196669252235854199390758398283148854996192625200691549419024264220307365674173895827530489378777860244000407541344702186728788651984219970413048948814239464163291402146547829635895456975404770510252691426674139960823924220016806378188504755704753279798193071078366680360035010084873671227278768370231743787305312749725139572751770886068232868092080615395903420397999505904114208027317765280260089740385931243949829511860473000484038246400000000000000000000000000000000000000000000000000
>>> 
>>> quit ();
Sat Apr 18 20:57:39 ICT 2015
maquid@DeepGreen:~$ 
maquid@DeepGreen:~$ 
อยากรู้ว่า ผลลัพธ์ที่ ได้เป็น เลขกี่หลัก
maquid@DeepGreen:~$ 
maquid@DeepGreen:~$ date ; python3 ; date
Sat Apr 18 21:12:51 ICT 2015
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import math
>>> a=math.factorial(400)
>>> b=math.factorial(200)
>>> 
>>> c=a//b
>>> 
>>> c
81194299196669252235854199390758398283148854996192625200691549419024264220307365674173895827530489378777860244000407541344702186728788651984219970413048948814239464163291402146547829635895456975404770510252691426674139960823924220016806378188504755704753279798193071078366680360035010084873671227278768370231743787305312749725139572751770886068232868092080615395903420397999505904114208027317765280260089740385931243949829511860473000484038246400000000000000000000000000000000000000000000000000
>>> 
>>> len(str(c))
494
>>> 
>>> quit ()
Sat Apr 18 21:13:30 ICT 2015
maquid@DeepGreen:~$ 
maquid@DeepGreen:~$ 
    

สรุป กรณีนี้ รูปแบบของ Input ที่เป็นไปได้ มีทั้ง หมด 8..... (8 ตามด้วยตัวเลขอีก 493 หลัก)

ต้องมี เครื่อง Computer ที่มี พลังคำนวน มหาศาล + Storage ใหญ่ๆ ก็จะทำได้

แถม การคำนวน หาค่า SHA256Sum บน Linux
maquid@DeepGreen:~$ 
maquid@DeepGreen:~$ date ; echo -n "85,112,113,210,317,267,379,51,103,107,129,159,172,233,36,298,62,366,93,194,20,43,375,180,101,143,373,205,216,335,299,10,96,227,228,155,308,372,396,240,157,202,171,276,329,156,108,65,109,68,137,333,110,174,294,235,168,209,119,63,346,6,281,390,360,273,122,199,286,136,330,268,45,49,271,392,301,387,186,19,376,393,319,78,222,5,389,31,83,324,118,105,388,311,288,1,354,181,307,250,125,127,218,219,77,187,220,263,15,367,44,377,176,297,338,121,391,166,356,313,76,272,29,18,22,213,13,229,97,278,92,214,264,32,104,139,82,345,260,57,359,369,352,132,262,306,2,316,192,246,341,215,280,206,291,34,191,195,161,289,28,275,141,160,170,254,146,142,361,353,358,384,130,56,54,24,169,111,248,261,115,134,339,368,106,394,179,86,117,116,343,256,21,73,292,84,244,322,59,67,348,9,207,197,70,61,99,211,27,126,55,296,351,290,225,164,287,50,395,64,224,196,323,35,398,144,95,312,365,274,12,325,91,364,39,397,336,89,355,102,60,153,193,148,383,75,158,25,162,8,293,234,309,80,350,189,100,14,242,188,295,38,374,87,81,71,318,326,79,88,74,152,98,245,284,42,337,124,257,315" | sha256sum ; date
Sat Apr 18 21:21:43 ICT 215
b3644fc1413482d26f88ebfa57dc1f73242d5ca4e88e734db1881637f1a2d699  -
Sat Apr 18 21:21:43 ICT 2015
maquid@DeepGreen:~$ 
maquid@DeepGreen:~$ 
(ให้ดูว่า Input เดียวกัน ผลลัพธ์ ก็ เหมือนกัน)

อดีต Storage ความจุ คุยกันที่ ระดับ GB เวลาผ่านไปไม่นาน คุยกัน ที่ ระดับ TB
ความสามารถในการประมวลผลของ CPU ก็ไม่แตกต่าง.... พัฒนา ไปข้างหน้า อย่างรวดเร็ว

จะเกิดอะไรขึ้น ถ้านำ Quantum Computing มาใช้ในการถอดรหัส....
ณ เวลานั้น SHA256 จะ "ยังเอาอยู่" ไหม ?

ก็แค่ ข้อสงสัย !!!! ผมก็ไม่รู้เหมือนกัน ....

จบ ดื้อๆ แบบนี้แหละ :)

(เจอกัน ภาค #2 กับ อีก Web Site "เกม ถอดรหัส ตู้เซฟ 8 หลัก)
พรุ่งนี้ ไป เรียน เพาะเห็ด .... คงจะยุ่งกับ เห็ด ไปซักพัก แล้วจะแวะ มาเขียน ภาค #2 ต่อ ครับ)



ปิดท้าย ด้วย รูปภาพ แห่งชัยชนะ (เลือก มั่วๆแหละ.... ชนะเพราะ โชคช่วย) ....
ได้ รางวัล เป็น BitCoin มา 10,000 Satoshis (70 สตางค์)

(ในรูป Click ปุ่ม "Cash Out" โอนตังค์ ออกไปแล้ว .... กลัว มันไม่จ่าย.... ตั้ง 70 สตางค์ ฮือ :P)

3 ความคิดเห็น:

  1. Have you ever tried automating your bitcoin collections by utilizing a BTC FAUCET ROTATOR?

    ตอบลบ
  2. กำลังศึกษาเรื่องนี้อยู่ครับ เป็นบทความที่น่าสนใจมากครับ ผมอ่านไม่รู้เรื่องหรอก แต่สักวันผมหวังว่าจะทำความเข้าใจกับมันให้ได้ เสียดายนะคนเก่งๆออกไปเพาะเห็ดแล้ว (หรือเอาความรู้ไปถอดรหัสพันธุกรรมเห็ดกันน้อ)

    ตอบลบ
  3. Did you realize there is a 12 word phrase you can say to your partner... that will trigger intense emotions of love and impulsive attractiveness for you deep within his heart?

    That's because hidden in these 12 words is a "secret signal" that triggers a man's instinct to love, admire and protect you with his entire heart...

    12 Words That Fuel A Man's Desire Response

    This instinct is so hardwired into a man's brain that it will drive him to work better than before to make your relationship as strong as it can be.

    Matter of fact, fueling this influential instinct is so binding to achieving the best ever relationship with your man that once you send your man one of the "Secret Signals"...

    ...You will immediately notice him open his mind and heart for you in such a way he's never experienced before and he will perceive you as the only woman in the universe who has ever truly fascinated him.

    ตอบลบ