บทความนี้ตัดตอนมาจากหนังสือ คู่มือคนธรรมดาสำหรับ Bitcoin โดย Logan Brutsche และเผยแพร่ซ้ำที่นี่โดยได้รับอนุญาตจากผู้เขียน.
การเข้ารหัสเป็นศาสตร์ของการใช้ฟังก์ชันทางคณิตศาสตร์กับชิ้นส่วนของข้อมูลเพื่อรับประกันความปลอดภัย.
นิยายยอดนิยมจำนวนมากบอกเป็นนัยว่าระบบใด ๆ ก็สามารถถูกแฮ็กได้ตราบใดที่คุณมีแฮ็กเกอร์ที่ดีพอ “การแฮ็กในฮอลลีวูด” นี้ไม่ใช่วิธีการทำงานของโลกแห่งความเป็นจริงแฮ็กเกอร์ต้องหาช่องโหว่ในระบบเพื่อใช้ประโยชน์เช่นห้องเซิร์ฟเวอร์ที่ปลดล็อกรหัสผ่านที่เดาง่ายพอร์ตเครือข่ายที่ไม่มีการป้องกันหรือ “แบ็คดอร์” ติดตั้งเป็นงานภายในเพื่อรับการเข้าถึงโดยไม่ได้รับอนุญาตในภายหลัง.
แม้ว่าจะเป็นเรื่องจริง แต่เราไม่สามารถรับประกันได้ว่าระบบใดระบบหนึ่งจะไม่มีช่องโหว่ แต่อย่างไรก็ตามระบบต่าง ๆ ถูกสร้างขึ้นโดยมนุษย์ที่ไม่สมบูรณ์ความเชื่อมั่นที่ว่า“ ทุกอย่างสามารถถูกแฮ็กได้” นั้นเป็นเท็จ ตั้งแต่ช่วงต้นทศวรรษที่ 90 เป็นต้นมาเราได้เข้าถึงเทคนิคการเข้ารหัสที่ค่อนข้างมีภูมิคุ้มกันต่อการแฮ็ก เป็นการประยุกต์ใช้เทคนิคดังกล่าวซึ่งบางครั้งอาจทำให้ไม่มีที่ว่างสำหรับการแสวงหาผลประโยชน์.
การเข้ารหัสเองไม่สามารถแฮ็กเพื่อสร้างลายเซ็นการเข้ารหัสที่ปลอมแปลงได้ (กำหนดไว้ในไม่ช้า) เช่นเดียวกับที่คณิตศาสตร์ไม่สามารถแฮ็กเพื่อสร้าง 2 + 2 = 5 ได้แม้ว่าจะใช้ทั้งการเข้ารหัสและคณิตศาสตร์อย่างไม่ถูกต้อง. หากระบบที่ใช้การเข้ารหัสล้มเหลวนั่นเป็นเพราะนักออกแบบใช้การเข้ารหัสอย่างไม่ถูกต้อง. ไม่ใช่เพราะการเข้ารหัสใช้งานไม่ได้หรือเพราะมีคน“ แฮ็ก” การเข้ารหัส – เช่นเดียวกับที่ไม่ใช่ความผิดทางคณิตศาสตร์หากธนาคารของคุณจัดการบัญชีของคุณอย่างไม่ถูกต้องหรือความผิดพลาดของอีเมลเมื่อแม่ของคุณดาวน์โหลดไฟล์แนบที่ไม่คุ้นเคยและได้รับไวรัสคอมพิวเตอร์ . นี่เป็นความแตกต่างที่สำคัญเนื่องจาก Bitcoin เป็นแอปพลิเคชันของการเข้ารหัสที่จัดตั้งขึ้นโดยตรง.
การเข้ารหัสไม่ใช่เทคโนโลยีใหม่ที่ยังไม่ผ่านการทดสอบ. เทคนิคการเข้ารหัสทั้งหมดที่ใช้โดย Bitcoin ถูกนำมาใช้ตั้งแต่เริ่มต้นของอินเทอร์เน็ตและมีความสำคัญต่อโปรโตคอลอินเทอร์เน็ตทั่วไปจำนวนมากที่ใช้ทุกวัน. วิทยาศาสตร์ของการเข้ารหัสถือได้ว่ามีความน่าเชื่อถือและจำเป็นสำหรับนักวิทยาศาสตร์คอมพิวเตอร์ในลักษณะเดียวกับที่ NASA ถือว่าวิทยาศาสตร์จรวดมีความน่าเชื่อถือและจำเป็น.
Keypairs: รากฐานที่สำคัญของการเข้ารหัส
Keypairs เป็นรากฐานที่สำคัญของการเข้ารหัสที่ใช้ในบล็อกเชน. คีย์คู่มีสองส่วนคือคีย์ส่วนตัวและคีย์สาธารณะ คีย์เหล่านี้ไม่มีอะไรมากไปกว่าตัวเลขขนาดใหญ่ที่มีความสัมพันธ์ทางคณิตศาสตร์ที่เฉพาะเจาะจงซึ่งใช้แทนรหัสผ่านและชื่อผู้ใช้.
คุณจะจัดการกับคีย์สาธารณะเช่นชื่อหรือชื่อผู้ใช้ของคุณโดยส่วนใหญ่คุณจะแชร์กับใครก็ตามที่ถามและผู้ที่มีคีย์นั้นสามารถใช้เพื่ออ้างอิงหรือติดต่อคุณได้ มันเชื่อมโยงกับชื่อเสียงของคุณ (หรือในกรณีของ Bitcoin คือประวัติการทำธุรกรรมของคุณ) ดังนั้นคุณอาจมีคีย์สาธารณะหลายอัน (และมีหลายคีย์คู่) ที่คุณใช้เพื่อวัตถุประสงค์ที่แตกต่างกัน คุณสามารถใช้คีย์สาธารณะเพื่ออ้างอิงหรือดูบัญชีได้ แต่ไม่สามารถอนุญาตการดำเนินการใด ๆ กับบัญชีนั้นได้ด้วยตัวเอง.
คีย์ส่วนตัวควรได้รับการปฏิบัติเหมือนรหัสผ่านไม่ควรแชร์กับใครและใช้เพื่อตรวจสอบสิทธิ์การดำเนินการบางอย่างเช่นการส่ง BTC.
แต่มีข้อแตกต่างที่สำคัญระหว่างคีย์ส่วนตัวและรหัสผ่าน ในการใช้รหัสผ่านคุณต้องส่งรหัสผ่านไปยังบุคคลหรือเซิร์ฟเวอร์เพื่อให้สามารถตรวจสอบกับบันทึกของพวกเขาได้ คุณต้องวางใจว่ารหัสผ่านจะได้รับการจัดการอย่างมีความรับผิดชอบหลังจากส่งรหัสผ่าน ในทางตรงกันข้ามสามารถใช้คีย์ส่วนตัวเพื่อตรวจสอบสิทธิ์ตัวเองโดยไม่ต้องส่งไปที่ใดก็ได้ สถานที่เดียวที่เคยจัดเก็บหรือใช้โดยตรงคือบนอุปกรณ์ในพื้นที่ของคุณ.
นี่เป็นสิ่งสำคัญเพราะหากคุณสามารถตรวจสอบสิทธิ์ตัวเองได้โดยไม่ต้องส่งความลับไปที่ใดคุณก็ยังสามารถควบคุมความปลอดภัยได้อย่างสมบูรณ์คุณจะไม่เสี่ยงต่อความปลอดภัยของระบบอื่น ๆ นี่เป็นส่วนสำคัญของสิ่งที่ทำให้ Bitcoin ไม่ถูกแฮ็ก ไม่มีรหัสผ่านหรือคีย์ส่วนตัวที่เก็บไว้ใน Bitcoin เพื่อให้ผู้โจมตีโจมตี แต่ผู้ใช้ยังสามารถตรวจสอบการทำธุรกรรมได้.
แต่คุณจะใช้คีย์ส่วนตัวในการตรวจสอบความถูกต้องของธุรกรรมได้อย่างไรหากคุณไม่เคยส่งคีย์ส่วนตัวไปที่ใดเลย คำตอบเกี่ยวข้องกับความสัมพันธ์ทางคณิตศาสตร์ระหว่างคีย์ส่วนตัวและคีย์สาธารณะ: ลายเซ็นการเข้ารหัส.
ลายเซ็นการเข้ารหัส
มีเทคนิคที่แตกต่างกันหลายประการในการสร้างและตรวจสอบลายเซ็นการเข้ารหัสและทฤษฎีบททางคณิตศาสตร์ที่อนุญาตให้ทำงานนั้นอยู่นอกเหนือขอบเขตของบทความนี้ สำหรับผู้ที่ไม่คุ้นเคยกับการเข้ารหัสกระบวนการที่อธิบายไว้ที่นี่ในตอนแรกอาจฟังดูเป็นไปไม่ได้เลย ฉันจำได้อย่างชัดเจนว่ามีความประทับใจนี้เมื่อฉันเริ่มค้นคว้าเกี่ยวกับ Bitcoin เมื่อสี่ปีก่อน.
สำหรับตอนนี้ฉันจะทราบอีกครั้งว่าเทคโนโลยีเหล่านี้ถูกใช้ในโปรโตคอลอินเทอร์เน็ตทั่วไปจำนวนมากและเป็นส่วนหนึ่งของวิทยาศาสตร์ข้อมูล.
ลองนึกภาพคนสองคนคืออลิซและบ็อบที่ซื้อขายกุญแจสาธารณะด้วยตัวเองแล้ว อลิซต้องการส่งข้อความให้บ็อบ แต่บ็อบเป็นคนที่น่าสงสัยมากและจะไม่เชื่อใจว่าข้อความนั้นมาจากอลิซจริง ๆ เว้นแต่เขาจะพิสูจน์ได้ในเชิงคณิตศาสตร์โดยปราศจากข้อสงสัย เพื่ออำนวยความสะดวกในการพิสูจน์นี้พวกเขาตกลงที่จะใช้ลายเซ็นการเข้ารหัส.
ในการสร้างลายเซ็น Alice ใช้อัลกอริธึมการสร้างลายเซ็นของคอมพิวเตอร์ของเธอซึ่งใช้เป็นอินพุตคีย์ส่วนตัวและข้อความทั้งหมดของเธอและสร้างลายเซ็นการเข้ารหัส จากนั้นเธอก็ส่งคำสั่งผสมข้อความ / ลายเซ็นนี้ให้บ็อบ แต่สำคัญมาก, ไม่ส่งคีย์ส่วนตัวของเธอ.
เมื่อ Bob ได้รับข้อความและลายเซ็นเขามีอัลกอริธึมการตรวจสอบลายเซ็นเสริมที่จะใช้ อัลกอริทึมนี้ใช้เป็นอินพุตข้อความและลายเซ็นและกำหนดไฟล์ สาธารณะ คีย์ของคู่กุญแจที่ Alice ใช้ในการสร้างลายเซ็น เมื่อบ็อบเห็นอัลกอริทึมที่ส่งออกคีย์สาธารณะของอลิซเขาได้พิสูจน์ทางคณิตศาสตร์แล้วว่าลายเซ็นนั้นต้องสร้างขึ้นด้วยคีย์คู่ของอลิซแม้ว่าเขาจะไม่รู้และไม่สามารถคำนวณครึ่งส่วนตัวของคีย์คู่ของอลิซได้.
ใส่ให้กระชับมากขึ้น, กระบวนการลายเซ็นการเข้ารหัสนี้ช่วยให้ Bob สามารถตรวจสอบได้ว่าข้อความนั้นไม่ได้สร้างหรือแก้ไขโดยบุคคลที่สามบางรายและจะต้องถูกสร้างขึ้นด้วยคีย์ส่วนตัวของ Alice โดยไม่ต้อง (หรือสามารถ) รู้คีย์ส่วนตัวของเธอได้ สิ่งที่เขาต้องการคือชุดข้อความ / ลายเซ็นและคีย์สาธารณะของเธอ.
โดยสัญชาตญาณสิ่งนี้ดูเหมือนจะเป็นไปไม่ได้และคุณอาจรู้สึกว่าเข้าใจผิดบางอย่าง หากคีย์ส่วนตัวและคีย์สาธารณะของอลิซมีความสัมพันธ์กันอย่างใกล้ชิดและอลิซใช้คีย์ส่วนตัวของเธอเพื่อสร้างลายเซ็นที่บ็อบได้รับเขาจะได้รับคีย์สาธารณะของเธอมา แต่ไม่พบคีย์ส่วนตัวของเธอได้อย่างไร คำตอบนี้ต้องการความเข้าใจคณิตศาสตร์ที่ลึกซึ้งกว่าที่คนส่วนใหญ่มีและอยู่นอกเหนือขอบเขตของหนังสือเล่มนี้.
อย่างไรก็ตามเทคนิคนี้ได้รับการพึ่งพาและใช้ทุกวันและถือได้ว่าเป็นหินที่แข็งแกร่งในชุมชนการเข้ารหัส เมื่อคุณเยี่ยมชมเว็บไซต์และที่อยู่ของเว็บไซต์ขึ้นต้นด้วย https เครื่องหมาย “s” แสดงว่าไซต์นั้นได้ตรวจสอบความถูกต้องของตัวเองด้วยลายเซ็นการเข้ารหัส คอมพิวเตอร์ของคุณใช้อัลกอริธึมการตรวจสอบลายเซ็นเช่นเดียวกับที่ Bob ทำในตัวอย่างข้างต้นเพื่อยืนยันว่าเว็บไซต์นั้นมาจากคู่คีย์ที่ถูกต้องจริงๆ ลายเซ็นการเข้ารหัสนี้ใช้เพื่อให้แน่ใจว่าการโต้ตอบระหว่างคุณกับเว็บไซต์จะได้รับการเข้ารหัสและเป็นของจริง หากการทดสอบนี้ล้มเหลวเบราว์เซอร์สมัยใหม่จะเตือนคุณและตั้งค่าสถานะเว็บไซต์ว่าเป็นอันตราย.
ตัวเลขจำนวนมากเพียงพอ
ก่อนหน้านี้ฉันได้พูดถึงสั้น ๆ ว่าคีย์ส่วนตัวและคีย์สาธารณะทำหน้าที่เหมือนชื่อผู้ใช้และรหัสผ่าน แต่ในความเป็นจริงไม่มีอะไรมากไปกว่าตัวเลขที่มีขนาดใหญ่มากที่มีความสัมพันธ์ทางคณิตศาสตร์พิเศษ ด้วยเหตุนี้ฉันมักจะถูกถามคำถามต่อไปนี้:
“ ไม่มีใครสามารถเดาได้ด้วยคอมพิวเตอร์หรือนับจำนวนตัวเลขและลองใช้เป็นคีย์ส่วนตัวได้หรือไม่? ในที่สุดพวกเขาจะไม่ทำงานข้ามคีย์ส่วนตัวของคีย์คู่เป้าหมายบางคู่และด้วยเหตุนี้จึงสามารถควบคุมข้อมูลประจำตัวดังกล่าวได้หรือไม่” อันที่จริงในกรณีของ Bitcoin สิ่งนี้จะทำให้ผู้โจมตีสามารถขโมยเงินที่ถือโดยคู่กุญแจบางตัวได้.
เป็นคำถามที่ดี แต่ก็ยังไม่เกิดขึ้น ตามที่ระบุไว้ก่อนหน้านี้มีที่อยู่ Bitcoin หลายแห่งที่มี BTC มูลค่าหลายล้านดอลลาร์ที่ไม่ได้เคลื่อนย้ายในช่วงหลายปีที่ผ่านมาแม้ว่าสิ่งที่จำเป็นในการขโมยจะเป็นคีย์ส่วนตัวที่ถูกต้องก็ตาม – จำนวนมหาศาลที่ถูกต้อง! หากคุณสามารถเดาคีย์ส่วนตัวของที่อยู่เหล่านั้นได้เงินเป็นของคุณที่จะส่งไปที่ใดก็ได้ ซึ่งแตกต่างจากรหัสผ่านคุณสามารถตรวจสอบคีย์ส่วนตัวในเครื่องของคุณเองได้และไม่มีเซิร์ฟเวอร์ จำกัด ว่าคุณจะลองใช้กี่ครั้งหรือเร็วแค่ไหน.
แล้วทำไมยังไม่มีใครขโมยเงินเหล่านี้ไปเลย? คำตอบอยู่ที่ขนาดที่แทบจะไร้สาระของตัวเลขที่ใช้เป็นคีย์ส่วนตัว พวกเขาคือ ใหญ่พอสมควร.
เริ่มต้นด้วยการทดลองความคิดง่ายๆ ลองนึกภาพคีย์ส่วนตัวของคุณมีขนาดใหญ่พอที่หากคอมพิวเตอร์ทุกเครื่องในโลกทำงานร่วมกันจะต้องใช้เวลา 24 ชั่วโมงเต็มในการคาดเดา หากคุณเพิ่มตัวเลขเพียงหนึ่งหลักในคีย์ส่วนตัวของคุณคอมพิวเตอร์จะมีการเรียงสับเปลี่ยนมากกว่า 10 เท่าดังนั้นจึงต้องใช้เวลา 10 วันแทนที่จะเป็นหนึ่งหลัก อีกหกหลักจะนำไปสู่ 27,000 ปี.
ในแต่ละกรณีการสร้างคีย์ส่วนตัวซึ่งต้องใช้เพียงความสามารถในการสร้างตัวเลขสุ่มยังคงเป็นเรื่องเล็กน้อย การใช้คีย์ส่วนตัวเพื่อสร้างลายเซ็นเช่นเดียวกับการตรวจสอบลายเซ็นเหล่านี้กับคีย์สาธารณะยังคงเป็นเรื่องง่ายในการคำนวณ แต่งานที่ต้องใช้ในการเดาคีย์ส่วนตัวจะเพิ่มขึ้นอย่างทวีคูณเมื่อมีตัวเลขพิเศษแต่ละตัว ในการสร้างคีย์ส่วนตัวให้“ ภูมิคุ้มกัน” ต่อการเดาอย่างดุร้ายเราต้องเพิ่มตัวเลขให้เพียงพอเท่านั้นเราต้องการเพียงแค่ทำให้มันมีขนาดใหญ่เพียงพอ.
ใหญ่โตแค่ไหนก็เพียงพอแล้ว? คีย์ส่วนตัวที่ใช้ใน Bitcoin เป็นจำนวนเต็ม 256 บิตซึ่งมีจำนวนเท่ากับตัวเลขที่มีความยาวเจ็ดสิบหกหลัก. พลังขนาดนี้เหลือเชื่อมาก ภาพประกอบต่อไปนี้ได้มาอย่างมากจากหนังสือของ Bruce Schneier การเข้ารหัสประยุกต์, และเป็นการสาธิตที่น่าสนใจของตัวเลขจำนวนมหาศาล.
ขั้นแรกให้จำไว้ว่าผลที่ตามมาของกฎข้อที่สองของอุณหพลศาสตร์คือมีพลังงานขั้นต่ำที่จำเป็นในการเปลี่ยนข้อมูลไบนารีบิตเดียว (เปลี่ยน 1 เป็น 0 หรือคีมจับในทางกลับกัน) ซึ่งหมายความว่ากระบวนการคำนวณใด ๆ ต้องใช้พลังงานขั้นต่ำในการดำเนินการโดยไม่คำนึงถึงฮาร์ดแวร์ที่ใช้.
ตอนนี้สมมติว่าคุณสามารถควบคุมพลังงานทั้งหมดของดวงอาทิตย์เพื่อจ่ายไฟให้กับคอมพิวเตอร์ที่ออกแบบมาเป็นพิเศษซึ่งมีหน้าที่ในการนับหรือเดาคีย์ส่วนตัวด้วยความหวังที่จะค้นหาคีย์ส่วนตัวของคู่คีย์ (ซึ่งอาจควบคุม BTC).
ด้วยการใช้คณิตศาสตร์และอุณหพลศาสตร์เล็กน้อยคุณจะพบว่าคอมพิวเตอร์ที่มีประสิทธิภาพสมบูรณ์แบบสามารถนับค่าได้ถึง 2178 ค่าจากการใช้พลังงานทั้งหมดของดวงอาทิตย์ ถ้าเราแบ่งค่านี้เป็นจำนวนคีย์ส่วนตัวที่เป็นไปได้ 2256 เราจะพบว่าคอมพิวเตอร์สมมุตินี้จะสามารถเดาหรือนับได้เพียง 0.0000000000000000000003% ของจำนวนคีย์ส่วนตัวที่เป็นไปได้ทั้งหมดเท่านั้นซึ่งพิจารณาจากพลังงานทั้งหมดของดวงอาทิตย์.
นอกจากนี้นี่เป็นเพียงการนับและไม่รวมงานที่ซับซ้อนมากขึ้นในการตรวจสอบคีย์ส่วนตัวแต่ละอันเพื่อดูว่าตรงกับคีย์สาธารณะที่ถูกต้องหรือไม่ ดังนั้นในโอกาส 0.00000000000000000000000003% ที่คอมพิวเตอร์เครื่องนี้เกิดข้ามคีย์ส่วนตัวที่ถูกต้องภายในสิ้นปีหนึ่งมันจะไม่รู้ตัวด้วยซ้ำ.
ตัวเลขเหล่านี้ไม่มีส่วนเกี่ยวข้องกับเทคโนโลยีของอุปกรณ์ เป็นค่าสูงสุดที่เป็นไปได้ตามกฎของอุณหพลศาสตร์ที่กำหนดขึ้นตั้งแต่ทศวรรษที่ 1930 และพวกเขาบอกเป็นนัยอย่างชัดเจนว่าการโจมตีด้วยพลังแบบเดรัจฉานต่อคีย์ 256 บิต (ซึ่ง Bitcoin ใช้) จะไม่สามารถทำได้จนกว่าคอมพิวเตอร์จะสร้างขึ้นจากสิ่งอื่นที่ไม่ใช่สสารและครอบครองสิ่งอื่นที่ไม่ใช่พื้นที่.
นี่คือพลังของตัวเลขที่มากพอสมควร. ไม่สำคัญว่าแฮ็กเกอร์จะเก่งแค่ไหน หากเขาไม่สามารถควบคุมพลังของดวงอาทิตย์สามร้อยสิบล้านดวงเป็นเวลาหนึ่งปีหรือหนึ่งดวงเป็นเวลาสามร้อยสิบล้านปีคอมพิวเตอร์ของเขาก็ไม่สามารถทำได้ นับ ผ่านคีย์ส่วนตัวทั้งหมดไม่ว่าจะทดสอบหรือใช้คีย์อื่น ๆ.
หากต้องการดู Bitcoin และการเข้ารหัสในเชิงลึกมากขึ้นโปรดอ่านหนังสือของ Logan Brutsche, คู่มือคนธรรมดาสำหรับ Bitcoin.